Overview
GLMR Balance
GLMR Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 9,501 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Execute | 6341173 | 317 days ago | IN | 0 GLMR | 0.03101918 | ||||
Queue | 6334064 | 318 days ago | IN | 0 GLMR | 0.01598125 | ||||
Cast Vote | 6321697 | 320 days ago | IN | 0 GLMR | 0.0301515 | ||||
Cast Vote | 6316645 | 320 days ago | IN | 0 GLMR | 0.0300775 | ||||
Cast Vote | 6315664 | 321 days ago | IN | 0 GLMR | 0.03051331 | ||||
Cast Vote | 6314309 | 321 days ago | IN | 0 GLMR | 0.03025965 | ||||
Cast Vote | 6314286 | 321 days ago | IN | 0 GLMR | 0.0300935 | ||||
Cast Vote | 6314278 | 321 days ago | IN | 0 GLMR | 0.03025965 | ||||
Cast Vote | 6313838 | 321 days ago | IN | 0 GLMR | 0.0301515 | ||||
Cast Vote | 6313762 | 321 days ago | IN | 0 GLMR | 0.0301515 | ||||
Propose | 6312537 | 321 days ago | IN | 0 GLMR | 0.06419347 | ||||
Execute | 5832106 | 389 days ago | IN | 0 GLMR | 0.2255804 | ||||
Queue | 5825008 | 390 days ago | IN | 0 GLMR | 0.20903178 | ||||
Cast Vote | 5824276 | 390 days ago | IN | 0 GLMR | 0.03669493 | ||||
Cast Vote | 5823934 | 390 days ago | IN | 0 GLMR | 0.03772026 | ||||
Cast Vote | 5823570 | 390 days ago | IN | 0 GLMR | 0.03846611 | ||||
Cast Vote | 5822247 | 390 days ago | IN | 0 GLMR | 0.0369184 | ||||
Cast Vote | 5822237 | 390 days ago | IN | 0 GLMR | 0.03697464 | ||||
Cast Vote | 5821744 | 390 days ago | IN | 0 GLMR | 0.03683714 | ||||
Cast Vote | 5821026 | 390 days ago | IN | 0 GLMR | 0.03712385 | ||||
Cast Vote | 5820463 | 390 days ago | IN | 0 GLMR | 0.03674871 | ||||
Cast Vote | 5820421 | 390 days ago | IN | 0 GLMR | 0.0364851 | ||||
Cast Vote | 5818844 | 391 days ago | IN | 0 GLMR | 0.04576606 | ||||
Cast Vote | 5818770 | 391 days ago | IN | 0 GLMR | 0.04690003 | ||||
Cast Vote | 5818318 | 391 days ago | IN | 0 GLMR | 0.05857705 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MoonwellGovernorArtemis
Compiler Version
v0.5.17+commit.d19bba13
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity 0.5.17; pragma experimental ABIEncoderV2; import "./IERC20.sol"; contract MoonwellGovernorArtemis { /// @notice The name of this contract string public constant name = "Moonwell Artemis Governor"; /// @notice Values for votes uint8 public constant voteValueYes = 0; uint8 public constant voteValueNo = 1; uint8 public constant voteValueAbstain = 2; /// @notice The number of votes for a proposal required in order for a quorum to be reached and for a vote to succeed uint public quorumVotes = 100000000e18; // 100,000,000 WELL /// @notice The number of votes required in order for a voter to become a proposer uint public proposalThreshold = 400000e18; // 400,000 WELL /// @notice The maximum number of actions that can be included in a proposal uint public proposalMaxOperations = 25; // 25 actions /// @notice The delay before voting on a proposal may take place, once proposed uint public votingDelay = 60 seconds; /// @notice The duration of voting on a proposal, in blocks uint public votingPeriod = 3 days; /// @notice The address of the Well Protocol Timelock TimelockInterface public timelock; /// @notice The address of the Well governance token WellInterface public well; /// @notice The address of the Distributor contract SnapshotInterface public distributor; /// @notice The address of the Safety Module contract SnapshotInterface public safetyModule; /// @notice The total number of proposals uint public proposalCount; /// @notice The address of the Break Glass Guardian /// This address can opt to call '_executeBreakGlass*' which will execute an operation to return governance to /// the governance return addres in the event a bug is found in governnce. address public breakGlassGuardian; /// @notice An address that can set the governance return address. address public governanceReturnGuardian; /// @notice The address that will receive control of governance when glass is broken. address public governanceReturnAddress; /// @notice The timestamp when guardians may be stripped of their power through a vote. uint256 public guardianSunset; struct Proposal { /// @notice Unique id for looking up a proposal uint id; /// @notice Creator of the proposal address proposer; /// @notice The timestamp that the proposal will be available for execution, set once the vote succeeds uint eta; /// @notice the ordered list of target addresses for calls to be made address[] targets; /// @notice The ordered list of values (i.e. msg.value) to be passed to the calls to be made uint[] values; /// @notice The ordered list of function signatures to be called string[] signatures; /// @notice The ordered list of calldata to be passed to each call bytes[] calldatas; /// @notice The timestamp at which voting begins: holders must delegate their votes prior to this time uint startTimestamp; /// @notice The timestamp at which voting ends: votes must be cast prior to this time uint endTimestamp; /// @notice The block at which voting began: holders must have delegated their votes prior to this block uint startBlock; /// @notice Current number of votes in favor of this proposal uint forVotes; /// @notice Current number of votes in opposition to this proposal uint againstVotes; /// @notice Current number of votes in abstention to this proposal uint abstainVotes; /// @notice The total votes on a proposal. uint totalVotes; /// @notice Flag marking whether the proposal has been canceled bool canceled; /// @notice Flag marking whether the proposal has been executed bool executed; /// @notice Receipts of ballots for the entire set of voters mapping (address => Receipt) receipts; } /// @notice Ballot receipt record for a voter struct Receipt { /// @notice Whether or not a vote has been cast bool hasVoted; /// @notice The value of the vote. uint8 voteValue; /// @notice The number of votes the voter had, which were cast uint votes; } /// @notice Possible states that a proposal may be in enum ProposalState { Pending, Active, Canceled, Defeated, Succeeded, Queued, Expired, Executed } /// @notice The official record of all proposals ever proposed mapping (uint => Proposal) public proposals; /// @notice The latest proposal for each proposer mapping (address => uint) public latestProposalIds; /// @notice The EIP-712 typehash for the contract's domain bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)"); /// @notice The EIP-712 typehash for the ballot struct used by the contract bytes32 public constant BALLOT_TYPEHASH = keccak256("Ballot(uint256 proposalId,uint8 voteValue)"); /// @notice An event emitted when a new proposal is created event ProposalCreated(uint id, address proposer, address[] targets, uint[] values, string[] signatures, bytes[] calldatas, uint startTimestamp, uint endTimestamp, string description); /// @notice An event emitted when the first vote is cast in a proposal event StartBlockSet(uint proposalId, uint startBlock); /// @notice An event emitted when a vote has been cast on a proposal event VoteCast(address voter, uint proposalId, uint8 voteValue, uint votes); /// @notice An event emitted when a proposal has been canceled event ProposalCanceled(uint id); /// @notice An event emitted when a proposal has been queued in the Timelock event ProposalQueued(uint id, uint eta); /// @notice An event emitted when a proposal has been executed in the Timelock event ProposalExecuted(uint id); /// @notice An event emitted when thee quorum votes is changed. event QuroumVotesChanged(uint256 oldValue, uint256 newValue); /// @notice An event emitted when the proposal threshold is changed. event ProposalThresholdChanged(uint256 oldValue, uint256 newValue); /// @notice An event emitted when the proposal max operations is changed. event ProposalMaxOperationsChanged(uint256 oldValue, uint256 newValue); /// @notice An event emitted when the voting delay is changed. event VotingDelayChanged(uint256 oldValue, uint256 newValue); /// @notice An event emitted when the voting period is changed. event VotingPeriodChanged(uint256 oldValue, uint256 newValue); /// @notice An event emitted when the break glass guardian is changed. event BreakGlassGuardianChanged(address oldValue, address newValue); /// @notice An event emitted when the governance return address is changed. event GovernanceReturnAddressChanged(address oldValue, address newValue); constructor( address timelock_, address well_, address distributor_, address safetyModule_, address breakGlassGuardian_, address governanceReturnAddress_, address governanceReturnGuardian_, uint guardianSunset_ ) public { timelock = TimelockInterface(timelock_); well = WellInterface(well_); distributor = SnapshotInterface(distributor_); safetyModule = SnapshotInterface(safetyModule_); breakGlassGuardian = breakGlassGuardian_; governanceReturnAddress = governanceReturnAddress_; governanceReturnGuardian = governanceReturnGuardian_; guardianSunset = guardianSunset_; } function propose(address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description) public returns (uint) { require(_getVotingPower(msg.sender, sub256(block.number, 1)) > proposalThreshold, "GovernorArtemis::propose: proposer votes below proposal threshold"); require(targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length, "GovernorArtemis::propose: proposal function information arity mismatch"); require(targets.length != 0, "GovernorArtemis::propose: must provide actions"); require(targets.length <= proposalMaxOperations, "GovernorArtemis::propose: too many actions"); require(bytes(description).length > 0, "description can not be empty"); uint latestProposalId = latestProposalIds[msg.sender]; if (latestProposalId != 0) { ProposalState proposersLatestProposalState = state(latestProposalId); require(proposersLatestProposalState != ProposalState.Active, "GovernorArtemis::propose: one live proposal per proposer, found an already active proposal"); require(proposersLatestProposalState != ProposalState.Pending, "GovernorArtemis::propose: one live proposal per proposer, found an already pending proposal"); } uint startTimestamp = add256(block.timestamp, votingDelay); uint endTimestamp = add256(block.timestamp, add256(votingPeriod, votingDelay)); proposalCount++; Proposal memory newProposal = Proposal({ id: proposalCount, proposer: msg.sender, eta: 0, targets: targets, values: values, signatures: signatures, calldatas: calldatas, startTimestamp: startTimestamp, endTimestamp: endTimestamp, startBlock: 0, forVotes: 0, againstVotes: 0, abstainVotes: 0, totalVotes: 0, canceled: false, executed: false }); proposals[newProposal.id] = newProposal; latestProposalIds[newProposal.proposer] = newProposal.id; emit ProposalCreated(newProposal.id, msg.sender, targets, values, signatures, calldatas, startTimestamp, endTimestamp, description); return newProposal.id; } function queue(uint proposalId) public { require(state(proposalId) == ProposalState.Succeeded, "GovernorArtemis::queue: proposal can only be queued if it is succeeded"); Proposal storage proposal = proposals[proposalId]; uint eta = add256(block.timestamp, timelock.delay()); for (uint i = 0; i < proposal.targets.length; i++) { _queueOrRevert(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], eta); } proposal.eta = eta; emit ProposalQueued(proposalId, eta); } function _queueOrRevert(address target, uint value, string memory signature, bytes memory data, uint eta) internal { require(!timelock.queuedTransactions(keccak256(abi.encode(target, value, signature, data, eta))), "GovernorArtemis::_queueOrRevert: proposal action already queued at eta"); timelock.queueTransaction(target, value, signature, data, eta); } function execute(uint proposalId) external { require(state(proposalId) == ProposalState.Queued, "GovernorArtemis::execute: proposal can only be executed if it is queued"); Proposal storage proposal = proposals[proposalId]; proposal.executed = true; for (uint i = 0; i < proposal.targets.length; i++) { timelock.executeTransaction(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta); } emit ProposalExecuted(proposalId); } function cancel(uint proposalId) public { ProposalState state = state(proposalId); require(state != ProposalState.Executed, "GovernorArtemis::cancel: cannot cancel executed proposal"); Proposal storage proposal = proposals[proposalId]; require(_getVotingPower(proposal.proposer, sub256(block.number, 1)) < proposalThreshold, "GovernorArtemis::cancel: proposer above threshold"); proposal.canceled = true; for (uint i = 0; i < proposal.targets.length; i++) { timelock.cancelTransaction(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta); } emit ProposalCanceled(proposalId); } function getActions(uint proposalId) public view returns (address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas) { Proposal storage p = proposals[proposalId]; return (p.targets, p.values, p.signatures, p.calldatas); } function getReceipt(uint proposalId, address voter) public view returns (Receipt memory) { return proposals[proposalId].receipts[voter]; } function state(uint proposalId) public view returns (ProposalState) { require(proposalCount >= proposalId && proposalId > 0, "GovernorArtemis::state: invalid proposal id"); Proposal storage proposal = proposals[proposalId]; // First check if the proposal cancelled. if (proposal.canceled) { return ProposalState.Canceled; // Then check if the proposal is pending or active, in which case nothing else can be determined at this time. } else if (block.timestamp <= proposal.startTimestamp) { return ProposalState.Pending; } else if (block.timestamp <= proposal.endTimestamp) { return ProposalState.Active; // Then, check if the proposal is defeated. To hit this case, either (1) majority of yay/nay votes were nay or // (2) total votes was less than the quorum amount. } else if (proposal.forVotes <= proposal.againstVotes || proposal.totalVotes < quorumVotes) { return ProposalState.Defeated; } else if (proposal.eta == 0) { return ProposalState.Succeeded; } else if (proposal.executed) { return ProposalState.Executed; } else if (block.timestamp >= add256(proposal.eta, timelock.GRACE_PERIOD())) { return ProposalState.Expired; } else { return ProposalState.Queued; } } function castVote(uint proposalId, uint8 voteValue) public { return _castVote(msg.sender, proposalId, voteValue); } function castVoteBySig(uint256 proposalId, uint8 voteValue, uint8 v, bytes32 r, bytes32 s) public { bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this))); bytes32 structHash = keccak256(abi.encode(BALLOT_TYPEHASH, proposalId, voteValue)); bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); address signatory = ecrecover(digest, v, r, s); require(signatory != address(0), "GovernorArtemis::castVoteBySig: invalid signature"); return _castVote(signatory, proposalId, voteValue); } function _castVote(address voter, uint proposalId, uint8 voteValue) internal { require(state(proposalId) == ProposalState.Active, "GovernorArtemis::_castVote: voting is closed"); Proposal storage proposal = proposals[proposalId]; if (proposal.startBlock == 0) { proposal.startBlock = block.number - 1; emit StartBlockSet(proposalId, block.number); } Receipt storage receipt = proposal.receipts[voter]; require(receipt.hasVoted == false, "GovernorArtemis::_castVote: voter already voted"); uint votes = _getVotingPower(voter, proposal.startBlock); if (voteValue == voteValueYes) { proposal.forVotes = add256(proposal.forVotes, votes); } else if (voteValue == voteValueNo) { proposal.againstVotes = add256(proposal.againstVotes, votes); } else if (voteValue == voteValueAbstain) { proposal.abstainVotes = add256(proposal.abstainVotes, votes); } else { // Catch all. If an above case isn't matched then the value is not valid. revert("GovernorArtemis::_castVote: invalid vote value"); } // Increase total votes proposal.totalVotes = add256(proposal.totalVotes, votes); receipt.hasVoted = true; receipt.voteValue = voteValue; receipt.votes = votes; emit VoteCast(voter, proposalId, voteValue, votes); } function _getVotingPower(address voter, uint blockNumber) internal returns (uint) { // Get votes from the WELL contract, the distributor contract, and the safety module contact. uint96 wellVotes = well.getPriorVotes(voter, blockNumber); uint distibutorVotes = distributor.getPriorVotes(voter, blockNumber); uint safetyModuleVotes = safetyModule.getPriorVotes(voter, blockNumber); return add256(add256(uint(wellVotes), distibutorVotes), safetyModuleVotes); } // @notice Sweeps all tokens owned by Governor alpha to the given destination address. function sweepTokens(address tokenAddress, address destinationAddress) external { require(msg.sender == address(timelock), "GovernorArtemis::sweepTokens: sender must be timelock"); IERC20 token = IERC20(tokenAddress); uint balance = token.balanceOf(address(this)); token.transfer(destinationAddress, balance); } /// Governance Introspection function setQuorumVotes(uint newValue) external { require(msg.sender == address(timelock), "only timelock"); uint256 oldValue = quorumVotes; quorumVotes = newValue; emit QuroumVotesChanged(oldValue, newValue); } function setProposalThreshold(uint newValue) external { require(msg.sender == address(timelock), "only timelock"); uint256 oldValue = proposalThreshold; proposalThreshold = newValue; emit ProposalThresholdChanged(oldValue, newValue); } function setVotingDelay(uint newValue) external { require(msg.sender == address(timelock), "only timelock"); uint256 oldValue = votingDelay; votingDelay = newValue; emit VotingDelayChanged(oldValue, newValue); } function setProposalMaxOperations(uint newValue) external { require(msg.sender == address(timelock), "only timelock"); uint256 oldValue = proposalMaxOperations; proposalMaxOperations = newValue; emit ProposalMaxOperationsChanged(oldValue, newValue); } function setVotingPeriod(uint newValue) external { require(msg.sender == address(timelock), "only timelock"); uint256 oldValue = votingPeriod; votingPeriod = newValue; emit VotingPeriodChanged(oldValue, newValue); } function setBreakGlassGuardian(address newGuardian) external { require(msg.sender == breakGlassGuardian, "only break glass guardian"); address oldValue = breakGlassGuardian; breakGlassGuardian = newGuardian; emit BreakGlassGuardianChanged(oldValue, newGuardian); } /// Governance Return Guardian /// @notice Sets the address that governance will be returned to in an emergency. Only callable by the governance return guardian. function __setGovernanceReturnAddress(address governanceReturnAddress_) external { require(msg.sender == governanceReturnGuardian, "GovernorArtemis::__setGovernanceReturnAddress: sender must be gov return guardian"); address oldValue = governanceReturnAddress; governanceReturnAddress = governanceReturnAddress_; emit GovernanceReturnAddressChanged(oldValue, governanceReturnAddress_); } /// Break Glass Guardian - Emergency Declarations /// @notice Fast tracks calling _setPendingAdmin on the given contracts through the timelock. Only callable by the break glass guardian. function __executeBreakGlassOnCompound(CompoundSetPendingAdminInterface[] calldata addresses) external { require(msg.sender == breakGlassGuardian, "GovernorArtemis::__breakglass: sender must be bg guardian"); uint length = addresses.length; for (uint i = 0; i < length; ++i) { timelock.fastTrackExecuteTransaction(address(addresses[i]), 0, "_setPendingAdmin(address)", abi.encode(governanceReturnAddress)); } } /// @notice Fast tracks calling setAdmin on the given contracts through the timelock. Only callable by the break glass guardian. function __executeBreakGlassOnSetAdmin(SetAdminInterface[] calldata addresses) external { require(msg.sender == breakGlassGuardian, "GovernorArtemis::__breakglass: sender must be bg guardian"); uint length = addresses.length; for (uint i = 0; i < length; ++i) { timelock.fastTrackExecuteTransaction(address(addresses[i]), 0, "setAdmin(address)", abi.encode(governanceReturnAddress)); } } /// @notice Fast tracks calling setPendingAdmin on the given contracts through the timelock. Only callable by the break glass guardian. function __executeBreakGlassOnSetPendingAdmin(SetPendingAdminInterface[] calldata addresses) external { require(msg.sender == breakGlassGuardian, "GovernorArtemis::__breakglass: sender must be bg guardian"); uint length = addresses.length; for (uint i = 0; i < length; ++i) { timelock.fastTrackExecuteTransaction(address(addresses[i]), 0, "setPendingAdmin(address)", abi.encode(governanceReturnAddress)); } } /// @notice Fast tracks calling changeAdmin on the given contracts through the timelock. Only callable by the break glass guardian. function __executeBreakGlassOnChangeAdmin(ChangeAdminInterface[] calldata addresses) external { require(msg.sender == breakGlassGuardian, "GovernorArtemis::__breakglass: sender must be bg guardian"); uint length = addresses.length; for (uint i = 0; i < length; ++i) { timelock.fastTrackExecuteTransaction(address(addresses[i]), 0, "changeAdmin(address)", abi.encode(governanceReturnAddress)); } } /// @notice Fast tracks calling transferOwnership on the given contracts through the timelock. Only callable by the break glass guardian. function __executeBreakGlassOnOwnable(OwnableInterface[] calldata addresses) external { require(msg.sender == breakGlassGuardian, "GovernorArtemis::__breakglass: sender must be bg guardian"); uint length = addresses.length; for (uint i = 0; i < length; ++i) { timelock.fastTrackExecuteTransaction(address(addresses[i]), 0, "transferOwnership(address)", abi.encode(governanceReturnAddress)); } } /// @notice Fast tracks setting an emissions manager on the given contracts through the timelock. Only callable by the break glass guardian. function __executeBreakGlassOnEmissionsManager(SetEmissionsManagerInterface[] calldata addresses) external { require(msg.sender == breakGlassGuardian, "GovernorArtemis::__breakglass: sender must be bg guardian"); uint length = addresses.length; for (uint i = 0; i < length; ++i) { timelock.fastTrackExecuteTransaction(address(addresses[i]), 0, "setEmissionsManager(address)", abi.encode(governanceReturnAddress)); } } /// Break Glass Guardian - Recovery Operations /// @notice Fast tracks calling _acceptAdmin through the timelock for the given targets. function __executeCompoundAcceptAdminOnContract(address[] calldata addresses) external { require(msg.sender == breakGlassGuardian, "GovernorArtemis::__executeCompoundAcceptAdminOnContract: sender must be bg guardian"); uint length = addresses.length; for (uint i = 0; i < length; ++i) { timelock.fastTrackExecuteTransaction(addresses[i], 0, "_acceptAdmin()", abi.encode()); } } /// @notice Fast tracks calling acceptPendingAdmin through the timelock for the given targets. function __executeAcceptAdminOnContract(address[] calldata addresses) external { require(msg.sender == breakGlassGuardian, "GovernorArtemis::__executeAcceptAdminOnContract: sender must be bg guardian"); uint length = addresses.length; for (uint i = 0; i < length; ++i) { timelock.fastTrackExecuteTransaction(addresses[i], 0, "acceptPendingAdmin()", abi.encode()); } } /// Break Glass Guardian - Timelock Management /// @notice Calls accept admin on the timelock. Only callable by the break glass guardian. function __acceptAdminOnTimelock() external { require(msg.sender == breakGlassGuardian, "GovernorArtemis::__acceptAdmin: sender must be bg guardian"); timelock.acceptAdmin(); } /// Guardian Removeal /// @notice Removes Guardians from the governance process. Can only be called by the timelock. This is an irreversible operation. function __removeGuardians() external { // Removing power can only come via a governance vote, which will be executed from the timelock. require(msg.sender == address(timelock), "GovernorArtemis::__removeGuardians: sender must be the timelock"); // Removing the governance guardian can only occur after the sunset. require(block.timestamp >= guardianSunset, "GovernorArtemis::__removeGuardians cannot remove before sunset"); // Set both guardians to the zero address. breakGlassGuardian = address(0); governanceReturnGuardian = address(0); } function add256(uint256 a, uint256 b) internal pure returns (uint) { uint c = a + b; require(c >= a, "addition overflow"); return c; } function sub256(uint256 a, uint256 b) internal pure returns (uint) { require(b <= a, "subtraction underflow"); return a - b; } function getChainId() internal pure returns (uint) { uint chainId; assembly { chainId := chainid() } return chainId; } } interface TimelockInterface { function delay() external view returns (uint); function GRACE_PERIOD() external view returns (uint); function acceptAdmin() external; function queuedTransactions(bytes32 hash) external view returns (bool); function queueTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external returns (bytes32); function cancelTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external; function executeTransaction(address target, uint value, string calldata signature, bytes calldata data, uint eta) external payable returns (bytes memory); function fastTrackExecuteTransaction(address target, uint value, string calldata signature, bytes calldata data) external payable returns (bytes memory); } interface WellInterface { function getPriorVotes(address account, uint blockNumber) external view returns (uint96); } interface SnapshotInterface { function getPriorVotes(address account, uint blockNumber) external view returns (uint256); } // Used on Compound Contracts - Unitroller, MTokens interface CompoundSetPendingAdminInterface { function _setPendingAdmin(address newPendingAdmin) external; } // Used on Chainlink Oracle interface SetAdminInterface { function setAdmin(address newAdmin) external; } // Used on TokenSaleDistributor interface SetPendingAdminInterface { function setPendingAdmin(address newAdmin) external; } // Used on safety ProxyAdmin interface SetEmissionsManagerInterface { function setEmissionsManager(address newEmissionsManager) external; } // Used on safety module ProxyAdmin interface ChangeAdminInterface { function changeAdmin(address newAdmin) external; } // Used on Ownable contracts - EcoystemReserveController interface OwnableInterface { function transferOwnership(address newOwner) external; }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.5.17; /** * @dev Interface of the ERC20 standard as defined in the EIP. * From https://github.com/OpenZeppelin/openzeppelin-contracts */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"timelock_","type":"address"},{"internalType":"address","name":"well_","type":"address"},{"internalType":"address","name":"distributor_","type":"address"},{"internalType":"address","name":"safetyModule_","type":"address"},{"internalType":"address","name":"breakGlassGuardian_","type":"address"},{"internalType":"address","name":"governanceReturnAddress_","type":"address"},{"internalType":"address","name":"governanceReturnGuardian_","type":"address"},{"internalType":"uint256","name":"guardianSunset_","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldValue","type":"address"},{"indexed":false,"internalType":"address","name":"newValue","type":"address"}],"name":"BreakGlassGuardianChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldValue","type":"address"},{"indexed":false,"internalType":"address","name":"newValue","type":"address"}],"name":"GovernanceReturnAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"signatures","type":"string[]"},{"indexed":false,"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTimestamp","type":"uint256"},{"indexed":false,"internalType":"string","name":"description","type":"string"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"ProposalMaxOperationsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ProposalQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"ProposalThresholdChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"QuroumVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"}],"name":"StartBlockSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"voteValue","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"}],"name":"VoteCast","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"VotingDelayChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"VotingPeriodChanged","type":"event"},{"constant":true,"inputs":[],"name":"BALLOT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"__acceptAdminOnTimelock","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"__executeAcceptAdminOnContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract ChangeAdminInterface[]","name":"addresses","type":"address[]"}],"name":"__executeBreakGlassOnChangeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract CompoundSetPendingAdminInterface[]","name":"addresses","type":"address[]"}],"name":"__executeBreakGlassOnCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract SetEmissionsManagerInterface[]","name":"addresses","type":"address[]"}],"name":"__executeBreakGlassOnEmissionsManager","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract OwnableInterface[]","name":"addresses","type":"address[]"}],"name":"__executeBreakGlassOnOwnable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract SetAdminInterface[]","name":"addresses","type":"address[]"}],"name":"__executeBreakGlassOnSetAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract SetPendingAdminInterface[]","name":"addresses","type":"address[]"}],"name":"__executeBreakGlassOnSetPendingAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"__executeCompoundAcceptAdminOnContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"__removeGuardians","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"governanceReturnAddress_","type":"address"}],"name":"__setGovernanceReturnAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"breakGlassGuardian","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"voteValue","type":"uint8"}],"name":"castVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"voteValue","type":"uint8"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"castVoteBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"distributor","outputs":[{"internalType":"contract SnapshotInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getActions","outputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"name":"getReceipt","outputs":[{"components":[{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"uint8","name":"voteValue","type":"uint8"},{"internalType":"uint256","name":"votes","type":"uint256"}],"internalType":"struct MoonwellGovernorArtemis.Receipt","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"governanceReturnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"governanceReturnGuardian","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"guardianSunset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalMaxOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"internalType":"uint256","name":"endTimestamp","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"uint256","name":"abstainVotes","type":"uint256"},{"internalType":"uint256","name":"totalVotes","type":"uint256"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"queue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"quorumVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"safetyModule","outputs":[{"internalType":"contract SnapshotInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newGuardian","type":"address"}],"name":"setBreakGlassGuardian","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setProposalMaxOperations","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setProposalThreshold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setQuorumVotes","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setVotingDelay","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setVotingPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum MoonwellGovernorArtemis.ProposalState","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"destinationAddress","type":"address"}],"name":"sweepTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"timelock","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"voteValueAbstain","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"voteValueNo","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"voteValueYes","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"well","outputs":[{"internalType":"contract WellInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526a52b7d2dcc80cd2e40000006000556954b40b1f852bda0000006001556019600255603c6003556203f4806004553480156200003f57600080fd5b5060405162004e2938038062004e29833981016040819052620000629162000108565b600580546001600160a01b03199081166001600160a01b039a8b1617909155600680548216988a16989098179097556007805488169689169690961790955560088054871694881694909417909355600a8054861692871692909217909155600c80548516918616919091179055600b80549093169316929092179055600d5562000203565b8051620000f581620001de565b92915050565b8051620000f581620001f8565b600080600080600080600080610100898b0312156200012657600080fd5b6000620001348b8b620000e8565b9850506020620001478b828c01620000e8565b97505060406200015a8b828c01620000e8565b96505060606200016d8b828c01620000e8565b9550506080620001808b828c01620000e8565b94505060a0620001938b828c01620000e8565b93505060c0620001a68b828c01620000e8565b92505060e0620001b98b828c01620000fb565b9150509295985092959890939650565b60006001600160a01b038216620000f5565b90565b620001e981620001c9565b8114620001f557600080fd5b50565b620001e981620001db565b614c1680620002136000396000f3fe608060405234801561001057600080fd5b50600436106102bb5760003560e01c806375fe572e11610182578063c5f62ca2116100e9578063dd66f168116100a2578063e23a9a521161007c578063e23a9a52146105a6578063ea0217cf146105c6578063ece40cc1146105d9578063fe0d94c1146105ec576102bb565b8063dd66f16814610578578063ddf0b0091461058b578063deaaa7cc1461059e576102bb565b8063c5f62ca214610527578063c9ba036b1461052f578063cbfcc4dc14610542578063d33219b414610555578063da35c6641461055d578063da95691a14610565576102bb565b8063912ae9fa1161013b578063912ae9fa146104d4578063b58131b0146104e7578063bd0119b6146104ef578063bef3a06f14610502578063bfe1092814610517578063c0878f0c1461051f576102bb565b806375fe572e1461049957806377f386cf146104ac578063795c8180146104b45780637bdbe4d0146104bc5780638ad84491146104c45780638f71120b146104cc576102bb565b8063328dd9821161022657806356781388116101df578063567813881461043b57806358656baa1461044e5780636a23651c146104565780636fe3db211461045e57806370b0f6601461047157806370da933714610484576102bb565b8063328dd982146103b75780633932abb1146103da5780633bccf4fd146103e25780633e4f49e6146103f557806340e58ee51461041557806342c9ad2314610428576102bb565b806317977c611161027857806317977c611461035b5780631d314f761461036e57806320606b701461038157806323a56b1714610389578063241dcdbc1461039c57806324bc1a64146103af576102bb565b8063013cf08b146102c057806302a251a3146102f457806302ec8f9e1461030957806306fdde031461031e5780630fbc82b8146103335780631609be1d14610348575b600080fd5b6102d36102ce36600461328e565b6105ff565b6040516102eb9c9b9a9998979695949392919061497f565b60405180910390f35b6102fc61066f565b6040516102eb9190614639565b61031c61031736600461328e565b610675565b005b6103266106ee565b6040516102eb91906146e8565b61033b610723565b6040516102eb919061436e565b61031c610356366004613097565b610732565b6102fc610369366004613071565b610867565b61031c61037c3660046130d1565b610879565b6102fc610994565b61031c610397366004613071565b6109ab565b61031c6103aa3660046130d1565b610a28565b6102fc610b3d565b6103ca6103c536600461328e565b610b43565b6040516102eb94939291906145ec565b6102fc610dd2565b61031c6103f03660046132fb565b610dd8565b61040861040336600461328e565b610f71565b6040516102eb91906146da565b61031c61042336600461328e565b6110f0565b61031c61043636600461328e565b6112c5565b61031c6104493660046132cb565b611329565b61033b611338565b61031c611347565b61031c61046c3660046130d1565b6113b1565b61031c61047f36600461328e565b6114c6565b61048c61152a565b6040516102eb9190614a40565b61031c6104a73660046130d1565b61152f565b61031c611644565b61048c6116d2565b6102fc6116d7565b61033b6116dd565b61048c6116ec565b61031c6104e23660046130d1565b6116f1565b6102fc611806565b61031c6104fd3660046130d1565b61180c565b61050a611921565b6040516102eb91906146cc565b61050a611930565b61050a61193f565b6102fc61194e565b61031c61053d366004613071565b611954565b61031c6105503660046130d1565b6119d1565b61050a611aca565b6102fc611ad9565b6102fc610573366004613113565b611adf565b61031c6105863660046130d1565b611ecc565b61031c61059936600461328e565b611fc5565b6102fc612234565b6105b96105b43660046132ac565b612240565b6040516102eb91906148c9565b61031c6105d436600461328e565b6122a2565b61031c6105e736600461328e565b612306565b61031c6105fa36600461328e565b61236a565b600e602081905260009182526040909120805460018201546002830154600784015460088501546009860154600a870154600b880154600c890154600d8a015499909a015497996001600160a01b0390971698959794969395929491939092909160ff808216916101009004168c565b60045481565b6005546001600160a01b031633146106a85760405162461bcd60e51b815260040161069f90614759565b60405180910390fd5b60008054908290556040517f881e29202a36aa27b2e7dbd1086b0679e9212ac38029ba9959623b58d66a56b2906106e29083908590614a32565b60405180910390a15050565b6040518060400160405280601981526020017826b7b7b73bb2b6361020b93a32b6b4b99023b7bb32b93737b960391b81525081565b600a546001600160a01b031681565b6005546001600160a01b0316331461075c5760405162461bcd60e51b815260040161069f90614769565b6040516370a0823160e01b815282906000906001600160a01b038316906370a082319061078d90309060040161436e565b60206040518083038186803b1580156107a557600080fd5b505afa1580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107dd919081019061321d565b60405163a9059cbb60e01b81529091506001600160a01b0383169063a9059cbb9061080e908690859060040161450b565b602060405180830381600087803b15801561082857600080fd5b505af115801561083c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061086091908101906131ff565b5050505050565b600f6020526000908152604090205481565b600a546001600160a01b031633146108a35760405162461bcd60e51b815260040161069f90614719565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c48585848181106108cc57fe5b90506020020160206108e19190810190613270565b600c54604051600091610902916001600160a01b039091169060200161436e565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161092f9392919061445b565b600060405180830381600087803b15801561094957600080fd5b505af115801561095d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610985919081019061323b565b506001016108a7565b50505050565b6040516109a090614363565b604051809103902081565b600b546001600160a01b031633146109d55760405162461bcd60e51b815260040161069f90614799565b600c80546001600160a01b038381166001600160a01b03198316179092556040519116907f37276f7ac42bca4e34ce7e35e0c714561034815f69bd9b5156226a0ac779d098906106e2908390859061437c565b600a546001600160a01b03163314610a525760405162461bcd60e51b815260040161069f90614719565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c4858584818110610a7b57fe5b9050602002016020610a909190810190613270565b600c54604051600091610ab1916001600160a01b039091169060200161436e565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401610ade93929190614487565b600060405180830381600087803b158015610af857600080fd5b505af1158015610b0c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b34919081019061323b565b50600101610a56565b60005481565b6060806060806000600e600087815260200190815260200160002090508060030181600401826005018360060183805480602002602001604051908101604052809291908181526020018280548015610bc557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ba7575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610c1757602002820191906000526020600020905b815481526020019060010190808311610c03575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610cea5760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610cd65780601f10610cab57610100808354040283529160200191610cd6565b820191906000526020600020905b815481529060010190602001808311610cb957829003601f168201915b505050505081526020019060010190610c3f565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610dbc5760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610da85780601f10610d7d57610100808354040283529160200191610da8565b820191906000526020600020905b815481529060010190602001808311610d8b57829003601f168201915b505050505081526020019060010190610d11565b5050505090509450945094509450509193509193565b60035481565b6000604051610de690614363565b60408051918290038220828201909152601982527826b7b7b73bb2b6361020b93a32b6b4b99023b7bb32b93737b960391b6020909201919091527f223bb758b930fd9aafbf32cfb035ea5f1fc9baaf33a27a058a5be80e96da888f610e4961250a565b30604051602001610e5d9493929190614647565b6040516020818303038152906040528051906020012090506000604051610e8390614358565b604051908190038120610e9c918990899060200161467c565b60405160208183030381529060405280519060200120905060008282604051602001610ec9929190614327565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610f0694939291906146a4565b6020604051602081039080840390855afa158015610f28573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f5b5760405162461bcd60e51b815260040161069f90614859565b610f66818a8a61250f565b505050505050505050565b60008160095410158015610f855750600082115b610fa15760405162461bcd60e51b815260040161069f90614709565b6000828152600e602081905260409091209081015460ff1615610fc85760029150506110eb565b80600701544211610fdd5760009150506110eb565b80600801544211610ff25760019150506110eb565b80600b015481600a015411158061100e575060005481600d0154105b1561101d5760039150506110eb565b60028101546110305760049150506110eb565b600e810154610100900460ff161561104c5760079150506110eb565b6002810154600554604080516360d143f160e11b815290516110d593926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b15801561109857600080fd5b505afa1580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110d0919081019061321d565b6126e6565b42106110e55760069150506110eb565b60059150505b919050565b60006110fb82610f71565b9050600781600781111561110b57fe5b14156111295760405162461bcd60e51b815260040161069f90614779565b6000828152600e602052604090206001805481830154909161115f916001600160a01b03169061115a904390612712565b61273a565b1061117c5760405162461bcd60e51b815260040161069f906147e9565b600e8101805460ff1916600117905560005b6003820154811015611288576005546003830180546001600160a01b039092169163591fcdfe9190849081106111c057fe5b6000918252602090912001546004850180546001600160a01b0390921691859081106111e857fe5b906000526020600020015485600501858154811061120257fe5b9060005260206000200186600601868154811061121b57fe5b9060005260206000200187600201546040518663ffffffff1660e01b815260040161124a959493929190614576565b600060405180830381600087803b15801561126457600080fd5b505af1158015611278573d6000803e3d6000fd5b50506001909201915061118e9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c836040516112b89190614639565b60405180910390a1505050565b6005546001600160a01b031633146112ef5760405162461bcd60e51b815260040161069f90614759565b60028054908290556040517fb01232ed22dbb40f1dfb4eb71b12bfd12a322ee2ceeeaa85fffbad30771d64ab906106e29083908590614a32565b61133433838361250f565b5050565b600c546001600160a01b031681565b6005546001600160a01b031633146113715760405162461bcd60e51b815260040161069f906147d9565b600d544210156113935760405162461bcd60e51b815260040161069f906148a9565b600a80546001600160a01b0319908116909155600b80549091169055565b600a546001600160a01b031633146113db5760405162461bcd60e51b815260040161069f90614719565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c485858481811061140457fe5b90506020020160206114199190810190613270565b600c5460405160009161143a916001600160a01b039091169060200161436e565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611467939291906143d7565b600060405180830381600087803b15801561148157600080fd5b505af1158015611495573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114bd919081019061323b565b506001016113df565b6005546001600160a01b031633146114f05760405162461bcd60e51b815260040161069f90614759565b60038054908290556040517fbf1c009bdea70c22e4944ae8ac92b5f100449ab6f2fdedd0f7c991d3a6e29d25906106e29083908590614a32565b600181565b600a546001600160a01b031633146115595760405162461bcd60e51b815260040161069f90614719565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c485858481811061158257fe5b90506020020160206115979190810190613270565b600c546040516000916115b8916001600160a01b039091169060200161436e565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016115e59392919061442f565b600060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261163b919081019061323b565b5060010161155d565b600a546001600160a01b0316331461166e5760405162461bcd60e51b815260040161069f906147c9565b600560009054906101000a90046001600160a01b03166001600160a01b0316630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116be57600080fd5b505af115801561098e573d6000803e3d6000fd5b600281565b60025481565b600b546001600160a01b031681565b600081565b600a546001600160a01b0316331461171b5760405162461bcd60e51b815260040161069f90614719565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c485858481811061174457fe5b90506020020160206117599190810190613270565b600c5460405160009161177a916001600160a01b039091169060200161436e565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016117a793929190614397565b600060405180830381600087803b1580156117c157600080fd5b505af11580156117d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117fd919081019061323b565b5060010161171f565b60015481565b600a546001600160a01b031633146118365760405162461bcd60e51b815260040161069f90614719565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c485858481811061185f57fe5b90506020020160206118749190810190613270565b600c54604051600091611895916001600160a01b039091169060200161436e565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016118c2939291906144df565b600060405180830381600087803b1580156118dc57600080fd5b505af11580156118f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611918919081019061323b565b5060010161183a565b6008546001600160a01b031681565b6007546001600160a01b031681565b6006546001600160a01b031681565b600d5481565b600a546001600160a01b0316331461197e5760405162461bcd60e51b815260040161069f90614749565b600a80546001600160a01b038381166001600160a01b03198316179092556040519116907f19be0cefd4235c57b29c828297a3e160306f359677ce5dc07f5b4f546fc29de6906106e2908390859061437c565b600a546001600160a01b031633146119fb5760405162461bcd60e51b815260040161069f90614849565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c4858584818110611a2457fe5b9050602002016020611a399190810190613071565b60408051600080825260208201928390526001600160e01b031960e086901b16909252611a6b929190602481016144b3565b600060405180830381600087803b158015611a8557600080fd5b505af1158015611a99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ac1919081019061323b565b506001016119ff565b6005546001600160a01b031681565b60095481565b6000600154611af33361115a436001612712565b11611b105760405162461bcd60e51b815260040161069f90614869565b84518651148015611b22575083518651145b8015611b2f575082518651145b611b4b5760405162461bcd60e51b815260040161069f906147a9565b8551611b695760405162461bcd60e51b815260040161069f90614809565b60025486511115611b8c5760405162461bcd60e51b815260040161069f90614899565b6000825111611bad5760405162461bcd60e51b815260040161069f90614829565b336000908152600f60205260409020548015611c2a576000611bce82610f71565b90506001816007811115611bde57fe5b1415611bfc5760405162461bcd60e51b815260040161069f90614729565b6000816007811115611c0a57fe5b1415611c285760405162461bcd60e51b815260040161069f90614879565b505b6000611c38426003546126e6565b90506000611c4e426110d06004546003546126e6565b6009805460010190559050611c61612a5d565b6040518061020001604052806009548152602001336001600160a01b03168152602001600081526020018b81526020018a8152602001898152602001888152602001848152602001838152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600e6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003019080519060200190611d59929190612ae7565b5060808201518051611d75916004840191602090910190612b4c565b5060a08201518051611d91916005840191602090910190612b93565b5060c08201518051611dad916006840191602090910190612bec565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d01556101c082015181600e0160006101000a81548160ff0219169083151502179055506101e082015181600e0160016101000a81548160ff0219169083151502179055509050508060000151600f600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e604051611eb4999897969594939291906148d7565b60405180910390a15193505050505b95945050505050565b600a546001600160a01b03163314611ef65760405162461bcd60e51b815260040161069f906147b9565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c4858584818110611f1f57fe5b9050602002016020611f349190810190613071565b60408051600080825260208201928390526001600160e01b031960e086901b16909252611f6692919060248101614403565b600060405180830381600087803b158015611f8057600080fd5b505af1158015611f94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fbc919081019061323b565b50600101611efa565b6004611fd082610f71565b6007811115611fdb57fe5b14611ff85760405162461bcd60e51b815260040161069f90614819565b6000818152600e602090815260408083206005548251630d48571f60e31b815292519194936120529342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b15801561109857600080fd5b905060005b60038301548110156121fa576121f283600301828154811061207557fe5b6000918252602090912001546004850180546001600160a01b03909216918490811061209d57fe5b90600052602060002001548560050184815481106120b757fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156121455780601f1061211a57610100808354040283529160200191612145565b820191906000526020600020905b81548152906001019060200180831161212857829003601f168201915b505050505086600601858154811061215957fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156121e75780601f106121bc576101008083540402835291602001916121e7565b820191906000526020600020905b8154815290600101906020018083116121ca57829003601f168201915b5050505050866128fe565b600101612057565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892906112b89085908490614a32565b6040516109a090614358565b612248612c45565b506000828152600e602090815260408083206001600160a01b0385168452600f018252918290208251606081018452815460ff80821615158352610100909104169281019290925260010154918101919091525b92915050565b6005546001600160a01b031633146122cc5760405162461bcd60e51b815260040161069f90614759565b60048054908290556040517f0157f874643e34dea2d71607bde6378f09880b59546f9e2386608eb7154b8975906106e29083908590614a32565b6005546001600160a01b031633146123305760405162461bcd60e51b815260040161069f90614759565b60018054908290556040517f9b772ef27711c872f217a0c52a72ba00d7552f2d6c3b3d0f0593fc2549359df3906106e29083908590614a32565b600561237582610f71565b600781111561238057fe5b1461239d5760405162461bcd60e51b815260040161069f90614839565b6000818152600e602081905260408220908101805461ff001916610100179055905b60038201548110156124da576005546003830180546001600160a01b0390921691630825f38f9190849081106123f157fe5b6000918252602090912001546004850180546001600160a01b03909216918590811061241957fe5b906000526020600020015485600501858154811061243357fe5b9060005260206000200186600601868154811061244c57fe5b9060005260206000200187600201546040518663ffffffff1660e01b815260040161247b959493929190614576565b600060405180830381600087803b15801561249557600080fd5b505af11580156124a9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124d1919081019061323b565b506001016123bf565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516106e29190614639565b465b90565b600161251a83610f71565b600781111561252557fe5b146125425760405162461bcd60e51b815260040161069f90614889565b6000828152600e60205260409020600981015461259e5743600019810160098301556040517f0d1e02ccd52fe49c19093261ba25ca959463e72ed10577de6069a95c14cd04ee9161259591869190614a32565b60405180910390a15b6001600160a01b0384166000908152600f820160205260409020805460ff16156125da5760405162461bcd60e51b815260040161069f90614789565b60006125ea86846009015461273a565b905060ff841661260c5761260283600a0154826126e6565b600a84015561266c565b60ff8416600114156126305761262683600b0154826126e6565b600b84015561266c565b60ff8416600214156126545761264a83600c0154826126e6565b600c84015561266c565b60405162461bcd60e51b815260040161069f906146f9565b61267a83600d0154826126e6565b600d8401558154600160ff19909116811761ff00191661010060ff87160217835582018190556040517f2c9deb38f462962eadbd85a9d3a4120503ee091f1582eaaa10aa8c6797651d29906126d69088908890889086906145b7565b60405180910390a1505050505050565b60008282018381101561270b5760405162461bcd60e51b815260040161069f906147f9565b9392505050565b6000828211156127345760405162461bcd60e51b815260040161069f906148b9565b50900390565b60065460405163782d6fe160e01b815260009182916001600160a01b039091169063782d6fe190612771908790879060040161450b565b60206040518083038186803b15801561278957600080fd5b505afa15801561279d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127c19190810190613363565b60075460405163782d6fe160e01b81529192506000916001600160a01b039091169063782d6fe1906127f9908890889060040161450b565b60206040518083038186803b15801561281157600080fd5b505afa158015612825573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612849919081019061321d565b60085460405163782d6fe160e01b81529192506000916001600160a01b039091169063782d6fe190612881908990899060040161450b565b60206040518083038186803b15801561289957600080fd5b505afa1580156128ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128d1919081019061321d565b90506128f46128ee846bffffffffffffffffffffffff16846126e6565b826126e6565b9695505050505050565b6005546040516001600160a01b039091169063f2b065379061292c9088908890889088908890602001614526565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161295e9190614639565b60206040518083038186803b15801561297657600080fd5b505afa15801561298a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129ae91908101906131ff565b156129cb5760405162461bcd60e51b815260040161069f90614739565b600554604051633a66f90160e01b81526001600160a01b0390911690633a66f90190612a039088908890889088908890600401614526565b602060405180830381600087803b158015612a1d57600080fd5b505af1158015612a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a55919081019061321d565b505050505050565b6040518061020001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215612b3c579160200282015b82811115612b3c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612b07565b50612b48929150612c65565b5090565b828054828255906000526020600020908101928215612b87579160200282015b82811115612b87578251825591602001919060010190612b6c565b50612b48929150612c89565b828054828255906000526020600020908101928215612be0579160200282015b82811115612be05782518051612bd0918491602090910190612ca3565b5091602001919060010190612bb3565b50612b48929150612d10565b828054828255906000526020600020908101928215612c39579160200282015b82811115612c395782518051612c29918491602090910190612ca3565b5091602001919060010190612c0c565b50612b48929150612d33565b604080516060810182526000808252602082018190529181019190915290565b61250c91905b80821115612b485780546001600160a01b0319168155600101612c6b565b61250c91905b80821115612b485760008155600101612c8f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612ce457805160ff1916838001178555612b87565b82800160010185558215612b875791820182811115612b87578251825591602001919060010190612b6c565b61250c91905b80821115612b48576000612d2a8282612d56565b50600101612d16565b61250c91905b80821115612b48576000612d4d8282612d56565b50600101612d39565b50805460018160011615610100020316600290046000825580601f10612d7c5750612d9a565b601f016020900490600052602060002090810190612d9a9190612c89565b50565b803561229c81614b92565b60008083601f840112612dba57600080fd5b50813567ffffffffffffffff811115612dd257600080fd5b602083019150836020820283011115612dea57600080fd5b9250929050565b600082601f830112612e0257600080fd5b8135612e15612e1082614a75565b614a4e565b91508181835260208401935060208101905083856020840282011115612e3a57600080fd5b60005b83811015612e665781612e508882612d9d565b8452506020928301929190910190600101612e3d565b5050505092915050565b600082601f830112612e8157600080fd5b8135612e8f612e1082614a75565b81815260209384019390925082018360005b83811015612e665781358601612eb78882612fbb565b8452506020928301929190910190600101612ea1565b600082601f830112612ede57600080fd5b8135612eec612e1082614a75565b81815260209384019390925082018360005b83811015612e665781358601612f148882612fbb565b8452506020928301929190910190600101612efe565b600082601f830112612f3b57600080fd5b8135612f49612e1082614a75565b91508181835260208401935060208101905083856020840282011115612f6e57600080fd5b60005b83811015612e665781612f848882612fa5565b8452506020928301929190910190600101612f71565b805161229c81614ba6565b803561229c81614baf565b805161229c81614baf565b600082601f830112612fcc57600080fd5b8135612fda612e1082614a96565b91508082526020830160208301858383011115612ff657600080fd5b613001838284614b46565b50505092915050565b600082601f83011261301b57600080fd5b8151613029612e1082614a96565b9150808252602083016020830185838301111561304557600080fd5b613001838284614b52565b803561229c81614bb8565b803561229c81614bc1565b805161229c81614bca565b60006020828403121561308357600080fd5b600061308f8484612d9d565b949350505050565b600080604083850312156130aa57600080fd5b60006130b68585612d9d565b92505060206130c785828601612d9d565b9150509250929050565b600080602083850312156130e457600080fd5b823567ffffffffffffffff8111156130fb57600080fd5b61310785828601612da8565b92509250509250929050565b600080600080600060a0868803121561312b57600080fd5b853567ffffffffffffffff81111561314257600080fd5b61314e88828901612df1565b955050602086013567ffffffffffffffff81111561316b57600080fd5b61317788828901612f2a565b945050604086013567ffffffffffffffff81111561319457600080fd5b6131a088828901612ecd565b935050606086013567ffffffffffffffff8111156131bd57600080fd5b6131c988828901612e70565b925050608086013567ffffffffffffffff8111156131e657600080fd5b6131f288828901612fbb565b9150509295509295909350565b60006020828403121561321157600080fd5b600061308f8484612f9a565b60006020828403121561322f57600080fd5b600061308f8484612fb0565b60006020828403121561324d57600080fd5b815167ffffffffffffffff81111561326457600080fd5b61308f8482850161300a565b60006020828403121561328257600080fd5b600061308f8484613050565b6000602082840312156132a057600080fd5b600061308f8484612fa5565b600080604083850312156132bf57600080fd5b60006130b68585612fa5565b600080604083850312156132de57600080fd5b60006132ea8585612fa5565b92505060206130c78582860161305b565b600080600080600060a0868803121561331357600080fd5b600061331f8888612fa5565b95505060206133308882890161305b565b94505060406133418882890161305b565b935050606061335288828901612fa5565b92505060806131f288828901612fa5565b60006020828403121561337557600080fd5b600061308f8484613066565b600061338d83836133bc565b505060200190565b600061270b838361355e565b600061338d8383613544565b6133b681614b25565b82525050565b6133b681614add565b60006133d082614ad0565b6133da8185614ad4565b93506133e583614abe565b8060005b838110156134135781516133fd8882613381565b975061340883614abe565b9250506001016133e9565b509495945050505050565b600061342982614ad0565b6134338185614ad4565b93508360208202850161344585614abe565b8060005b8581101561347f57848403895281516134628582613395565b945061346d83614abe565b60209a909a0199925050600101613449565b5091979650505050505050565b600061349782614ad0565b6134a18185614ad4565b9350836020820285016134b385614abe565b8060005b8581101561347f57848403895281516134d08582613395565b94506134db83614abe565b60209a909a01999250506001016134b7565b60006134f882614ad0565b6135028185614ad4565b935061350d83614abe565b8060005b8381101561341357815161352588826133a1565b975061353083614abe565b925050600101613511565b6133b681614ae8565b6133b68161250c565b6133b66135598261250c565b61250c565b600061356982614ad0565b6135738185614ad4565b9350613583818560208601614b52565b61358c81614b7e565b9093019392505050565b6000815460018116600081146135b357600181146135d957613618565b607f60028304166135c48187614ad4565b60ff1984168152955050602085019250613618565b600282046135e78187614ad4565b95506135f285614ac4565b60005b82811015613611578154888201526001909101906020016135f5565b8701945050505b505092915050565b6133b681614aed565b6133b681614b30565b6133b681614b3b565b6000613648602e83614ad4565b7f476f7665726e6f72417274656d69733a3a5f63617374566f74653a20696e766181526d6c696420766f74652076616c756560901b602082015260400192915050565b6000613698602b83614ad4565b7f476f7665726e6f72417274656d69733a3a73746174653a20696e76616c69642081526a1c1c9bdc1bdcd85b081a5960aa1b602082015260400192915050565b60006136e5603983614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f627265616b676c6173733a207381527f656e646572206d75737420626520626720677561726469616e00000000000000602082015260400192915050565b6000613744605a83614ad4565b7f476f7665726e6f72417274656d69733a3a70726f706f73653a206f6e65206c6981527f76652070726f706f73616c207065722070726f706f7365722c20666f756e642060208201527f616e20616c7265616479206163746976652070726f706f73616c000000000000604082015260600192915050565b60006137c9604683614ad4565b7f476f7665726e6f72417274656d69733a3a5f71756575654f725265766572743a81527f2070726f706f73616c20616374696f6e20616c7265616479207175657565642060208201526561742065746160d01b604082015260600192915050565b60006138376002836110eb565b61190160f01b815260020192915050565b6000613855601983614ad4565b7f6f6e6c7920627265616b20676c61737320677561726469616e00000000000000815260200192915050565b600061388e600d83614ad4565b6c6f6e6c792074696d656c6f636b60981b815260200192915050565b60006138b7602a836110eb565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815269766f746556616c75652960b01b6020820152602a0192915050565b6000613903603583614ad4565b7f476f7665726e6f72417274656d69733a3a7377656570546f6b656e733a2073658152746e646572206d7573742062652074696d656c6f636b60581b602082015260400192915050565b600061395a603883614ad4565b7f476f7665726e6f72417274656d69733a3a63616e63656c3a2063616e6e6f742081527f63616e63656c2065786563757465642070726f706f73616c0000000000000000602082015260400192915050565b60006139b9602f83614ad4565b7f476f7665726e6f72417274656d69733a3a5f63617374566f74653a20766f746581526e1c88185b1c9958591e481d9bdd1959608a1b602082015260400192915050565b6000613a0a605183614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f736574476f7665726e616e636581527f52657475726e416464726573733a2073656e646572206d75737420626520676f6020820152703b103932ba3ab9371033bab0b93234b0b760791b604082015260600192915050565b6000613a83601883614ad4565b7f73657450656e64696e6741646d696e2861646472657373290000000000000000815260200192915050565b6000613abc604683614ad4565b7f476f7665726e6f72417274656d69733a3a70726f706f73653a2070726f706f7381527f616c2066756e6374696f6e20696e666f726d6174696f6e206172697479206d696020820152650e6dac2e8c6d60d31b604082015260600192915050565b6000613b2a601183614ad4565b7073657441646d696e28616464726573732960781b815260200192915050565b6000613b57604b83614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f6578656375746541636365707481527f41646d696e4f6e436f6e74726163743a2073656e646572206d7573742062652060208201526a31339033bab0b93234b0b760a91b604082015260600192915050565b6000613bca601483614ad4565b7361636365707450656e64696e6741646d696e282960601b815260200192915050565b6000613bfa603a83614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f61636365707441646d696e3a2081527f73656e646572206d75737420626520626720677561726469616e000000000000602082015260400192915050565b6000613c59603f83614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f72656d6f76654775617264696181527f6e733a2073656e646572206d757374206265207468652074696d656c6f636b00602082015260400192915050565b6000613cb8603183614ad4565b7f476f7665726e6f72417274656d69733a3a63616e63656c3a2070726f706f73658152701c8818589bdd99481d1a1c995cda1bdb19607a1b602082015260400192915050565b6000613d0b601183614ad4565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b6000613d386043836110eb565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000613da3602e83614ad4565b7f476f7665726e6f72417274656d69733a3a70726f706f73653a206d757374207081526d726f7669646520616374696f6e7360901b602082015260400192915050565b6000613df3601483614ad4565b736368616e676541646d696e28616464726573732960601b815260200192915050565b6000613e23604683614ad4565b7f476f7665726e6f72417274656d69733a3a71756575653a2070726f706f73616c81527f2063616e206f6e6c79206265207175657565642069662069742069732073756360208201526518d95959195960d21b604082015260600192915050565b6000613e91601c83614ad4565b7f6465736372697074696f6e2063616e206e6f7420626520656d70747900000000815260200192915050565b6000613eca604783614ad4565b7f476f7665726e6f72417274656d69733a3a657865637574653a2070726f706f7381527f616c2063616e206f6e6c79206265206578656375746564206966206974206973602082015266081c5d595d595960ca1b604082015260600192915050565b6000613f39601983614ad4565b7f5f73657450656e64696e6741646d696e28616464726573732900000000000000815260200192915050565b6000613f72605383614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f65786563757465436f6d706f7581527f6e6441636365707441646d696e4f6e436f6e74726163743a2073656e6465722060208201527236bab9ba1031329031339033bab0b93234b0b760691b604082015260600192915050565b6000613fed603183614ad4565b7f476f7665726e6f72417274656d69733a3a63617374566f746542795369673a20815270696e76616c6964207369676e617475726560781b602082015260400192915050565b6000614040604183614ad4565b7f476f7665726e6f72417274656d69733a3a70726f706f73653a2070726f706f7381527f657220766f7465732062656c6f772070726f706f73616c207468726573686f6c6020820152601960fa1b604082015260600192915050565b60006140a9605b83614ad4565b7f476f7665726e6f72417274656d69733a3a70726f706f73653a206f6e65206c6981527f76652070726f706f73616c207065722070726f706f7365722c20666f756e642060208201527f616e20616c72656164792070656e64696e672070726f706f73616c0000000000604082015260600192915050565b600061412e602c83614ad4565b7f476f7665726e6f72417274656d69733a3a5f63617374566f74653a20766f746981526b1b99c81a5cc818db1bdcd95960a21b602082015260400192915050565b600061417c602a83614ad4565b7f476f7665726e6f72417274656d69733a3a70726f706f73653a20746f6f206d618152696e7920616374696f6e7360b01b602082015260400192915050565b60006141c8601c83614ad4565b7f736574456d697373696f6e734d616e6167657228616464726573732900000000815260200192915050565b6000614201600e83614ad4565b6d5f61636365707441646d696e282960901b815260200192915050565b600061422b603e83614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f72656d6f76654775617264696181527f6e732063616e6e6f742072656d6f7665206265666f72652073756e7365740000602082015260400192915050565b600061428a601583614ad4565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b60006142bb601a83614ad4565b7f7472616e736665724f776e657273686970286164647265737329000000000000815260200192915050565b805160608301906142f8848261353b565b50602082015161430b602085018261431e565b50604082015161098e6040850182613544565b6133b681614b0e565b60006143328261382a565b915061433e828561354d565b60208201915061434e828461354d565b5060200192915050565b600061229c826138aa565b600061229c82613d2b565b6020810161229c82846133bc565b6040810161438a82856133bc565b61270b60208301846133bc565b608081016143a582866133bc565b6143b26020830185613632565b81810360408301526143c381613a76565b90508181036060830152611ec3818461355e565b608081016143e582866133bc565b6143f26020830185613632565b81810360408301526143c381613b1d565b6080810161441182866133bc565b61441e6020830185613632565b81810360408301526143c381613bbd565b6080810161443d82866133bc565b61444a6020830185613632565b81810360408301526143c381613de6565b6080810161446982866133bc565b6144766020830185613632565b81810360408301526143c381613f2c565b6080810161449582866133bc565b6144a26020830185613632565b81810360408301526143c3816141bb565b608081016144c182866133bc565b6144ce6020830185613632565b81810360408301526143c3816141f4565b608081016144ed82866133bc565b6144fa6020830185613632565b81810360408301526143c3816142ae565b6040810161451982856133bc565b61270b6020830184613544565b60a0810161453482886133bc565b6145416020830187613544565b8181036040830152614553818661355e565b90508181036060830152614567818561355e565b90506128f46080830184613544565b60a0810161458482886133bc565b6145916020830187613544565b81810360408301526145a38186613596565b905081810360608301526145678185613596565b608081016145c582876133bc565b6145d26020830186613544565b6145df604083018561431e565b611ec36060830184613544565b608080825281016145fd81876133c5565b9050818103602083015261461181866134ed565b90508181036040830152614625818561348c565b905081810360608301526128f4818461341e565b6020810161229c8284613544565b608081016146558287613544565b6146626020830186613544565b61466f6040830185613544565b611ec360608301846133bc565b6060810161468a8286613544565b6146976020830185613544565b61308f604083018461431e565b608081016146b28287613544565b6146bf602083018661431e565b6145df6040830185613544565b6020810161229c8284613620565b6020810161229c8284613629565b6020808252810161270b818461355e565b6020808252810161229c8161363b565b6020808252810161229c8161368b565b6020808252810161229c816136d8565b6020808252810161229c81613737565b6020808252810161229c816137bc565b6020808252810161229c81613848565b6020808252810161229c81613881565b6020808252810161229c816138f6565b6020808252810161229c8161394d565b6020808252810161229c816139ac565b6020808252810161229c816139fd565b6020808252810161229c81613aaf565b6020808252810161229c81613b4a565b6020808252810161229c81613bed565b6020808252810161229c81613c4c565b6020808252810161229c81613cab565b6020808252810161229c81613cfe565b6020808252810161229c81613d96565b6020808252810161229c81613e16565b6020808252810161229c81613e84565b6020808252810161229c81613ebd565b6020808252810161229c81613f65565b6020808252810161229c81613fe0565b6020808252810161229c81614033565b6020808252810161229c8161409c565b6020808252810161229c81614121565b6020808252810161229c8161416f565b6020808252810161229c8161421e565b6020808252810161229c8161427d565b6060810161229c82846142e7565b61012081016148e6828c613544565b6148f3602083018b6133ad565b8181036040830152614905818a6133c5565b9050818103606083015261491981896134ed565b9050818103608083015261492d818861348c565b905081810360a0830152614941818761341e565b905061495060c0830186613544565b61495d60e0830185613544565b818103610100830152614970818461355e565b9b9a5050505050505050505050565b610180810161498e828f613544565b61499b602083018e6133bc565b6149a8604083018d613544565b6149b5606083018c613544565b6149c2608083018b613544565b6149cf60a083018a613544565b6149dc60c0830189613544565b6149e960e0830188613544565b6149f7610100830187613544565b614a05610120830186613544565b614a1361014083018561353b565b614a2161016083018461353b565b9d9c50505050505050505050505050565b604081016145198285613544565b6020810161229c828461431e565b60405181810167ffffffffffffffff81118282101715614a6d57600080fd5b604052919050565b600067ffffffffffffffff821115614a8c57600080fd5b5060209081020190565b600067ffffffffffffffff821115614aad57600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b600061229c82614b02565b151590565b600061229c82614add565b806110eb81614b88565b6001600160a01b031690565b60ff1690565b6bffffffffffffffffffffffff1690565b600061229c82614aed565b600061229c82614af8565b600061229c8261250c565b82818337506000910152565b60005b83811015614b6d578181015183820152602001614b55565b8381111561098e5750506000910152565b601f01601f191690565b60088110612d9a57fe5b614b9b81614add565b8114612d9a57600080fd5b614b9b81614ae8565b614b9b8161250c565b614b9b81614aed565b614b9b81614b0e565b614b9b81614b1456fea365627a7a72315820347e017002fecf7a7d891b5a79fa32954a37f683c66c0e3c1121c567cb61a93c6c6578706572696d656e74616cf564736f6c634300051100400000000000000000000000003a9249d70dcb4a4e9ef4f3af99a3a130452ec19b000000000000000000000000511ab53f793683763e5a8829738301368a2411e3000000000000000000000000933fcdf708481c57e9fd82f6baa084f42e98b60e0000000000000000000000008568a675384d761f36ec269d695d6ce4423cfab1000000000000000000000000ddbf679d6332d9e5b409865b9671d1927255b52a000000000000000000000000ffa353dacd27071217ea80d3149c9d500b0e9a38000000000000000000000000ffa353dacd27071217ea80d3149c9d500b0e9a380000000000000000000000000000000000000000000000000000000063e7e87a
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102bb5760003560e01c806375fe572e11610182578063c5f62ca2116100e9578063dd66f168116100a2578063e23a9a521161007c578063e23a9a52146105a6578063ea0217cf146105c6578063ece40cc1146105d9578063fe0d94c1146105ec576102bb565b8063dd66f16814610578578063ddf0b0091461058b578063deaaa7cc1461059e576102bb565b8063c5f62ca214610527578063c9ba036b1461052f578063cbfcc4dc14610542578063d33219b414610555578063da35c6641461055d578063da95691a14610565576102bb565b8063912ae9fa1161013b578063912ae9fa146104d4578063b58131b0146104e7578063bd0119b6146104ef578063bef3a06f14610502578063bfe1092814610517578063c0878f0c1461051f576102bb565b806375fe572e1461049957806377f386cf146104ac578063795c8180146104b45780637bdbe4d0146104bc5780638ad84491146104c45780638f71120b146104cc576102bb565b8063328dd9821161022657806356781388116101df578063567813881461043b57806358656baa1461044e5780636a23651c146104565780636fe3db211461045e57806370b0f6601461047157806370da933714610484576102bb565b8063328dd982146103b75780633932abb1146103da5780633bccf4fd146103e25780633e4f49e6146103f557806340e58ee51461041557806342c9ad2314610428576102bb565b806317977c611161027857806317977c611461035b5780631d314f761461036e57806320606b701461038157806323a56b1714610389578063241dcdbc1461039c57806324bc1a64146103af576102bb565b8063013cf08b146102c057806302a251a3146102f457806302ec8f9e1461030957806306fdde031461031e5780630fbc82b8146103335780631609be1d14610348575b600080fd5b6102d36102ce36600461328e565b6105ff565b6040516102eb9c9b9a9998979695949392919061497f565b60405180910390f35b6102fc61066f565b6040516102eb9190614639565b61031c61031736600461328e565b610675565b005b6103266106ee565b6040516102eb91906146e8565b61033b610723565b6040516102eb919061436e565b61031c610356366004613097565b610732565b6102fc610369366004613071565b610867565b61031c61037c3660046130d1565b610879565b6102fc610994565b61031c610397366004613071565b6109ab565b61031c6103aa3660046130d1565b610a28565b6102fc610b3d565b6103ca6103c536600461328e565b610b43565b6040516102eb94939291906145ec565b6102fc610dd2565b61031c6103f03660046132fb565b610dd8565b61040861040336600461328e565b610f71565b6040516102eb91906146da565b61031c61042336600461328e565b6110f0565b61031c61043636600461328e565b6112c5565b61031c6104493660046132cb565b611329565b61033b611338565b61031c611347565b61031c61046c3660046130d1565b6113b1565b61031c61047f36600461328e565b6114c6565b61048c61152a565b6040516102eb9190614a40565b61031c6104a73660046130d1565b61152f565b61031c611644565b61048c6116d2565b6102fc6116d7565b61033b6116dd565b61048c6116ec565b61031c6104e23660046130d1565b6116f1565b6102fc611806565b61031c6104fd3660046130d1565b61180c565b61050a611921565b6040516102eb91906146cc565b61050a611930565b61050a61193f565b6102fc61194e565b61031c61053d366004613071565b611954565b61031c6105503660046130d1565b6119d1565b61050a611aca565b6102fc611ad9565b6102fc610573366004613113565b611adf565b61031c6105863660046130d1565b611ecc565b61031c61059936600461328e565b611fc5565b6102fc612234565b6105b96105b43660046132ac565b612240565b6040516102eb91906148c9565b61031c6105d436600461328e565b6122a2565b61031c6105e736600461328e565b612306565b61031c6105fa36600461328e565b61236a565b600e602081905260009182526040909120805460018201546002830154600784015460088501546009860154600a870154600b880154600c890154600d8a015499909a015497996001600160a01b0390971698959794969395929491939092909160ff808216916101009004168c565b60045481565b6005546001600160a01b031633146106a85760405162461bcd60e51b815260040161069f90614759565b60405180910390fd5b60008054908290556040517f881e29202a36aa27b2e7dbd1086b0679e9212ac38029ba9959623b58d66a56b2906106e29083908590614a32565b60405180910390a15050565b6040518060400160405280601981526020017826b7b7b73bb2b6361020b93a32b6b4b99023b7bb32b93737b960391b81525081565b600a546001600160a01b031681565b6005546001600160a01b0316331461075c5760405162461bcd60e51b815260040161069f90614769565b6040516370a0823160e01b815282906000906001600160a01b038316906370a082319061078d90309060040161436e565b60206040518083038186803b1580156107a557600080fd5b505afa1580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107dd919081019061321d565b60405163a9059cbb60e01b81529091506001600160a01b0383169063a9059cbb9061080e908690859060040161450b565b602060405180830381600087803b15801561082857600080fd5b505af115801561083c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061086091908101906131ff565b5050505050565b600f6020526000908152604090205481565b600a546001600160a01b031633146108a35760405162461bcd60e51b815260040161069f90614719565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c48585848181106108cc57fe5b90506020020160206108e19190810190613270565b600c54604051600091610902916001600160a01b039091169060200161436e565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161092f9392919061445b565b600060405180830381600087803b15801561094957600080fd5b505af115801561095d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610985919081019061323b565b506001016108a7565b50505050565b6040516109a090614363565b604051809103902081565b600b546001600160a01b031633146109d55760405162461bcd60e51b815260040161069f90614799565b600c80546001600160a01b038381166001600160a01b03198316179092556040519116907f37276f7ac42bca4e34ce7e35e0c714561034815f69bd9b5156226a0ac779d098906106e2908390859061437c565b600a546001600160a01b03163314610a525760405162461bcd60e51b815260040161069f90614719565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c4858584818110610a7b57fe5b9050602002016020610a909190810190613270565b600c54604051600091610ab1916001600160a01b039091169060200161436e565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401610ade93929190614487565b600060405180830381600087803b158015610af857600080fd5b505af1158015610b0c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b34919081019061323b565b50600101610a56565b60005481565b6060806060806000600e600087815260200190815260200160002090508060030181600401826005018360060183805480602002602001604051908101604052809291908181526020018280548015610bc557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ba7575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610c1757602002820191906000526020600020905b815481526020019060010190808311610c03575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b82821015610cea5760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610cd65780601f10610cab57610100808354040283529160200191610cd6565b820191906000526020600020905b815481529060010190602001808311610cb957829003601f168201915b505050505081526020019060010190610c3f565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610dbc5760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610da85780601f10610d7d57610100808354040283529160200191610da8565b820191906000526020600020905b815481529060010190602001808311610d8b57829003601f168201915b505050505081526020019060010190610d11565b5050505090509450945094509450509193509193565b60035481565b6000604051610de690614363565b60408051918290038220828201909152601982527826b7b7b73bb2b6361020b93a32b6b4b99023b7bb32b93737b960391b6020909201919091527f223bb758b930fd9aafbf32cfb035ea5f1fc9baaf33a27a058a5be80e96da888f610e4961250a565b30604051602001610e5d9493929190614647565b6040516020818303038152906040528051906020012090506000604051610e8390614358565b604051908190038120610e9c918990899060200161467c565b60405160208183030381529060405280519060200120905060008282604051602001610ec9929190614327565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610f0694939291906146a4565b6020604051602081039080840390855afa158015610f28573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610f5b5760405162461bcd60e51b815260040161069f90614859565b610f66818a8a61250f565b505050505050505050565b60008160095410158015610f855750600082115b610fa15760405162461bcd60e51b815260040161069f90614709565b6000828152600e602081905260409091209081015460ff1615610fc85760029150506110eb565b80600701544211610fdd5760009150506110eb565b80600801544211610ff25760019150506110eb565b80600b015481600a015411158061100e575060005481600d0154105b1561101d5760039150506110eb565b60028101546110305760049150506110eb565b600e810154610100900460ff161561104c5760079150506110eb565b6002810154600554604080516360d143f160e11b815290516110d593926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b15801561109857600080fd5b505afa1580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110d0919081019061321d565b6126e6565b42106110e55760069150506110eb565b60059150505b919050565b60006110fb82610f71565b9050600781600781111561110b57fe5b14156111295760405162461bcd60e51b815260040161069f90614779565b6000828152600e602052604090206001805481830154909161115f916001600160a01b03169061115a904390612712565b61273a565b1061117c5760405162461bcd60e51b815260040161069f906147e9565b600e8101805460ff1916600117905560005b6003820154811015611288576005546003830180546001600160a01b039092169163591fcdfe9190849081106111c057fe5b6000918252602090912001546004850180546001600160a01b0390921691859081106111e857fe5b906000526020600020015485600501858154811061120257fe5b9060005260206000200186600601868154811061121b57fe5b9060005260206000200187600201546040518663ffffffff1660e01b815260040161124a959493929190614576565b600060405180830381600087803b15801561126457600080fd5b505af1158015611278573d6000803e3d6000fd5b50506001909201915061118e9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c836040516112b89190614639565b60405180910390a1505050565b6005546001600160a01b031633146112ef5760405162461bcd60e51b815260040161069f90614759565b60028054908290556040517fb01232ed22dbb40f1dfb4eb71b12bfd12a322ee2ceeeaa85fffbad30771d64ab906106e29083908590614a32565b61133433838361250f565b5050565b600c546001600160a01b031681565b6005546001600160a01b031633146113715760405162461bcd60e51b815260040161069f906147d9565b600d544210156113935760405162461bcd60e51b815260040161069f906148a9565b600a80546001600160a01b0319908116909155600b80549091169055565b600a546001600160a01b031633146113db5760405162461bcd60e51b815260040161069f90614719565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c485858481811061140457fe5b90506020020160206114199190810190613270565b600c5460405160009161143a916001600160a01b039091169060200161436e565b6040516020818303038152906040526040518463ffffffff1660e01b8152600401611467939291906143d7565b600060405180830381600087803b15801561148157600080fd5b505af1158015611495573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114bd919081019061323b565b506001016113df565b6005546001600160a01b031633146114f05760405162461bcd60e51b815260040161069f90614759565b60038054908290556040517fbf1c009bdea70c22e4944ae8ac92b5f100449ab6f2fdedd0f7c991d3a6e29d25906106e29083908590614a32565b600181565b600a546001600160a01b031633146115595760405162461bcd60e51b815260040161069f90614719565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c485858481811061158257fe5b90506020020160206115979190810190613270565b600c546040516000916115b8916001600160a01b039091169060200161436e565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016115e59392919061442f565b600060405180830381600087803b1580156115ff57600080fd5b505af1158015611613573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261163b919081019061323b565b5060010161155d565b600a546001600160a01b0316331461166e5760405162461bcd60e51b815260040161069f906147c9565b600560009054906101000a90046001600160a01b03166001600160a01b0316630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116be57600080fd5b505af115801561098e573d6000803e3d6000fd5b600281565b60025481565b600b546001600160a01b031681565b600081565b600a546001600160a01b0316331461171b5760405162461bcd60e51b815260040161069f90614719565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c485858481811061174457fe5b90506020020160206117599190810190613270565b600c5460405160009161177a916001600160a01b039091169060200161436e565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016117a793929190614397565b600060405180830381600087803b1580156117c157600080fd5b505af11580156117d5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117fd919081019061323b565b5060010161171f565b60015481565b600a546001600160a01b031633146118365760405162461bcd60e51b815260040161069f90614719565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c485858481811061185f57fe5b90506020020160206118749190810190613270565b600c54604051600091611895916001600160a01b039091169060200161436e565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016118c2939291906144df565b600060405180830381600087803b1580156118dc57600080fd5b505af11580156118f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611918919081019061323b565b5060010161183a565b6008546001600160a01b031681565b6007546001600160a01b031681565b6006546001600160a01b031681565b600d5481565b600a546001600160a01b0316331461197e5760405162461bcd60e51b815260040161069f90614749565b600a80546001600160a01b038381166001600160a01b03198316179092556040519116907f19be0cefd4235c57b29c828297a3e160306f359677ce5dc07f5b4f546fc29de6906106e2908390859061437c565b600a546001600160a01b031633146119fb5760405162461bcd60e51b815260040161069f90614849565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c4858584818110611a2457fe5b9050602002016020611a399190810190613071565b60408051600080825260208201928390526001600160e01b031960e086901b16909252611a6b929190602481016144b3565b600060405180830381600087803b158015611a8557600080fd5b505af1158015611a99573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ac1919081019061323b565b506001016119ff565b6005546001600160a01b031681565b60095481565b6000600154611af33361115a436001612712565b11611b105760405162461bcd60e51b815260040161069f90614869565b84518651148015611b22575083518651145b8015611b2f575082518651145b611b4b5760405162461bcd60e51b815260040161069f906147a9565b8551611b695760405162461bcd60e51b815260040161069f90614809565b60025486511115611b8c5760405162461bcd60e51b815260040161069f90614899565b6000825111611bad5760405162461bcd60e51b815260040161069f90614829565b336000908152600f60205260409020548015611c2a576000611bce82610f71565b90506001816007811115611bde57fe5b1415611bfc5760405162461bcd60e51b815260040161069f90614729565b6000816007811115611c0a57fe5b1415611c285760405162461bcd60e51b815260040161069f90614879565b505b6000611c38426003546126e6565b90506000611c4e426110d06004546003546126e6565b6009805460010190559050611c61612a5d565b6040518061020001604052806009548152602001336001600160a01b03168152602001600081526020018b81526020018a8152602001898152602001888152602001848152602001838152602001600081526020016000815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600e6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600201556060820151816003019080519060200190611d59929190612ae7565b5060808201518051611d75916004840191602090910190612b4c565b5060a08201518051611d91916005840191602090910190612b93565b5060c08201518051611dad916006840191602090910190612bec565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c01556101a082015181600d01556101c082015181600e0160006101000a81548160ff0219169083151502179055506101e082015181600e0160016101000a81548160ff0219169083151502179055509050508060000151600f600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e604051611eb4999897969594939291906148d7565b60405180910390a15193505050505b95945050505050565b600a546001600160a01b03163314611ef65760405162461bcd60e51b815260040161069f906147b9565b8060005b8181101561098e576005546001600160a01b031663ae2ba3c4858584818110611f1f57fe5b9050602002016020611f349190810190613071565b60408051600080825260208201928390526001600160e01b031960e086901b16909252611f6692919060248101614403565b600060405180830381600087803b158015611f8057600080fd5b505af1158015611f94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fbc919081019061323b565b50600101611efa565b6004611fd082610f71565b6007811115611fdb57fe5b14611ff85760405162461bcd60e51b815260040161069f90614819565b6000818152600e602090815260408083206005548251630d48571f60e31b815292519194936120529342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b15801561109857600080fd5b905060005b60038301548110156121fa576121f283600301828154811061207557fe5b6000918252602090912001546004850180546001600160a01b03909216918490811061209d57fe5b90600052602060002001548560050184815481106120b757fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156121455780601f1061211a57610100808354040283529160200191612145565b820191906000526020600020905b81548152906001019060200180831161212857829003601f168201915b505050505086600601858154811061215957fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156121e75780601f106121bc576101008083540402835291602001916121e7565b820191906000526020600020905b8154815290600101906020018083116121ca57829003601f168201915b5050505050866128fe565b600101612057565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892906112b89085908490614a32565b6040516109a090614358565b612248612c45565b506000828152600e602090815260408083206001600160a01b0385168452600f018252918290208251606081018452815460ff80821615158352610100909104169281019290925260010154918101919091525b92915050565b6005546001600160a01b031633146122cc5760405162461bcd60e51b815260040161069f90614759565b60048054908290556040517f0157f874643e34dea2d71607bde6378f09880b59546f9e2386608eb7154b8975906106e29083908590614a32565b6005546001600160a01b031633146123305760405162461bcd60e51b815260040161069f90614759565b60018054908290556040517f9b772ef27711c872f217a0c52a72ba00d7552f2d6c3b3d0f0593fc2549359df3906106e29083908590614a32565b600561237582610f71565b600781111561238057fe5b1461239d5760405162461bcd60e51b815260040161069f90614839565b6000818152600e602081905260408220908101805461ff001916610100179055905b60038201548110156124da576005546003830180546001600160a01b0390921691630825f38f9190849081106123f157fe5b6000918252602090912001546004850180546001600160a01b03909216918590811061241957fe5b906000526020600020015485600501858154811061243357fe5b9060005260206000200186600601868154811061244c57fe5b9060005260206000200187600201546040518663ffffffff1660e01b815260040161247b959493929190614576565b600060405180830381600087803b15801561249557600080fd5b505af11580156124a9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124d1919081019061323b565b506001016123bf565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f826040516106e29190614639565b465b90565b600161251a83610f71565b600781111561252557fe5b146125425760405162461bcd60e51b815260040161069f90614889565b6000828152600e60205260409020600981015461259e5743600019810160098301556040517f0d1e02ccd52fe49c19093261ba25ca959463e72ed10577de6069a95c14cd04ee9161259591869190614a32565b60405180910390a15b6001600160a01b0384166000908152600f820160205260409020805460ff16156125da5760405162461bcd60e51b815260040161069f90614789565b60006125ea86846009015461273a565b905060ff841661260c5761260283600a0154826126e6565b600a84015561266c565b60ff8416600114156126305761262683600b0154826126e6565b600b84015561266c565b60ff8416600214156126545761264a83600c0154826126e6565b600c84015561266c565b60405162461bcd60e51b815260040161069f906146f9565b61267a83600d0154826126e6565b600d8401558154600160ff19909116811761ff00191661010060ff87160217835582018190556040517f2c9deb38f462962eadbd85a9d3a4120503ee091f1582eaaa10aa8c6797651d29906126d69088908890889086906145b7565b60405180910390a1505050505050565b60008282018381101561270b5760405162461bcd60e51b815260040161069f906147f9565b9392505050565b6000828211156127345760405162461bcd60e51b815260040161069f906148b9565b50900390565b60065460405163782d6fe160e01b815260009182916001600160a01b039091169063782d6fe190612771908790879060040161450b565b60206040518083038186803b15801561278957600080fd5b505afa15801561279d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506127c19190810190613363565b60075460405163782d6fe160e01b81529192506000916001600160a01b039091169063782d6fe1906127f9908890889060040161450b565b60206040518083038186803b15801561281157600080fd5b505afa158015612825573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612849919081019061321d565b60085460405163782d6fe160e01b81529192506000916001600160a01b039091169063782d6fe190612881908990899060040161450b565b60206040518083038186803b15801561289957600080fd5b505afa1580156128ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128d1919081019061321d565b90506128f46128ee846bffffffffffffffffffffffff16846126e6565b826126e6565b9695505050505050565b6005546040516001600160a01b039091169063f2b065379061292c9088908890889088908890602001614526565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161295e9190614639565b60206040518083038186803b15801561297657600080fd5b505afa15801561298a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129ae91908101906131ff565b156129cb5760405162461bcd60e51b815260040161069f90614739565b600554604051633a66f90160e01b81526001600160a01b0390911690633a66f90190612a039088908890889088908890600401614526565b602060405180830381600087803b158015612a1d57600080fd5b505af1158015612a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612a55919081019061321d565b505050505050565b6040518061020001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215612b3c579160200282015b82811115612b3c57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612b07565b50612b48929150612c65565b5090565b828054828255906000526020600020908101928215612b87579160200282015b82811115612b87578251825591602001919060010190612b6c565b50612b48929150612c89565b828054828255906000526020600020908101928215612be0579160200282015b82811115612be05782518051612bd0918491602090910190612ca3565b5091602001919060010190612bb3565b50612b48929150612d10565b828054828255906000526020600020908101928215612c39579160200282015b82811115612c395782518051612c29918491602090910190612ca3565b5091602001919060010190612c0c565b50612b48929150612d33565b604080516060810182526000808252602082018190529181019190915290565b61250c91905b80821115612b485780546001600160a01b0319168155600101612c6b565b61250c91905b80821115612b485760008155600101612c8f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612ce457805160ff1916838001178555612b87565b82800160010185558215612b875791820182811115612b87578251825591602001919060010190612b6c565b61250c91905b80821115612b48576000612d2a8282612d56565b50600101612d16565b61250c91905b80821115612b48576000612d4d8282612d56565b50600101612d39565b50805460018160011615610100020316600290046000825580601f10612d7c5750612d9a565b601f016020900490600052602060002090810190612d9a9190612c89565b50565b803561229c81614b92565b60008083601f840112612dba57600080fd5b50813567ffffffffffffffff811115612dd257600080fd5b602083019150836020820283011115612dea57600080fd5b9250929050565b600082601f830112612e0257600080fd5b8135612e15612e1082614a75565b614a4e565b91508181835260208401935060208101905083856020840282011115612e3a57600080fd5b60005b83811015612e665781612e508882612d9d565b8452506020928301929190910190600101612e3d565b5050505092915050565b600082601f830112612e8157600080fd5b8135612e8f612e1082614a75565b81815260209384019390925082018360005b83811015612e665781358601612eb78882612fbb565b8452506020928301929190910190600101612ea1565b600082601f830112612ede57600080fd5b8135612eec612e1082614a75565b81815260209384019390925082018360005b83811015612e665781358601612f148882612fbb565b8452506020928301929190910190600101612efe565b600082601f830112612f3b57600080fd5b8135612f49612e1082614a75565b91508181835260208401935060208101905083856020840282011115612f6e57600080fd5b60005b83811015612e665781612f848882612fa5565b8452506020928301929190910190600101612f71565b805161229c81614ba6565b803561229c81614baf565b805161229c81614baf565b600082601f830112612fcc57600080fd5b8135612fda612e1082614a96565b91508082526020830160208301858383011115612ff657600080fd5b613001838284614b46565b50505092915050565b600082601f83011261301b57600080fd5b8151613029612e1082614a96565b9150808252602083016020830185838301111561304557600080fd5b613001838284614b52565b803561229c81614bb8565b803561229c81614bc1565b805161229c81614bca565b60006020828403121561308357600080fd5b600061308f8484612d9d565b949350505050565b600080604083850312156130aa57600080fd5b60006130b68585612d9d565b92505060206130c785828601612d9d565b9150509250929050565b600080602083850312156130e457600080fd5b823567ffffffffffffffff8111156130fb57600080fd5b61310785828601612da8565b92509250509250929050565b600080600080600060a0868803121561312b57600080fd5b853567ffffffffffffffff81111561314257600080fd5b61314e88828901612df1565b955050602086013567ffffffffffffffff81111561316b57600080fd5b61317788828901612f2a565b945050604086013567ffffffffffffffff81111561319457600080fd5b6131a088828901612ecd565b935050606086013567ffffffffffffffff8111156131bd57600080fd5b6131c988828901612e70565b925050608086013567ffffffffffffffff8111156131e657600080fd5b6131f288828901612fbb565b9150509295509295909350565b60006020828403121561321157600080fd5b600061308f8484612f9a565b60006020828403121561322f57600080fd5b600061308f8484612fb0565b60006020828403121561324d57600080fd5b815167ffffffffffffffff81111561326457600080fd5b61308f8482850161300a565b60006020828403121561328257600080fd5b600061308f8484613050565b6000602082840312156132a057600080fd5b600061308f8484612fa5565b600080604083850312156132bf57600080fd5b60006130b68585612fa5565b600080604083850312156132de57600080fd5b60006132ea8585612fa5565b92505060206130c78582860161305b565b600080600080600060a0868803121561331357600080fd5b600061331f8888612fa5565b95505060206133308882890161305b565b94505060406133418882890161305b565b935050606061335288828901612fa5565b92505060806131f288828901612fa5565b60006020828403121561337557600080fd5b600061308f8484613066565b600061338d83836133bc565b505060200190565b600061270b838361355e565b600061338d8383613544565b6133b681614b25565b82525050565b6133b681614add565b60006133d082614ad0565b6133da8185614ad4565b93506133e583614abe565b8060005b838110156134135781516133fd8882613381565b975061340883614abe565b9250506001016133e9565b509495945050505050565b600061342982614ad0565b6134338185614ad4565b93508360208202850161344585614abe565b8060005b8581101561347f57848403895281516134628582613395565b945061346d83614abe565b60209a909a0199925050600101613449565b5091979650505050505050565b600061349782614ad0565b6134a18185614ad4565b9350836020820285016134b385614abe565b8060005b8581101561347f57848403895281516134d08582613395565b94506134db83614abe565b60209a909a01999250506001016134b7565b60006134f882614ad0565b6135028185614ad4565b935061350d83614abe565b8060005b8381101561341357815161352588826133a1565b975061353083614abe565b925050600101613511565b6133b681614ae8565b6133b68161250c565b6133b66135598261250c565b61250c565b600061356982614ad0565b6135738185614ad4565b9350613583818560208601614b52565b61358c81614b7e565b9093019392505050565b6000815460018116600081146135b357600181146135d957613618565b607f60028304166135c48187614ad4565b60ff1984168152955050602085019250613618565b600282046135e78187614ad4565b95506135f285614ac4565b60005b82811015613611578154888201526001909101906020016135f5565b8701945050505b505092915050565b6133b681614aed565b6133b681614b30565b6133b681614b3b565b6000613648602e83614ad4565b7f476f7665726e6f72417274656d69733a3a5f63617374566f74653a20696e766181526d6c696420766f74652076616c756560901b602082015260400192915050565b6000613698602b83614ad4565b7f476f7665726e6f72417274656d69733a3a73746174653a20696e76616c69642081526a1c1c9bdc1bdcd85b081a5960aa1b602082015260400192915050565b60006136e5603983614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f627265616b676c6173733a207381527f656e646572206d75737420626520626720677561726469616e00000000000000602082015260400192915050565b6000613744605a83614ad4565b7f476f7665726e6f72417274656d69733a3a70726f706f73653a206f6e65206c6981527f76652070726f706f73616c207065722070726f706f7365722c20666f756e642060208201527f616e20616c7265616479206163746976652070726f706f73616c000000000000604082015260600192915050565b60006137c9604683614ad4565b7f476f7665726e6f72417274656d69733a3a5f71756575654f725265766572743a81527f2070726f706f73616c20616374696f6e20616c7265616479207175657565642060208201526561742065746160d01b604082015260600192915050565b60006138376002836110eb565b61190160f01b815260020192915050565b6000613855601983614ad4565b7f6f6e6c7920627265616b20676c61737320677561726469616e00000000000000815260200192915050565b600061388e600d83614ad4565b6c6f6e6c792074696d656c6f636b60981b815260200192915050565b60006138b7602a836110eb565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815269766f746556616c75652960b01b6020820152602a0192915050565b6000613903603583614ad4565b7f476f7665726e6f72417274656d69733a3a7377656570546f6b656e733a2073658152746e646572206d7573742062652074696d656c6f636b60581b602082015260400192915050565b600061395a603883614ad4565b7f476f7665726e6f72417274656d69733a3a63616e63656c3a2063616e6e6f742081527f63616e63656c2065786563757465642070726f706f73616c0000000000000000602082015260400192915050565b60006139b9602f83614ad4565b7f476f7665726e6f72417274656d69733a3a5f63617374566f74653a20766f746581526e1c88185b1c9958591e481d9bdd1959608a1b602082015260400192915050565b6000613a0a605183614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f736574476f7665726e616e636581527f52657475726e416464726573733a2073656e646572206d75737420626520676f6020820152703b103932ba3ab9371033bab0b93234b0b760791b604082015260600192915050565b6000613a83601883614ad4565b7f73657450656e64696e6741646d696e2861646472657373290000000000000000815260200192915050565b6000613abc604683614ad4565b7f476f7665726e6f72417274656d69733a3a70726f706f73653a2070726f706f7381527f616c2066756e6374696f6e20696e666f726d6174696f6e206172697479206d696020820152650e6dac2e8c6d60d31b604082015260600192915050565b6000613b2a601183614ad4565b7073657441646d696e28616464726573732960781b815260200192915050565b6000613b57604b83614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f6578656375746541636365707481527f41646d696e4f6e436f6e74726163743a2073656e646572206d7573742062652060208201526a31339033bab0b93234b0b760a91b604082015260600192915050565b6000613bca601483614ad4565b7361636365707450656e64696e6741646d696e282960601b815260200192915050565b6000613bfa603a83614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f61636365707441646d696e3a2081527f73656e646572206d75737420626520626720677561726469616e000000000000602082015260400192915050565b6000613c59603f83614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f72656d6f76654775617264696181527f6e733a2073656e646572206d757374206265207468652074696d656c6f636b00602082015260400192915050565b6000613cb8603183614ad4565b7f476f7665726e6f72417274656d69733a3a63616e63656c3a2070726f706f73658152701c8818589bdd99481d1a1c995cda1bdb19607a1b602082015260400192915050565b6000613d0b601183614ad4565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b6000613d386043836110eb565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000613da3602e83614ad4565b7f476f7665726e6f72417274656d69733a3a70726f706f73653a206d757374207081526d726f7669646520616374696f6e7360901b602082015260400192915050565b6000613df3601483614ad4565b736368616e676541646d696e28616464726573732960601b815260200192915050565b6000613e23604683614ad4565b7f476f7665726e6f72417274656d69733a3a71756575653a2070726f706f73616c81527f2063616e206f6e6c79206265207175657565642069662069742069732073756360208201526518d95959195960d21b604082015260600192915050565b6000613e91601c83614ad4565b7f6465736372697074696f6e2063616e206e6f7420626520656d70747900000000815260200192915050565b6000613eca604783614ad4565b7f476f7665726e6f72417274656d69733a3a657865637574653a2070726f706f7381527f616c2063616e206f6e6c79206265206578656375746564206966206974206973602082015266081c5d595d595960ca1b604082015260600192915050565b6000613f39601983614ad4565b7f5f73657450656e64696e6741646d696e28616464726573732900000000000000815260200192915050565b6000613f72605383614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f65786563757465436f6d706f7581527f6e6441636365707441646d696e4f6e436f6e74726163743a2073656e6465722060208201527236bab9ba1031329031339033bab0b93234b0b760691b604082015260600192915050565b6000613fed603183614ad4565b7f476f7665726e6f72417274656d69733a3a63617374566f746542795369673a20815270696e76616c6964207369676e617475726560781b602082015260400192915050565b6000614040604183614ad4565b7f476f7665726e6f72417274656d69733a3a70726f706f73653a2070726f706f7381527f657220766f7465732062656c6f772070726f706f73616c207468726573686f6c6020820152601960fa1b604082015260600192915050565b60006140a9605b83614ad4565b7f476f7665726e6f72417274656d69733a3a70726f706f73653a206f6e65206c6981527f76652070726f706f73616c207065722070726f706f7365722c20666f756e642060208201527f616e20616c72656164792070656e64696e672070726f706f73616c0000000000604082015260600192915050565b600061412e602c83614ad4565b7f476f7665726e6f72417274656d69733a3a5f63617374566f74653a20766f746981526b1b99c81a5cc818db1bdcd95960a21b602082015260400192915050565b600061417c602a83614ad4565b7f476f7665726e6f72417274656d69733a3a70726f706f73653a20746f6f206d618152696e7920616374696f6e7360b01b602082015260400192915050565b60006141c8601c83614ad4565b7f736574456d697373696f6e734d616e6167657228616464726573732900000000815260200192915050565b6000614201600e83614ad4565b6d5f61636365707441646d696e282960901b815260200192915050565b600061422b603e83614ad4565b7f476f7665726e6f72417274656d69733a3a5f5f72656d6f76654775617264696181527f6e732063616e6e6f742072656d6f7665206265666f72652073756e7365740000602082015260400192915050565b600061428a601583614ad4565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b60006142bb601a83614ad4565b7f7472616e736665724f776e657273686970286164647265737329000000000000815260200192915050565b805160608301906142f8848261353b565b50602082015161430b602085018261431e565b50604082015161098e6040850182613544565b6133b681614b0e565b60006143328261382a565b915061433e828561354d565b60208201915061434e828461354d565b5060200192915050565b600061229c826138aa565b600061229c82613d2b565b6020810161229c82846133bc565b6040810161438a82856133bc565b61270b60208301846133bc565b608081016143a582866133bc565b6143b26020830185613632565b81810360408301526143c381613a76565b90508181036060830152611ec3818461355e565b608081016143e582866133bc565b6143f26020830185613632565b81810360408301526143c381613b1d565b6080810161441182866133bc565b61441e6020830185613632565b81810360408301526143c381613bbd565b6080810161443d82866133bc565b61444a6020830185613632565b81810360408301526143c381613de6565b6080810161446982866133bc565b6144766020830185613632565b81810360408301526143c381613f2c565b6080810161449582866133bc565b6144a26020830185613632565b81810360408301526143c3816141bb565b608081016144c182866133bc565b6144ce6020830185613632565b81810360408301526143c3816141f4565b608081016144ed82866133bc565b6144fa6020830185613632565b81810360408301526143c3816142ae565b6040810161451982856133bc565b61270b6020830184613544565b60a0810161453482886133bc565b6145416020830187613544565b8181036040830152614553818661355e565b90508181036060830152614567818561355e565b90506128f46080830184613544565b60a0810161458482886133bc565b6145916020830187613544565b81810360408301526145a38186613596565b905081810360608301526145678185613596565b608081016145c582876133bc565b6145d26020830186613544565b6145df604083018561431e565b611ec36060830184613544565b608080825281016145fd81876133c5565b9050818103602083015261461181866134ed565b90508181036040830152614625818561348c565b905081810360608301526128f4818461341e565b6020810161229c8284613544565b608081016146558287613544565b6146626020830186613544565b61466f6040830185613544565b611ec360608301846133bc565b6060810161468a8286613544565b6146976020830185613544565b61308f604083018461431e565b608081016146b28287613544565b6146bf602083018661431e565b6145df6040830185613544565b6020810161229c8284613620565b6020810161229c8284613629565b6020808252810161270b818461355e565b6020808252810161229c8161363b565b6020808252810161229c8161368b565b6020808252810161229c816136d8565b6020808252810161229c81613737565b6020808252810161229c816137bc565b6020808252810161229c81613848565b6020808252810161229c81613881565b6020808252810161229c816138f6565b6020808252810161229c8161394d565b6020808252810161229c816139ac565b6020808252810161229c816139fd565b6020808252810161229c81613aaf565b6020808252810161229c81613b4a565b6020808252810161229c81613bed565b6020808252810161229c81613c4c565b6020808252810161229c81613cab565b6020808252810161229c81613cfe565b6020808252810161229c81613d96565b6020808252810161229c81613e16565b6020808252810161229c81613e84565b6020808252810161229c81613ebd565b6020808252810161229c81613f65565b6020808252810161229c81613fe0565b6020808252810161229c81614033565b6020808252810161229c8161409c565b6020808252810161229c81614121565b6020808252810161229c8161416f565b6020808252810161229c8161421e565b6020808252810161229c8161427d565b6060810161229c82846142e7565b61012081016148e6828c613544565b6148f3602083018b6133ad565b8181036040830152614905818a6133c5565b9050818103606083015261491981896134ed565b9050818103608083015261492d818861348c565b905081810360a0830152614941818761341e565b905061495060c0830186613544565b61495d60e0830185613544565b818103610100830152614970818461355e565b9b9a5050505050505050505050565b610180810161498e828f613544565b61499b602083018e6133bc565b6149a8604083018d613544565b6149b5606083018c613544565b6149c2608083018b613544565b6149cf60a083018a613544565b6149dc60c0830189613544565b6149e960e0830188613544565b6149f7610100830187613544565b614a05610120830186613544565b614a1361014083018561353b565b614a2161016083018461353b565b9d9c50505050505050505050505050565b604081016145198285613544565b6020810161229c828461431e565b60405181810167ffffffffffffffff81118282101715614a6d57600080fd5b604052919050565b600067ffffffffffffffff821115614a8c57600080fd5b5060209081020190565b600067ffffffffffffffff821115614aad57600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b600061229c82614b02565b151590565b600061229c82614add565b806110eb81614b88565b6001600160a01b031690565b60ff1690565b6bffffffffffffffffffffffff1690565b600061229c82614aed565b600061229c82614af8565b600061229c8261250c565b82818337506000910152565b60005b83811015614b6d578181015183820152602001614b55565b8381111561098e5750506000910152565b601f01601f191690565b60088110612d9a57fe5b614b9b81614add565b8114612d9a57600080fd5b614b9b81614ae8565b614b9b8161250c565b614b9b81614aed565b614b9b81614b0e565b614b9b81614b1456fea365627a7a72315820347e017002fecf7a7d891b5a79fa32954a37f683c66c0e3c1121c567cb61a93c6c6578706572696d656e74616cf564736f6c63430005110040
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003a9249d70dcb4a4e9ef4f3af99a3a130452ec19b000000000000000000000000511ab53f793683763e5a8829738301368a2411e3000000000000000000000000933fcdf708481c57e9fd82f6baa084f42e98b60e0000000000000000000000008568a675384d761f36ec269d695d6ce4423cfab1000000000000000000000000ddbf679d6332d9e5b409865b9671d1927255b52a000000000000000000000000ffa353dacd27071217ea80d3149c9d500b0e9a38000000000000000000000000ffa353dacd27071217ea80d3149c9d500b0e9a380000000000000000000000000000000000000000000000000000000063e7e87a
-----Decoded View---------------
Arg [0] : timelock_ (address): 0x3a9249d70dCb4A4E9ef4f3AF99a3A130452ec19B
Arg [1] : well_ (address): 0x511aB53F793683763E5a8829738301368a2411E3
Arg [2] : distributor_ (address): 0x933fCDf708481c57E9FD82f6BAA084f42e98B60e
Arg [3] : safetyModule_ (address): 0x8568A675384d761f36eC269D695d6Ce4423cfaB1
Arg [4] : breakGlassGuardian_ (address): 0xdDbf679d6332d9E5b409865b9671d1927255B52A
Arg [5] : governanceReturnAddress_ (address): 0xFFA353daCD27071217EA80D3149C9d500B0e9a38
Arg [6] : governanceReturnGuardian_ (address): 0xFFA353daCD27071217EA80D3149C9d500B0e9a38
Arg [7] : guardianSunset_ (uint256): 1676142714
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000003a9249d70dcb4a4e9ef4f3af99a3a130452ec19b
Arg [1] : 000000000000000000000000511ab53f793683763e5a8829738301368a2411e3
Arg [2] : 000000000000000000000000933fcdf708481c57e9fd82f6baa084f42e98b60e
Arg [3] : 0000000000000000000000008568a675384d761f36ec269d695d6ce4423cfab1
Arg [4] : 000000000000000000000000ddbf679d6332d9e5b409865b9671d1927255b52a
Arg [5] : 000000000000000000000000ffa353dacd27071217ea80d3149c9d500b0e9a38
Arg [6] : 000000000000000000000000ffa353dacd27071217ea80d3149c9d500b0e9a38
Arg [7] : 0000000000000000000000000000000000000000000000000000000063e7e87a
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.