Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
GovernorBravoDelegate
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity Standard Json-Input format)
pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; import "./GovernorBravoInterfaces.sol"; contract GovernorBravoDelegate is GovernorBravoDelegateStorageV2, GovernorBravoEvents { /// @notice The name of this contract string public constant name = "Compound Governor Bravo"; /// @notice The minimum setable proposal threshold uint public constant MIN_PROPOSAL_THRESHOLD = 1_000_000e18; // 1 million Ondo /// @notice The maximum setable proposal threshold uint public constant MAX_PROPOSAL_THRESHOLD = 1_000_000_000e18; // 1 Billion Ondo /// @notice The minimum setable voting period uint public constant MIN_VOTING_PERIOD = 5760; // About 24 hours /// @notice The max setable voting period uint public constant MAX_VOTING_PERIOD = 80640; // About 2 weeks /// @notice The min setable voting delay uint public constant MIN_VOTING_DELAY = 1; /// @notice The max setable voting delay uint public constant MAX_VOTING_DELAY = 50400; // About 1 week /// @notice The number of votes in support of a proposal required in order for a quorum to be reached and for a vote to succeed uint public constant quorumVotes = 1_000_000e18; // 1 million Ondo /// @notice The maximum number of actions that can be included in a proposal uint public constant proposalMaxOperations = 10; // 10 actions /// @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 support)"); /** * @notice Used to initialize the contract during delegator contructor * @param timelock_ The address of the Timelock * @param comp_ The address of the COMP token * @param votingPeriod_ The initial voting period * @param votingDelay_ The initial voting delay * @param proposalThreshold_ The initial proposal threshold */ function initialize( address timelock_, address comp_, uint votingPeriod_, uint votingDelay_, uint proposalThreshold_ ) public { require( address(timelock) == address(0), "GovernorBravo::initialize: can only initialize once" ); require(msg.sender == admin, "GovernorBravo::initialize: admin only"); require( timelock_ != address(0), "GovernorBravo::initialize: invalid timelock address" ); require( comp_ != address(0), "GovernorBravo::initialize: invalid comp address" ); require( votingPeriod_ >= MIN_VOTING_PERIOD && votingPeriod_ <= MAX_VOTING_PERIOD, "GovernorBravo::initialize: invalid voting period" ); require( votingDelay_ >= MIN_VOTING_DELAY && votingDelay_ <= MAX_VOTING_DELAY, "GovernorBravo::initialize: invalid voting delay" ); require( proposalThreshold_ >= MIN_PROPOSAL_THRESHOLD && proposalThreshold_ <= MAX_PROPOSAL_THRESHOLD, "GovernorBravo::initialize: invalid proposal threshold" ); timelock = TimelockInterface(timelock_); comp = CompInterface(comp_); votingPeriod = votingPeriod_; votingDelay = votingDelay_; proposalThreshold = proposalThreshold_; } /** * @notice Function used to propose a new proposal. Sender must have delegates above the proposal threshold * @param targets Target addresses for proposal calls * @param values Eth values for proposal calls * @param signatures Function signatures for proposal calls * @param calldatas Calldatas for proposal calls * @param description String description of the proposal * @return Proposal id of new proposal */ function propose( address[] memory targets, uint[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description ) public returns (uint) { // Reject proposals before initiating as Governor require( initialProposalId != 0, "GovernorBravo::propose: Governor Bravo not active" ); // Allow addresses above proposal threshold and whitelisted addresses to propose require( comp.getPriorVotes(msg.sender, sub256(block.number, 1)) > proposalThreshold || isWhitelisted(msg.sender), "GovernorBravo::propose: proposer votes below proposal threshold" ); require( targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length, "GovernorBravo::propose: proposal function information arity mismatch" ); require( targets.length != 0, "GovernorBravo::propose: must provide actions" ); require( targets.length <= proposalMaxOperations, "GovernorBravo::propose: too many actions" ); uint latestProposalId = latestProposalIds[msg.sender]; if (latestProposalId != 0) { ProposalState proposersLatestProposalState = state(latestProposalId); require( proposersLatestProposalState != ProposalState.Active, "GovernorBravo::propose: one live proposal per proposer, found an already active proposal" ); require( proposersLatestProposalState != ProposalState.Pending, "GovernorBravo::propose: one live proposal per proposer, found an already pending proposal" ); } uint startBlock = add256(block.number, votingDelay); uint endBlock = add256(startBlock, votingPeriod); proposalCount++; Proposal memory newProposal = Proposal({ id: proposalCount, proposer: msg.sender, eta: 0, targets: targets, values: values, signatures: signatures, calldatas: calldatas, startBlock: startBlock, endBlock: endBlock, forVotes: 0, againstVotes: 0, abstainVotes: 0, canceled: false, executed: false }); proposals[newProposal.id] = newProposal; latestProposalIds[newProposal.proposer] = newProposal.id; emit ProposalCreated( newProposal.id, msg.sender, targets, values, signatures, calldatas, startBlock, endBlock, description ); return newProposal.id; } /** * @notice Queues a proposal of state succeeded * @param proposalId The id of the proposal to queue */ function queue(uint proposalId) external { require( state(proposalId) == ProposalState.Succeeded, "GovernorBravo::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++) { queueOrRevertInternal( proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], eta ); } proposal.eta = eta; emit ProposalQueued(proposalId, eta); } function queueOrRevertInternal( address target, uint value, string memory signature, bytes memory data, uint eta ) internal { require( !timelock.queuedTransactions( keccak256(abi.encode(target, value, signature, data, eta)) ), "GovernorBravo::queueOrRevertInternal: identical proposal action already queued at eta" ); timelock.queueTransaction(target, value, signature, data, eta); } /** * @notice Executes a queued proposal if eta has passed * @param proposalId The id of the proposal to execute */ function execute(uint proposalId) external { require( state(proposalId) == ProposalState.Queued, "GovernorBravo::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); } /** * @notice Cancels a proposal only if sender is the proposer, or proposer delegates dropped below proposal threshold * @param proposalId The id of the proposal to cancel */ function cancel(uint proposalId) external { require( state(proposalId) != ProposalState.Executed, "GovernorBravo::cancel: cannot cancel executed proposal" ); Proposal storage proposal = proposals[proposalId]; // Proposer can cancel if (msg.sender != proposal.proposer) { // Whitelisted proposers can't be canceled for falling below proposal threshold if (isWhitelisted(proposal.proposer)) { require( (comp.getPriorVotes(proposal.proposer, sub256(block.number, 1)) < proposalThreshold) && msg.sender == whitelistGuardian, "GovernorBravo::cancel: whitelisted proposer" ); } else { require( (comp.getPriorVotes(proposal.proposer, sub256(block.number, 1)) < proposalThreshold), "GovernorBravo::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); } /** * @notice Gets actions of a proposal * @param proposalId the id of the proposal * @return Targets, values, signatures, and calldatas of the proposal actions */ function getActions( uint proposalId ) external 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); } /** * @notice Gets the receipt for a voter on a given proposal * @param proposalId the id of proposal * @param voter The address of the voter * @return The voting receipt */ function getReceipt( uint proposalId, address voter ) external view returns (Receipt memory) { return proposals[proposalId].receipts[voter]; } /** * @notice Gets the state of a proposal * @param proposalId The id of the proposal * @return Proposal state */ function state(uint proposalId) public view returns (ProposalState) { require( proposalCount >= proposalId && proposalId > initialProposalId, "GovernorBravo::state: invalid proposal id" ); Proposal storage proposal = proposals[proposalId]; if (proposal.canceled) { return ProposalState.Canceled; } else if (block.number <= proposal.startBlock) { return ProposalState.Pending; } else if (block.number <= proposal.endBlock) { return ProposalState.Active; } else if ( proposal.forVotes <= proposal.againstVotes || proposal.forVotes < 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; } } /** * @notice Cast a vote for a proposal * @param proposalId The id of the proposal to vote on * @param support The support value for the vote. 0=against, 1=for, 2=abstain */ function castVote(uint proposalId, uint8 support) external { emit VoteCast( msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), "" ); } /** * @notice Cast a vote for a proposal with a reason * @param proposalId The id of the proposal to vote on * @param support The support value for the vote. 0=against, 1=for, 2=abstain * @param reason The reason given for the vote by the voter */ function castVoteWithReason( uint proposalId, uint8 support, string calldata reason ) external { emit VoteCast( msg.sender, proposalId, support, castVoteInternal(msg.sender, proposalId, support), reason ); } /** * @notice Cast a vote for a proposal by signature * @dev External function that accepts EIP-712 signatures for voting on proposals. */ function castVoteBySig( uint proposalId, uint8 support, uint8 v, bytes32 r, bytes32 s ) external { bytes32 domainSeparator = keccak256( abi.encode( DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainIdInternal(), address(this) ) ); bytes32 structHash = keccak256( abi.encode(BALLOT_TYPEHASH, proposalId, support) ); bytes32 digest = keccak256( abi.encodePacked("\x19\x01", domainSeparator, structHash) ); address signatory = ecrecover(digest, v, r, s); require( signatory != address(0), "GovernorBravo::castVoteBySig: invalid signature" ); emit VoteCast( signatory, proposalId, support, castVoteInternal(signatory, proposalId, support), "" ); } /** * @notice Internal function that caries out voting logic * @param voter The voter that is casting their vote * @param proposalId The id of the proposal to vote on * @param support The support value for the vote. 0=against, 1=for, 2=abstain * @return The number of votes cast */ function castVoteInternal( address voter, uint proposalId, uint8 support ) internal returns (uint96) { require( state(proposalId) == ProposalState.Active, "GovernorBravo::castVoteInternal: voting is closed" ); require(support <= 2, "GovernorBravo::castVoteInternal: invalid vote type"); Proposal storage proposal = proposals[proposalId]; Receipt storage receipt = proposal.receipts[voter]; require( receipt.hasVoted == false, "GovernorBravo::castVoteInternal: voter already voted" ); uint96 votes = comp.getPriorVotes(voter, proposal.startBlock); if (support == 0) { proposal.againstVotes = add256(proposal.againstVotes, votes); } else if (support == 1) { proposal.forVotes = add256(proposal.forVotes, votes); } else if (support == 2) { proposal.abstainVotes = add256(proposal.abstainVotes, votes); } receipt.hasVoted = true; receipt.support = support; receipt.votes = votes; return votes; } /** * @notice View function which returns if an account is whitelisted * @param account Account to check white list status of * @return If the account is whitelisted */ function isWhitelisted(address account) public view returns (bool) { return (whitelistAccountExpirations[account] > now); } /** * @notice Admin function for setting the voting delay * @param newVotingDelay new voting delay, in blocks */ function _setVotingDelay(uint newVotingDelay) external { require(msg.sender == admin, "GovernorBravo::_setVotingDelay: admin only"); require( newVotingDelay >= MIN_VOTING_DELAY && newVotingDelay <= MAX_VOTING_DELAY, "GovernorBravo::_setVotingDelay: invalid voting delay" ); uint oldVotingDelay = votingDelay; votingDelay = newVotingDelay; emit VotingDelaySet(oldVotingDelay, votingDelay); } /** * @notice Admin function for setting the voting period * @param newVotingPeriod new voting period, in blocks */ function _setVotingPeriod(uint newVotingPeriod) external { require(msg.sender == admin, "GovernorBravo::_setVotingPeriod: admin only"); require( newVotingPeriod >= MIN_VOTING_PERIOD && newVotingPeriod <= MAX_VOTING_PERIOD, "GovernorBravo::_setVotingPeriod: invalid voting period" ); uint oldVotingPeriod = votingPeriod; votingPeriod = newVotingPeriod; emit VotingPeriodSet(oldVotingPeriod, votingPeriod); } /** * @notice Admin function for setting the proposal threshold * @dev newProposalThreshold must be greater than the hardcoded min * @param newProposalThreshold new proposal threshold */ function _setProposalThreshold(uint newProposalThreshold) external { require( msg.sender == admin, "GovernorBravo::_setProposalThreshold: admin only" ); require( newProposalThreshold >= MIN_PROPOSAL_THRESHOLD && newProposalThreshold <= MAX_PROPOSAL_THRESHOLD, "GovernorBravo::_setProposalThreshold: invalid proposal threshold" ); uint oldProposalThreshold = proposalThreshold; proposalThreshold = newProposalThreshold; emit ProposalThresholdSet(oldProposalThreshold, proposalThreshold); } /** * @notice Admin function for setting the whitelist expiration as a timestamp for an account. Whitelist status allows accounts to propose without meeting threshold * @param account Account address to set whitelist expiration for * @param expiration Expiration for account whitelist status as timestamp (if now < expiration, whitelisted) */ function _setWhitelistAccountExpiration( address account, uint expiration ) external { require( msg.sender == admin || msg.sender == whitelistGuardian, "GovernorBravo::_setWhitelistAccountExpiration: admin only" ); whitelistAccountExpirations[account] = expiration; emit WhitelistAccountExpirationSet(account, expiration); } /** * @notice Admin function for setting the whitelistGuardian. WhitelistGuardian can cancel proposals from whitelisted addresses * @param account Account to set whitelistGuardian to (0x0 to remove whitelistGuardian) */ function _setWhitelistGuardian(address account) external { require( msg.sender == admin, "GovernorBravo::_setWhitelistGuardian: admin only" ); address oldGuardian = whitelistGuardian; whitelistGuardian = account; emit WhitelistGuardianSet(oldGuardian, whitelistGuardian); } /** * @notice Initiate the GovernorBravo contract * @dev Admin only. Sets initial proposal id which initiates the contract, ensuring a continuous proposal id count * @param governorAlpha The address for the Governor to continue the proposal id count from */ function _initiate(address governorAlpha) external { require(msg.sender == admin, "GovernorBravo::_initiate: admin only"); require( initialProposalId == 0, "GovernorBravo::_initiate: can only initiate once" ); proposalCount = GovernorAlpha(governorAlpha).proposalCount(); initialProposalId = proposalCount; timelock.acceptAdmin(); } /** * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer. * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer. * @param newPendingAdmin New pending admin. */ function _setPendingAdmin(address newPendingAdmin) external { // Check caller = admin require(msg.sender == admin, "GovernorBravo:_setPendingAdmin: admin only"); // Save current value, if any, for inclusion in log address oldPendingAdmin = pendingAdmin; // Store pendingAdmin with value newPendingAdmin pendingAdmin = newPendingAdmin; // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin) emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin); } /** * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin * @dev Admin function for pending admin to accept role and update admin */ function _acceptAdmin() external { // Check caller is pendingAdmin and pendingAdmin ≠address(0) require( msg.sender == pendingAdmin && msg.sender != address(0), "GovernorBravo:_acceptAdmin: pending admin only" ); // Save current values for inclusion in log address oldAdmin = admin; address oldPendingAdmin = pendingAdmin; // Store admin with value pendingAdmin admin = pendingAdmin; // Clear the pending value pendingAdmin = address(0); emit NewAdmin(oldAdmin, admin); emit NewPendingAdmin(oldPendingAdmin, pendingAdmin); } 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 getChainIdInternal() internal pure returns (uint) { uint chainId; assembly { chainId := chainid() } return chainId; } }
pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; // https://etherscan.io/address/0xeF3B6E9e13706A8F01fe98fdCf66335dc5CfdEED#code // TODO: check the difference between this file and the one located here: 0xc0Da02939E1441F497fd74F78cE7Decb17B66529 contract GovernorBravoEvents { /// @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 startBlock, uint endBlock, string description ); /// @notice An event emitted when a vote has been cast on a proposal /// @param voter The address which casted a vote /// @param proposalId The proposal id which was voted on /// @param support Support value for the vote. 0=against, 1=for, 2=abstain /// @param votes Number of votes which were cast by the voter /// @param reason The reason given for the vote by the voter event VoteCast( address indexed voter, uint proposalId, uint8 support, uint votes, string reason ); /// @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 the voting delay is set event VotingDelaySet(uint oldVotingDelay, uint newVotingDelay); /// @notice An event emitted when the voting period is set event VotingPeriodSet(uint oldVotingPeriod, uint newVotingPeriod); /// @notice Emitted when implementation is changed event NewImplementation(address oldImplementation, address newImplementation); /// @notice Emitted when proposal threshold is set event ProposalThresholdSet( uint oldProposalThreshold, uint newProposalThreshold ); /// @notice Emitted when pendingAdmin is changed event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin); /// @notice Emitted when pendingAdmin is accepted, which means admin is updated event NewAdmin(address oldAdmin, address newAdmin); /// @notice Emitted when whitelist account expiration is set event WhitelistAccountExpirationSet(address account, uint expiration); /// @notice Emitted when the whitelistGuardian is set event WhitelistGuardianSet(address oldGuardian, address newGuardian); } contract GovernorBravoDelegatorStorage { /// @notice Administrator for this contract address public admin; /// @notice Pending administrator for this contract address public pendingAdmin; /// @notice Active brains of Governor address public implementation; } /** * @title Storage for Governor Bravo Delegate * @notice For future upgrades, do not change GovernorBravoDelegateStorageV1. Create a new * contract which implements GovernorBravoDelegateStorageV1 and following the naming convention * GovernorBravoDelegateStorageVX. */ contract GovernorBravoDelegateStorageV1 is GovernorBravoDelegatorStorage { /// @notice The delay before voting on a proposal may take place, once proposed, in blocks uint public votingDelay; /// @notice The duration of voting on a proposal, in blocks uint public votingPeriod; /// @notice The number of votes required in order for a voter to become a proposer uint public proposalThreshold; /// @notice Initial proposal id set at become uint public initialProposalId; /// @notice The total number of proposals uint public proposalCount; /// @notice The address of the Compound Protocol Timelock TimelockInterface public timelock; /// @notice The address of the Compound governance token CompInterface public comp; /// @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; 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 block at which voting begins: holders must delegate their votes prior to this block uint startBlock; /// @notice The block at which voting ends: votes must be cast prior to this block uint endBlock; /// @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 for abstaining for this proposal uint abstainVotes; /// @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 Whether or not the voter supports the proposal or abstains uint8 support; /// @notice The number of votes the voter had, which were cast uint96 votes; } /// @notice Possible states that a proposal may be in enum ProposalState { Pending, Active, Canceled, Defeated, Succeeded, Queued, Expired, Executed } } contract GovernorBravoDelegateStorageV2 is GovernorBravoDelegateStorageV1 { /// @notice Stores the expiration of account whitelist status as a timestamp mapping(address => uint) public whitelistAccountExpirations; /// @notice Address which manages whitelisted proposals and whitelist accounts address public whitelistGuardian; } 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); } interface CompInterface { function getPriorVotes( address account, uint blockNumber ) external view returns (uint96); } interface GovernorAlpha { /// @notice The total number of proposals function proposalCount() external returns (uint); }
{ "evmVersion": "istanbul", "libraries": {}, "metadata": { "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 100 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldImplementation","type":"address"},{"indexed":false,"internalType":"address","name":"newImplementation","type":"address"}],"name":"NewImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","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":"startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","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":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ProposalQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldProposalThreshold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newProposalThreshold","type":"uint256"}],"name":"ProposalThresholdSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"support","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"VoteCast","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldVotingDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newVotingDelay","type":"uint256"}],"name":"VotingDelaySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldVotingPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newVotingPeriod","type":"uint256"}],"name":"VotingPeriodSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"WhitelistAccountExpirationSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGuardian","type":"address"},{"indexed":false,"internalType":"address","name":"newGuardian","type":"address"}],"name":"WhitelistGuardianSet","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":true,"inputs":[],"name":"MAX_PROPOSAL_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_VOTING_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MAX_VOTING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_PROPOSAL_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_VOTING_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_VOTING_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"_acceptAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"governorAlpha","type":"address"}],"name":"_initiate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newProposalThreshold","type":"uint256"}],"name":"_setProposalThreshold","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newVotingDelay","type":"uint256"}],"name":"_setVotingDelay","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"newVotingPeriod","type":"uint256"}],"name":"_setVotingPeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"_setWhitelistAccountExpiration","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_setWhitelistGuardian","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","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":"support","type":"uint8"}],"name":"castVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","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":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"string","name":"reason","type":"string"}],"name":"castVoteWithReason","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"comp","outputs":[{"internalType":"contract CompInterface","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":"support","type":"uint8"},{"internalType":"uint96","name":"votes","type":"uint96"}],"internalType":"struct GovernorBravoDelegateStorageV1.Receipt","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"initialProposalId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"timelock_","type":"address"},{"internalType":"address","name":"comp_","type":"address"},{"internalType":"uint256","name":"votingPeriod_","type":"uint256"},{"internalType":"uint256","name":"votingDelay_","type":"uint256"},{"internalType":"uint256","name":"proposalThreshold_","type":"uint256"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"uint256","name":"abstainVotes","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":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum GovernorBravoDelegateStorageV1.ProposalState","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"timelock","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistAccountExpirations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelistGuardian","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506146b0806100206000396000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c80635c60da1b1161015c578063d33219b4116100ce578063e48083fe11610087578063e48083fe1461051c578063e9c714f214610524578063f851a4401461052c578063f9d28b8014610534578063fc4eee4214610547578063fe0d94c11461054f5761027f565b8063d33219b4146104be578063da35c664146104c6578063da95691a146104ce578063ddf0b009146104e1578063deaaa7cc146104f4578063e23a9a52146104fc5761027f565b8063a64e024a11610120578063a64e024a14610478578063b112626314610480578063b58131b014610488578063b71d1a0c14610490578063c5a8425d146104a3578063d13f90b4146104ab5761027f565b80635c60da1b14610442578063791f5d23146103535780637b3c71d31461044a5780637bdbe4d01461045d57806399533365146104655761027f565b806325fd935a116101f55780633af32abf116101b95780633af32abf146103b65780633bccf4fd146103d65780633e4f49e6146103e957806340e58ee5146104095780634d6733d21461041c578063567813881461042f5761027f565b806325fd935a1461035b5780632678224714610363578063328dd9821461037857806338bd0dda1461039b5780633932abb1146103ae5761027f565b806317977c611161024757806317977c611461030a57806317ba1b8b1461031d5780631dfb1b5a1461033057806320606b7014610343578063215809ca1461034b57806324bc1a64146103535761027f565b8063013cf08b1461028457806302a251a3146102b657806306fdde03146102cb5780630ea2d98c146102e0578063109d0af8146102f5575b600080fd5b610297610292366004612c35565b610562565b6040516102ad9a9998979695949392919061438a565b60405180910390f35b6102be6105c5565b6040516102ad9190613f97565b6102d36105cb565b6040516102ad9190614053565b6102f36102ee366004612c35565b6105fe565b005b6102fd6106a8565b6040516102ad9190614037565b6102be610318366004612a16565b6106b7565b6102f361032b366004612c35565b6106c9565b6102f361033e366004612c35565b61076f565b6102be610802565b6102be610819565b6102be61081f565b6102be61082d565b61036b61083d565b6040516102ad9190613e4f565b61038b610386366004612c35565b61084c565b6040516102ad9493929190613f3c565b6102be6103a9366004612a16565b610adb565b6102be610aed565b6103c96103c4366004612a16565b610af3565b6040516102ad9190613f89565b6102f36103e4366004612d1a565b610b14565b6103fc6103f7366004612c35565b610cdd565b6040516102ad9190614045565b6102f3610417366004612c35565b610e62565b6102f361042a366004612ab1565b6111a9565b6102f361043d366004612c83565b611235565b61036b61126d565b6102f3610458366004612cb3565b61127c565b6102be6112ba565b6102f3610473366004612a16565b6112bf565b6102be61133e565b6102be611345565b6102be61134b565b6102f361049e366004612a16565b611351565b61036b6113ce565b6102f36104b9366004612a3c565b6113dd565b6102fd61155c565b6102be61156b565b6102be6104dc366004612aeb565b611571565b6102f36104ef366004612c35565b6119c8565b6102be611c44565b61050f61050a366004612c53565b611c50565b6040516102ad91906142d4565b6102be611cbd565b6102f3611cc2565b61036b611da0565b6102f3610542366004612a16565b611daf565b6102be611ed5565b6102f361055d366004612c35565b611edb565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c9097015495976001600160a01b0390951696939592949193919290919060ff808216916101009004168a565b60045481565b60405180604001604052806017815260200176436f6d706f756e6420476f7665726e6f7220427261766f60481b81525081565b6000546001600160a01b031633146106315760405162461bcd60e51b8152600401610628906140a4565b60405180910390fd5b6116808110158015610646575062013b008111155b6106625760405162461bcd60e51b8152600401610628906140e4565b60048054908290556040517f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e88289061069c9083908590614410565b60405180910390a15050565b6009546001600160a01b031681565b600b6020526000908152604090205481565b6000546001600160a01b031633146106f35760405162461bcd60e51b815260040161062890614284565b69d3c21bcecceda1000000811015801561071957506b033b2e3c9fd0803ce80000008111155b6107355760405162461bcd60e51b815260040161062890614194565b60058054908290556040517fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc054619061069c9083908590614410565b6000546001600160a01b031633146107995760405162461bcd60e51b8152600401610628906140c4565b600181101580156107ac575061c4e08111155b6107c85760405162461bcd60e51b815260040161062890614114565b60038054908290556040517fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a939061069c9083908590614410565b60405161080e90613e44565b604051809103902081565b61168081565b69d3c21bcecceda100000081565b6b033b2e3c9fd0803ce800000081565b6001546001600160a01b031681565b6060806060806000600a6000878152602001908152602001600020905080600301816004018260050183600601838054806020026020016040519081016040528092919081815260200182805480156108ce57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108b0575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561092057602002820191906000526020600020905b81548152602001906001019080831161090c575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b828210156109f35760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156109df5780601f106109b4576101008083540402835291602001916109df565b820191906000526020600020905b8154815290600101906020018083116109c257829003601f168201915b505050505081526020019060010190610948565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610ac55760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610ab15780601f10610a8657610100808354040283529160200191610ab1565b820191906000526020600020905b815481529060010190602001808311610a9457829003601f168201915b505050505081526020019060010190610a1a565b5050505090509450945094509450509193509193565b600c6020526000908152604090205481565b60035481565b6001600160a01b0381166000908152600c602052604090205442105b919050565b6000604051610b2290613e44565b604080519182900382208282019091526017825276436f6d706f756e6420476f7665726e6f7220427261766f60481b6020909201919091527f3d9e905142ff365fb68ce863f26a44f5583cf7ec11bcde450555f50b7e1b5614610b8361207a565b30604051602001610b979493929190613fa5565b6040516020818303038152906040528051906020012090506000604051610bbd90613e08565b604051908190038120610bd69189908990602001613fda565b60405160208183030381529060405280519060200120905060008282604051602001610c03929190613e13565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610c409493929190614002565b6020604051602081039080840390855afa158015610c62573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c955760405162461bcd60e51b815260040161062890614144565b806001600160a01b031660008051602061464e8339815191528a8a610cbb858e8e61207f565b604051610cca93929190614464565b60405180910390a2505050505050505050565b60008160075410158015610cf2575060065482115b610d0e5760405162461bcd60e51b815260040161062890614294565b6000828152600a60205260409020600c81015460ff1615610d33576002915050610b0f565b80600701544311610d48576000915050610b0f565b80600801544311610d5d576001915050610b0f565b80600a01548160090154111580610d81575069d3c21bcecceda10000008160090154105b15610d90576003915050610b0f565b6002810154610da3576004915050610b0f565b600c810154610100900460ff1615610dbf576007915050610b0f565b6002810154600854604080516360d143f160e11b81529051610e4893926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b158015610e0b57600080fd5b505afa158015610e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e439190810190612be3565b612270565b4210610e58576006915050610b0f565b6005915050610b0f565b6007610e6d82610cdd565b6007811115610e7857fe5b1415610e965760405162461bcd60e51b815260040161062890614274565b6000818152600a6020526040902060018101546001600160a01b0316331461106d576001810154610ecf906001600160a01b0316610af3565b15610fae576005546009546001838101546001600160a01b039283169263782d6fe192911690610f00904390612295565b6040518363ffffffff1660e01b8152600401610f1d929190613e93565b60206040518083038186803b158015610f3557600080fd5b505afa158015610f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f6d9190810190612d60565b6001600160601b0316108015610f8d5750600d546001600160a01b031633145b610fa95760405162461bcd60e51b8152600401610628906142c4565b61106d565b6005546009546001838101546001600160a01b039283169263782d6fe192911690610fda904390612295565b6040518363ffffffff1660e01b8152600401610ff7929190613e93565b60206040518083038186803b15801561100f57600080fd5b505afa158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110479190810190612d60565b6001600160601b03161061106d5760405162461bcd60e51b815260040161062890614204565b600c8101805460ff1916600117905560005b6003820154811015611179576008546003830180546001600160a01b039092169163591fcdfe9190849081106110b157fe5b6000918252602090912001546004850180546001600160a01b0390921691859081106110d957fe5b90600052602060002001548560050185815481106110f357fe5b9060005260206000200186600601868154811061110c57fe5b9060005260206000200187600201546040518663ffffffff1660e01b815260040161113b959493929190613efb565b600060405180830381600087803b15801561115557600080fd5b505af1158015611169573d6000803e3d6000fd5b50506001909201915061107f9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c8260405161069c9190613f97565b6000546001600160a01b03163314806111cc5750600d546001600160a01b031633145b6111e85760405162461bcd60e51b815260040161062890614264565b6001600160a01b0382166000908152600c602052604090819020829055517f4e7b7545bc5744d0e30425959f4687475774b6c7edad77d24cb51c7d967d45159061069c9084908490613e93565b3360008051602061464e833981519152838361125284838361207f565b60405161126193929190614464565b60405180910390a25050565b6002546001600160a01b031681565b3360008051602061464e833981519152858561129984838361207f565b86866040516112ac95949392919061441e565b60405180910390a250505050565b600a81565b6000546001600160a01b031633146112e95760405162461bcd60e51b815260040161062890614164565b600d80546001600160a01b038381166001600160a01b031983161792839055604051918116927f80a07e73e552148844a9c216d9724212d609cfa54e9c1a2e97203bdd2c4ad3419261069c9285921690613e78565b62013b0081565b61c4e081565b60055481565b6000546001600160a01b0316331461137b5760405162461bcd60e51b815260040161062890614084565b600180546001600160a01b038381166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99061069c9083908590613e78565b600d546001600160a01b031681565b6008546001600160a01b0316156114065760405162461bcd60e51b815260040161062890614074565b6000546001600160a01b031633146114305760405162461bcd60e51b815260040161062890614184565b6001600160a01b0385166114565760405162461bcd60e51b8152600401610628906140b4565b6001600160a01b03841661147c5760405162461bcd60e51b8152600401610628906141f4565b6116808310158015611491575062013b008311155b6114ad5760405162461bcd60e51b8152600401610628906142a4565b600182101580156114c0575061c4e08211155b6114dc5760405162461bcd60e51b815260040161062890614154565b69d3c21bcecceda1000000811015801561150257506b033b2e3c9fd0803ce80000008111155b61151e5760405162461bcd60e51b815260040161062890614124565b600880546001600160a01b039687166001600160a01b0319918216179091556009805495909616941693909317909355600455600391909155600555565b6008546001600160a01b031681565b60075481565b6000600654600014156115965760405162461bcd60e51b8152600401610628906140d4565b6005546009546001600160a01b031663782d6fe1336115b6436001612295565b6040518363ffffffff1660e01b81526004016115d3929190613e5d565b60206040518083038186803b1580156115eb57600080fd5b505afa1580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116239190810190612d60565b6001600160601b0316118061163c575061163c33610af3565b6116585760405162461bcd60e51b815260040161062890614254565b8451865114801561166a575083518651145b8015611677575082518651145b6116935760405162461bcd60e51b815260040161062890614174565b85516116b15760405162461bcd60e51b8152600401610628906141d4565b600a865111156116d35760405162461bcd60e51b815260040161062890614214565b336000908152600b602052604090205480156117505760006116f482610cdd565b9050600181600781111561170457fe5b14156117225760405162461bcd60e51b815260040161062890614234565b600081600781111561173057fe5b141561174e5760405162461bcd60e51b815260040161062890614224565b505b600061175e43600354612270565b9050600061176e82600454612270565b600780546001019055905061178161241c565b604051806101c001604052806007548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600a6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301908051906020019061186b929190612498565b50608082015180516118879160048401916020909101906124fd565b5060a082015180516118a3916005840191602090910190612544565b5060c082015180516118bf91600684019160209091019061259d565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff0219169083151502179055509050508060000151600b600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e6040516119b0999897969594939291906142e2565b60405180910390a15193505050505b95945050505050565b60046119d382610cdd565b60078111156119de57fe5b146119fb5760405162461bcd60e51b8152600401610628906141a4565b6000818152600a602090815260408083206008548251630d48571f60e31b81529251919493611a559342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b158015610e0b57600080fd5b905060005b6003830154811015611bfd57611bf5836003018281548110611a7857fe5b6000918252602090912001546004850180546001600160a01b039092169184908110611aa057fe5b9060005260206000200154856005018481548110611aba57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611b485780601f10611b1d57610100808354040283529160200191611b48565b820191906000526020600020905b815481529060010190602001808311611b2b57829003601f168201915b5050505050866006018581548110611b5c57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611bea5780601f10611bbf57610100808354040283529160200191611bea565b820191906000526020600020905b815481529060010190602001808311611bcd57829003601f168201915b5050505050866122bd565b600101611a5a565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611c379085908490614410565b60405180910390a1505050565b60405161080e90613e08565b611c586125f6565b506000828152600a602090815260408083206001600160a01b0385168452600d018252918290208251606081018452905460ff8082161515835261010082041692820192909252620100009091046001600160601b0316918101919091525b92915050565b600181565b6001546001600160a01b031633148015611cdb57503315155b611cf75760405162461bcd60e51b8152600401610628906141e4565b60008054600180546001600160a01b038082166001600160a01b03198086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92611d5b928692911690613e78565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99161069c9184916001600160a01b031690613e78565b6000546001600160a01b031681565b6000546001600160a01b03163314611dd95760405162461bcd60e51b815260040161062890614244565b60065415611df95760405162461bcd60e51b8152600401610628906141c4565b806001600160a01b031663da35c6646040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611e3457600080fd5b505af1158015611e48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e6c9190810190612be3565b600781905560065560085460408051630e18b68160e01b815290516001600160a01b0390921691630e18b6819160048082019260009290919082900301818387803b158015611eba57600080fd5b505af1158015611ece573d6000803e3d6000fd5b5050505050565b60065481565b6005611ee682610cdd565b6007811115611ef157fe5b14611f0e5760405162461bcd60e51b815260040161062890614134565b6000818152600a60205260408120600c8101805461ff001916610100179055905b600382015481101561204a576008546003830180546001600160a01b0390921691630825f38f919084908110611f6157fe5b6000918252602090912001546004850180546001600160a01b039092169185908110611f8957fe5b9060005260206000200154856005018581548110611fa357fe5b90600052602060002001866006018681548110611fbc57fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401611feb959493929190613efb565b600060405180830381600087803b15801561200557600080fd5b505af1158015612019573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120419190810190612c01565b50600101611f2f565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f8260405161069c9190613f97565b465b90565b6000600161208c84610cdd565b600781111561209757fe5b146120b45760405162461bcd60e51b8152600401610628906140f4565b60028260ff1611156120d85760405162461bcd60e51b815260040161062890614064565b6000838152600a602090815260408083206001600160a01b0388168452600d8101909252909120805460ff16156121215760405162461bcd60e51b815260040161062890614104565b600954600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe191612157918b91600401613e93565b60206040518083038186803b15801561216f57600080fd5b505afa158015612183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121a79190810190612d60565b905060ff85166121d2576121c883600a0154826001600160601b0316612270565b600a840155612228565b8460ff16600114156121ff576121f58360090154826001600160601b0316612270565b6009840155612228565b8460ff16600214156122285761222283600b0154826001600160601b0316612270565b600b8401555b8154600160ff199091161761ff00191661010060ff871602176dffffffffffffffffffffffff00001916620100006001600160601b03831602179091559150505b9392505050565b6000828201838110156122695760405162461bcd60e51b8152600401610628906141b4565b6000828211156122b75760405162461bcd60e51b8152600401610628906142b4565b50900390565b6008546040516001600160a01b039091169063f2b06537906122eb9088908890889088908890602001613ea1565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161231d9190613f97565b60206040518083038186803b15801561233557600080fd5b505afa158015612349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061236d9190810190612bc5565b1561238a5760405162461bcd60e51b815260040161062890614094565b600854604051633a66f90160e01b81526001600160a01b0390911690633a66f901906123c29088908890889088908890600401613ea1565b602060405180830381600087803b1580156123dc57600080fd5b505af11580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124149190810190612be3565b505050505050565b604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b8280548282559060005260206000209081019282156124ed579160200282015b828111156124ed57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906124b8565b506124f9929150612616565b5090565b828054828255906000526020600020908101928215612538579160200282015b8281111561253857825182559160200191906001019061251d565b506124f992915061263a565b828054828255906000526020600020908101928215612591579160200282015b828111156125915782518051612581918491602090910190612654565b5091602001919060010190612564565b506124f99291506126c1565b8280548282559060005260206000209081019282156125ea579160200282015b828111156125ea57825180516125da918491602090910190612654565b50916020019190600101906125bd565b506124f99291506126e4565b604080516060810182526000808252602082018190529181019190915290565b61207c91905b808211156124f95780546001600160a01b031916815560010161261c565b61207c91905b808211156124f95760008155600101612640565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061269557805160ff1916838001178555612538565b82800160010185558215612538579182018281111561253857825182559160200191906001019061251d565b61207c91905b808211156124f95760006126db8282612707565b506001016126c7565b61207c91905b808211156124f95760006126fe8282612707565b506001016126ea565b50805460018160011615610100020316600290046000825580601f1061272d575061274b565b601f01602090049060005260206000209081019061274b919061263a565b50565b8035611cb7816145d5565b600082601f83011261276a57600080fd5b813561277d612778826144c3565b61449d565b915081818352602084019350602081019050838560208402820111156127a257600080fd5b60005b838110156127ce57816127b8888261274e565b84525060209283019291909101906001016127a5565b5050505092915050565b600082601f8301126127e957600080fd5b81356127f7612778826144c3565b81815260209384019390925082018360005b838110156127ce578135860161281f8882612923565b8452506020928301929190910190600101612809565b600082601f83011261284657600080fd5b8135612854612778826144c3565b81815260209384019390925082018360005b838110156127ce578135860161287c8882612923565b8452506020928301929190910190600101612866565b600082601f8301126128a357600080fd5b81356128b1612778826144c3565b915081818352602084019350602081019050838560208402820111156128d657600080fd5b60005b838110156127ce57816128ec888261290d565b84525060209283019291909101906001016128d9565b8051611cb7816145e9565b8035611cb7816145f2565b8051611cb7816145f2565b600082601f83011261293457600080fd5b8135612942612778826144e3565b9150808252602083016020830185838301111561295e57600080fd5b612969838284614589565b50505092915050565b600082601f83011261298357600080fd5b8151612991612778826144e3565b915080825260208301602083018583830111156129ad57600080fd5b612969838284614595565b60008083601f8401126129ca57600080fd5b5081356001600160401b038111156129e157600080fd5b6020830191508360018202830111156129f957600080fd5b9250929050565b8035611cb7816145fb565b8051611cb781614604565b600060208284031215612a2857600080fd5b6000612a34848461274e565b949350505050565b600080600080600060a08688031215612a5457600080fd5b6000612a60888861274e565b9550506020612a718882890161274e565b9450506040612a828882890161290d565b9350506060612a938882890161290d565b9250506080612aa48882890161290d565b9150509295509295909350565b60008060408385031215612ac457600080fd5b6000612ad0858561274e565b9250506020612ae18582860161290d565b9150509250929050565b600080600080600060a08688031215612b0357600080fd5b85356001600160401b03811115612b1957600080fd5b612b2588828901612759565b95505060208601356001600160401b03811115612b4157600080fd5b612b4d88828901612892565b94505060408601356001600160401b03811115612b6957600080fd5b612b7588828901612835565b93505060608601356001600160401b03811115612b9157600080fd5b612b9d888289016127d8565b92505060808601356001600160401b03811115612bb957600080fd5b612aa488828901612923565b600060208284031215612bd757600080fd5b6000612a348484612902565b600060208284031215612bf557600080fd5b6000612a348484612918565b600060208284031215612c1357600080fd5b81516001600160401b03811115612c2957600080fd5b612a3484828501612972565b600060208284031215612c4757600080fd5b6000612a34848461290d565b60008060408385031215612c6657600080fd5b6000612c72858561290d565b9250506020612ae18582860161274e565b60008060408385031215612c9657600080fd5b6000612ca2858561290d565b9250506020612ae185828601612a00565b60008060008060608587031215612cc957600080fd5b6000612cd5878761290d565b9450506020612ce687828801612a00565b93505060408501356001600160401b03811115612d0257600080fd5b612d0e878288016129b8565b95989497509550505050565b600080600080600060a08688031215612d3257600080fd5b6000612d3e888861290d565b9550506020612d4f88828901612a00565b9450506040612a8288828901612a00565b600060208284031215612d7257600080fd5b6000612a348484612a0b565b6000612d8a8383612db9565b505060200190565b60006122698383612f5b565b6000612d8a8383612f41565b612db381614561565b82525050565b612db381614529565b6000612dcd8261451c565b612dd78185614520565b9350612de28361450a565b8060005b83811015612e10578151612dfa8882612d7e565b9750612e058361450a565b925050600101612de6565b509495945050505050565b6000612e268261451c565b612e308185614520565b935083602082028501612e428561450a565b8060005b85811015612e7c5784840389528151612e5f8582612d92565b9450612e6a8361450a565b60209a909a0199925050600101612e46565b5091979650505050505050565b6000612e948261451c565b612e9e8185614520565b935083602082028501612eb08561450a565b8060005b85811015612e7c5784840389528151612ecd8582612d92565b9450612ed88361450a565b60209a909a0199925050600101612eb4565b6000612ef58261451c565b612eff8185614520565b9350612f0a8361450a565b8060005b83811015612e10578151612f228882612d9e565b9750612f2d8361450a565b925050600101612f0e565b612db381614534565b612db38161207c565b612db3612f568261207c565b61207c565b6000612f668261451c565b612f708185614520565b9350612f80818560208601614595565b612f89816145c1565b9093019392505050565b600081546001811660008114612fb05760018114612fd657613015565b607f6002830416612fc18187614520565b60ff1984168152955050602085019250613015565b60028204612fe48187614520565b9550612fef85614510565b60005b8281101561300e57815488820152600190910190602001612ff2565b8701945050505b505092915050565b612db381614568565b612db381614573565b600061303b8385614520565b9350613048838584614589565b612f89836145c1565b600061305e603283614520565b60008051602061460e83398151915281527120696e76616c696420766f7465207479706560701b602082015260400192915050565b60006130a0602883610b0f565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815267737570706f72742960c01b602082015260280192915050565b60006130ea603383614520565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f8152726e6c7920696e697469616c697a65206f6e636560681b602082015260400192915050565b600061313f602a83614520565b7f476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b600061318b605583614520565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20602082015274616c7265616479207175657565642061742065746160581b604082015260600192915050565b6000613208602b83614520565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a81526a2061646d696e206f6e6c7960a81b602082015260400192915050565b6000613255603383614520565b60008051602061462e83398151915281527269642074696d656c6f636b206164647265737360681b602082015260400192915050565b6000613298602a83614520565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b60006132e4603183614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7281527020427261766f206e6f742061637469766560781b602082015260400192915050565b6000613337600283610b0f565b61190160f01b815260020192915050565b6000613355603683614520565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a815275081a5b9d985b1a59081d9bdd1a5b99c81c195c9a5bd960521b602082015260400192915050565b60006133ad603183614520565b60008051602061460e833981519152815270081d9bdd1a5b99c81a5cc818db1bdcd959607a1b602082015260400192915050565b60006133ee603483614520565b60008051602061460e833981519152815273081d9bdd195c88185b1c9958591e481d9bdd195960621b602082015260400192915050565b6000613432603483614520565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a20815273696e76616c696420766f74696e672064656c617960601b602082015260400192915050565b6000613488603583614520565b60008051602061462e8339815191528152741a59081c1c9bdc1bdcd85b081d1a1c995cda1bdb19605a1b602082015260400192915050565b60006134cd604583614520565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b600061353a602f83614520565b7f476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b600061358b602f83614520565b60008051602061462e83398151915281526e696420766f74696e672064656c617960881b602082015260400192915050565b60006135ca603083614520565b7f476f7665726e6f72427261766f3a3a5f73657457686974656c6973744775617281526f6469616e3a2061646d696e206f6e6c7960801b602082015260400192915050565b600061361c604483614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b6000613688602583614520565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b60006136cf604083614520565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381527f686f6c643a20696e76616c69642070726f706f73616c207468726573686f6c64602082015260400192915050565b600061372e604483614520565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b600061379a601183614520565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b60006137c7604383610b0f565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000613832603083614520565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2063616e206f6e81526f6c7920696e697469617465206f6e636560801b602082015260400192915050565b6000613884602c83614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b60006138d2602e83614520565b7f476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e6481526d696e672061646d696e206f6e6c7960901b602082015260400192915050565b6000613922602f83614520565b60008051602061462e83398151915281526e696420636f6d70206164647265737360881b602082015260400192915050565b6000613961602f83614520565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b60006139b2602883614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b60006139fc605983614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527808185b1c9958591e481c195b991a5b99c81c1c9bdc1bdcd85b603a1b604082015260600192915050565b6000613a7d605883614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527708185b1c9958591e481858dd1a5d99481c1c9bdc1bdcd85b60421b604082015260600192915050565b6000611cb7600083614520565b6000613b0a602483614520565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2061646d696e208152636f6e6c7960e01b602082015260400192915050565b6000613b50603f83614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000613baf603983614520565b7f476f7665726e6f72427261766f3a3a5f73657457686974656c6973744163636f815278756e7445787069726174696f6e3a2061646d696e206f6e6c7960381b602082015260400192915050565b6000613c0a603683614520565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b6000613c62603083614520565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381526f686f6c643a2061646d696e206f6e6c7960801b602082015260400192915050565b6000613cb4602983614520565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000613cff603083614520565b60008051602061462e83398151915281526f1a59081d9bdd1a5b99c81c195c9a5bd960821b602082015260400192915050565b6000613d3f601583614520565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b6000613d70602b83614520565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2077686974656c69737481526a32b210383937b837b9b2b960a91b602082015260400192915050565b80516060830190613dc18482612f38565b506020820151613dd46020850182613ded565b506040820151613de76040850182613dff565b50505050565b612db38161454f565b612db38161457e565b612db381614555565b6000611cb782613093565b6000613e1e8261332a565b9150613e2a8285612f4a565b602082019150613e3a8284612f4a565b5060200192915050565b6000611cb7826137ba565b60208101611cb78284612db9565b60408101613e6b8285612daa565b6122696020830184612f41565b60408101613e868285612db9565b6122696020830184612db9565b60408101613e6b8285612db9565b60a08101613eaf8288612db9565b613ebc6020830187612f41565b8181036040830152613ece8186612f5b565b90508181036060830152613ee28185612f5b565b9050613ef16080830184612f41565b9695505050505050565b60a08101613f098288612db9565b613f166020830187612f41565b8181036040830152613f288186612f93565b90508181036060830152613ee28185612f93565b60808082528101613f4d8187612dc2565b90508181036020830152613f618186612eea565b90508181036040830152613f758185612e89565b90508181036060830152613ef18184612e1b565b60208101611cb78284612f38565b60208101611cb78284612f41565b60808101613fb38287612f41565b613fc06020830186612f41565b613fcd6040830185612f41565b6119bf6060830184612db9565b60608101613fe88286612f41565b613ff56020830185612f41565b612a346040830184613ded565b608081016140108287612f41565b61401d6020830186613ded565b61402a6040830185612f41565b6119bf6060830184612f41565b60208101611cb7828461301d565b60208101611cb78284613026565b602080825281016122698184612f5b565b60208082528101611cb781613051565b60208082528101611cb7816130dd565b60208082528101611cb781613132565b60208082528101611cb78161317e565b60208082528101611cb7816131fb565b60208082528101611cb781613248565b60208082528101611cb78161328b565b60208082528101611cb7816132d7565b60208082528101611cb781613348565b60208082528101611cb7816133a0565b60208082528101611cb7816133e1565b60208082528101611cb781613425565b60208082528101611cb78161347b565b60208082528101611cb7816134c0565b60208082528101611cb78161352d565b60208082528101611cb78161357e565b60208082528101611cb7816135bd565b60208082528101611cb78161360f565b60208082528101611cb78161367b565b60208082528101611cb7816136c2565b60208082528101611cb781613721565b60208082528101611cb78161378d565b60208082528101611cb781613825565b60208082528101611cb781613877565b60208082528101611cb7816138c5565b60208082528101611cb781613915565b60208082528101611cb781613954565b60208082528101611cb7816139a5565b60208082528101611cb7816139ef565b60208082528101611cb781613a70565b60208082528101611cb781613afd565b60208082528101611cb781613b43565b60208082528101611cb781613ba2565b60208082528101611cb781613bfd565b60208082528101611cb781613c55565b60208082528101611cb781613ca7565b60208082528101611cb781613cf2565b60208082528101611cb781613d32565b60208082528101611cb781613d63565b60608101611cb78284613db0565b61012081016142f1828c612f41565b6142fe602083018b612daa565b8181036040830152614310818a612dc2565b905081810360608301526143248189612eea565b905081810360808301526143388188612e89565b905081810360a083015261434c8187612e1b565b905061435b60c0830186612f41565b61436860e0830185612f41565b81810361010083015261437b8184612f5b565b9b9a5050505050505050505050565b6101408101614399828d612f41565b6143a6602083018c612db9565b6143b3604083018b612f41565b6143c0606083018a612f41565b6143cd6080830189612f41565b6143da60a0830188612f41565b6143e760c0830187612f41565b6143f460e0830186612f41565b614402610100830185612f38565b61437b610120830184612f38565b60408101613e6b8285612f41565b6080810161442c8288612f41565b6144396020830187613ded565b6144466040830186613df6565b818103606083015261445981848661302f565b979650505050505050565b608081016144728286612f41565b61447f6020830185613ded565b61448c6040830184613df6565b81810360608301526119bf81613af0565b6040518181016001600160401b03811182821017156144bb57600080fd5b604052919050565b60006001600160401b038211156144d957600080fd5b5060209081020190565b60006001600160401b038211156144f957600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611cb782614543565b151590565b80610b0f816145cb565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611cb7825b6000611cb782614529565b6000611cb782614539565b6000611cb782614555565b82818337506000910152565b60005b838110156145b0578181015183820152602001614598565b83811115613de75750506000910152565b601f01601f191690565b6008811061274b57fe5b6145de81614529565b811461274b57600080fd5b6145de81614534565b6145de8161207c565b6145de8161454f565b6145de8161455556fe476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616cb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4a365627a7a723158201f6ec1acac4eca911219c54fc32fcd15f022a7e21c318f7612c8214dd92f73f96c6578706572696d656e74616cf564736f6c63430005110040
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061027f5760003560e01c80635c60da1b1161015c578063d33219b4116100ce578063e48083fe11610087578063e48083fe1461051c578063e9c714f214610524578063f851a4401461052c578063f9d28b8014610534578063fc4eee4214610547578063fe0d94c11461054f5761027f565b8063d33219b4146104be578063da35c664146104c6578063da95691a146104ce578063ddf0b009146104e1578063deaaa7cc146104f4578063e23a9a52146104fc5761027f565b8063a64e024a11610120578063a64e024a14610478578063b112626314610480578063b58131b014610488578063b71d1a0c14610490578063c5a8425d146104a3578063d13f90b4146104ab5761027f565b80635c60da1b14610442578063791f5d23146103535780637b3c71d31461044a5780637bdbe4d01461045d57806399533365146104655761027f565b806325fd935a116101f55780633af32abf116101b95780633af32abf146103b65780633bccf4fd146103d65780633e4f49e6146103e957806340e58ee5146104095780634d6733d21461041c578063567813881461042f5761027f565b806325fd935a1461035b5780632678224714610363578063328dd9821461037857806338bd0dda1461039b5780633932abb1146103ae5761027f565b806317977c611161024757806317977c611461030a57806317ba1b8b1461031d5780631dfb1b5a1461033057806320606b7014610343578063215809ca1461034b57806324bc1a64146103535761027f565b8063013cf08b1461028457806302a251a3146102b657806306fdde03146102cb5780630ea2d98c146102e0578063109d0af8146102f5575b600080fd5b610297610292366004612c35565b610562565b6040516102ad9a9998979695949392919061438a565b60405180910390f35b6102be6105c5565b6040516102ad9190613f97565b6102d36105cb565b6040516102ad9190614053565b6102f36102ee366004612c35565b6105fe565b005b6102fd6106a8565b6040516102ad9190614037565b6102be610318366004612a16565b6106b7565b6102f361032b366004612c35565b6106c9565b6102f361033e366004612c35565b61076f565b6102be610802565b6102be610819565b6102be61081f565b6102be61082d565b61036b61083d565b6040516102ad9190613e4f565b61038b610386366004612c35565b61084c565b6040516102ad9493929190613f3c565b6102be6103a9366004612a16565b610adb565b6102be610aed565b6103c96103c4366004612a16565b610af3565b6040516102ad9190613f89565b6102f36103e4366004612d1a565b610b14565b6103fc6103f7366004612c35565b610cdd565b6040516102ad9190614045565b6102f3610417366004612c35565b610e62565b6102f361042a366004612ab1565b6111a9565b6102f361043d366004612c83565b611235565b61036b61126d565b6102f3610458366004612cb3565b61127c565b6102be6112ba565b6102f3610473366004612a16565b6112bf565b6102be61133e565b6102be611345565b6102be61134b565b6102f361049e366004612a16565b611351565b61036b6113ce565b6102f36104b9366004612a3c565b6113dd565b6102fd61155c565b6102be61156b565b6102be6104dc366004612aeb565b611571565b6102f36104ef366004612c35565b6119c8565b6102be611c44565b61050f61050a366004612c53565b611c50565b6040516102ad91906142d4565b6102be611cbd565b6102f3611cc2565b61036b611da0565b6102f3610542366004612a16565b611daf565b6102be611ed5565b6102f361055d366004612c35565b611edb565b600a60208190526000918252604090912080546001820154600283015460078401546008850154600986015496860154600b870154600c9097015495976001600160a01b0390951696939592949193919290919060ff808216916101009004168a565b60045481565b60405180604001604052806017815260200176436f6d706f756e6420476f7665726e6f7220427261766f60481b81525081565b6000546001600160a01b031633146106315760405162461bcd60e51b8152600401610628906140a4565b60405180910390fd5b6116808110158015610646575062013b008111155b6106625760405162461bcd60e51b8152600401610628906140e4565b60048054908290556040517f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e88289061069c9083908590614410565b60405180910390a15050565b6009546001600160a01b031681565b600b6020526000908152604090205481565b6000546001600160a01b031633146106f35760405162461bcd60e51b815260040161062890614284565b69d3c21bcecceda1000000811015801561071957506b033b2e3c9fd0803ce80000008111155b6107355760405162461bcd60e51b815260040161062890614194565b60058054908290556040517fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc054619061069c9083908590614410565b6000546001600160a01b031633146107995760405162461bcd60e51b8152600401610628906140c4565b600181101580156107ac575061c4e08111155b6107c85760405162461bcd60e51b815260040161062890614114565b60038054908290556040517fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a939061069c9083908590614410565b60405161080e90613e44565b604051809103902081565b61168081565b69d3c21bcecceda100000081565b6b033b2e3c9fd0803ce800000081565b6001546001600160a01b031681565b6060806060806000600a6000878152602001908152602001600020905080600301816004018260050183600601838054806020026020016040519081016040528092919081815260200182805480156108ce57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116108b0575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561092057602002820191906000526020600020905b81548152602001906001019080831161090c575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b828210156109f35760008481526020908190208301805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156109df5780601f106109b4576101008083540402835291602001916109df565b820191906000526020600020905b8154815290600101906020018083116109c257829003601f168201915b505050505081526020019060010190610948565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015610ac55760008481526020908190208301805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015610ab15780601f10610a8657610100808354040283529160200191610ab1565b820191906000526020600020905b815481529060010190602001808311610a9457829003601f168201915b505050505081526020019060010190610a1a565b5050505090509450945094509450509193509193565b600c6020526000908152604090205481565b60035481565b6001600160a01b0381166000908152600c602052604090205442105b919050565b6000604051610b2290613e44565b604080519182900382208282019091526017825276436f6d706f756e6420476f7665726e6f7220427261766f60481b6020909201919091527f3d9e905142ff365fb68ce863f26a44f5583cf7ec11bcde450555f50b7e1b5614610b8361207a565b30604051602001610b979493929190613fa5565b6040516020818303038152906040528051906020012090506000604051610bbd90613e08565b604051908190038120610bd69189908990602001613fda565b60405160208183030381529060405280519060200120905060008282604051602001610c03929190613e13565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610c409493929190614002565b6020604051602081039080840390855afa158015610c62573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c955760405162461bcd60e51b815260040161062890614144565b806001600160a01b031660008051602061464e8339815191528a8a610cbb858e8e61207f565b604051610cca93929190614464565b60405180910390a2505050505050505050565b60008160075410158015610cf2575060065482115b610d0e5760405162461bcd60e51b815260040161062890614294565b6000828152600a60205260409020600c81015460ff1615610d33576002915050610b0f565b80600701544311610d48576000915050610b0f565b80600801544311610d5d576001915050610b0f565b80600a01548160090154111580610d81575069d3c21bcecceda10000008160090154105b15610d90576003915050610b0f565b6002810154610da3576004915050610b0f565b600c810154610100900460ff1615610dbf576007915050610b0f565b6002810154600854604080516360d143f160e11b81529051610e4893926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b158015610e0b57600080fd5b505afa158015610e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e439190810190612be3565b612270565b4210610e58576006915050610b0f565b6005915050610b0f565b6007610e6d82610cdd565b6007811115610e7857fe5b1415610e965760405162461bcd60e51b815260040161062890614274565b6000818152600a6020526040902060018101546001600160a01b0316331461106d576001810154610ecf906001600160a01b0316610af3565b15610fae576005546009546001838101546001600160a01b039283169263782d6fe192911690610f00904390612295565b6040518363ffffffff1660e01b8152600401610f1d929190613e93565b60206040518083038186803b158015610f3557600080fd5b505afa158015610f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f6d9190810190612d60565b6001600160601b0316108015610f8d5750600d546001600160a01b031633145b610fa95760405162461bcd60e51b8152600401610628906142c4565b61106d565b6005546009546001838101546001600160a01b039283169263782d6fe192911690610fda904390612295565b6040518363ffffffff1660e01b8152600401610ff7929190613e93565b60206040518083038186803b15801561100f57600080fd5b505afa158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110479190810190612d60565b6001600160601b03161061106d5760405162461bcd60e51b815260040161062890614204565b600c8101805460ff1916600117905560005b6003820154811015611179576008546003830180546001600160a01b039092169163591fcdfe9190849081106110b157fe5b6000918252602090912001546004850180546001600160a01b0390921691859081106110d957fe5b90600052602060002001548560050185815481106110f357fe5b9060005260206000200186600601868154811061110c57fe5b9060005260206000200187600201546040518663ffffffff1660e01b815260040161113b959493929190613efb565b600060405180830381600087803b15801561115557600080fd5b505af1158015611169573d6000803e3d6000fd5b50506001909201915061107f9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c8260405161069c9190613f97565b6000546001600160a01b03163314806111cc5750600d546001600160a01b031633145b6111e85760405162461bcd60e51b815260040161062890614264565b6001600160a01b0382166000908152600c602052604090819020829055517f4e7b7545bc5744d0e30425959f4687475774b6c7edad77d24cb51c7d967d45159061069c9084908490613e93565b3360008051602061464e833981519152838361125284838361207f565b60405161126193929190614464565b60405180910390a25050565b6002546001600160a01b031681565b3360008051602061464e833981519152858561129984838361207f565b86866040516112ac95949392919061441e565b60405180910390a250505050565b600a81565b6000546001600160a01b031633146112e95760405162461bcd60e51b815260040161062890614164565b600d80546001600160a01b038381166001600160a01b031983161792839055604051918116927f80a07e73e552148844a9c216d9724212d609cfa54e9c1a2e97203bdd2c4ad3419261069c9285921690613e78565b62013b0081565b61c4e081565b60055481565b6000546001600160a01b0316331461137b5760405162461bcd60e51b815260040161062890614084565b600180546001600160a01b038381166001600160a01b03198316179092556040519116907fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99061069c9083908590613e78565b600d546001600160a01b031681565b6008546001600160a01b0316156114065760405162461bcd60e51b815260040161062890614074565b6000546001600160a01b031633146114305760405162461bcd60e51b815260040161062890614184565b6001600160a01b0385166114565760405162461bcd60e51b8152600401610628906140b4565b6001600160a01b03841661147c5760405162461bcd60e51b8152600401610628906141f4565b6116808310158015611491575062013b008311155b6114ad5760405162461bcd60e51b8152600401610628906142a4565b600182101580156114c0575061c4e08211155b6114dc5760405162461bcd60e51b815260040161062890614154565b69d3c21bcecceda1000000811015801561150257506b033b2e3c9fd0803ce80000008111155b61151e5760405162461bcd60e51b815260040161062890614124565b600880546001600160a01b039687166001600160a01b0319918216179091556009805495909616941693909317909355600455600391909155600555565b6008546001600160a01b031681565b60075481565b6000600654600014156115965760405162461bcd60e51b8152600401610628906140d4565b6005546009546001600160a01b031663782d6fe1336115b6436001612295565b6040518363ffffffff1660e01b81526004016115d3929190613e5d565b60206040518083038186803b1580156115eb57600080fd5b505afa1580156115ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116239190810190612d60565b6001600160601b0316118061163c575061163c33610af3565b6116585760405162461bcd60e51b815260040161062890614254565b8451865114801561166a575083518651145b8015611677575082518651145b6116935760405162461bcd60e51b815260040161062890614174565b85516116b15760405162461bcd60e51b8152600401610628906141d4565b600a865111156116d35760405162461bcd60e51b815260040161062890614214565b336000908152600b602052604090205480156117505760006116f482610cdd565b9050600181600781111561170457fe5b14156117225760405162461bcd60e51b815260040161062890614234565b600081600781111561173057fe5b141561174e5760405162461bcd60e51b815260040161062890614224565b505b600061175e43600354612270565b9050600061176e82600454612270565b600780546001019055905061178161241c565b604051806101c001604052806007548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000815260200160001515815260200160001515815250905080600a6000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020155606082015181600301908051906020019061186b929190612498565b50608082015180516118879160048401916020909101906124fd565b5060a082015180516118a3916005840191602090910190612544565b5060c082015180516118bf91600684019160209091019061259d565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c0160006101000a81548160ff0219169083151502179055506101a082015181600c0160016101000a81548160ff0219169083151502179055509050508060000151600b600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e6040516119b0999897969594939291906142e2565b60405180910390a15193505050505b95945050505050565b60046119d382610cdd565b60078111156119de57fe5b146119fb5760405162461bcd60e51b8152600401610628906141a4565b6000818152600a602090815260408083206008548251630d48571f60e31b81529251919493611a559342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b158015610e0b57600080fd5b905060005b6003830154811015611bfd57611bf5836003018281548110611a7857fe5b6000918252602090912001546004850180546001600160a01b039092169184908110611aa057fe5b9060005260206000200154856005018481548110611aba57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611b485780601f10611b1d57610100808354040283529160200191611b48565b820191906000526020600020905b815481529060010190602001808311611b2b57829003601f168201915b5050505050866006018581548110611b5c57fe5b600091825260209182902001805460408051601f6002600019610100600187161502019094169390930492830185900485028101850190915281815292830182828015611bea5780601f10611bbf57610100808354040283529160200191611bea565b820191906000526020600020905b815481529060010190602001808311611bcd57829003601f168201915b5050505050866122bd565b600101611a5a565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290611c379085908490614410565b60405180910390a1505050565b60405161080e90613e08565b611c586125f6565b506000828152600a602090815260408083206001600160a01b0385168452600d018252918290208251606081018452905460ff8082161515835261010082041692820192909252620100009091046001600160601b0316918101919091525b92915050565b600181565b6001546001600160a01b031633148015611cdb57503315155b611cf75760405162461bcd60e51b8152600401610628906141e4565b60008054600180546001600160a01b038082166001600160a01b03198086168217968790559092169092556040519282169390927ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc92611d5b928692911690613e78565b60405180910390a16001546040517fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99161069c9184916001600160a01b031690613e78565b6000546001600160a01b031681565b6000546001600160a01b03163314611dd95760405162461bcd60e51b815260040161062890614244565b60065415611df95760405162461bcd60e51b8152600401610628906141c4565b806001600160a01b031663da35c6646040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611e3457600080fd5b505af1158015611e48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611e6c9190810190612be3565b600781905560065560085460408051630e18b68160e01b815290516001600160a01b0390921691630e18b6819160048082019260009290919082900301818387803b158015611eba57600080fd5b505af1158015611ece573d6000803e3d6000fd5b5050505050565b60065481565b6005611ee682610cdd565b6007811115611ef157fe5b14611f0e5760405162461bcd60e51b815260040161062890614134565b6000818152600a60205260408120600c8101805461ff001916610100179055905b600382015481101561204a576008546003830180546001600160a01b0390921691630825f38f919084908110611f6157fe5b6000918252602090912001546004850180546001600160a01b039092169185908110611f8957fe5b9060005260206000200154856005018581548110611fa357fe5b90600052602060002001866006018681548110611fbc57fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401611feb959493929190613efb565b600060405180830381600087803b15801561200557600080fd5b505af1158015612019573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120419190810190612c01565b50600101611f2f565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f8260405161069c9190613f97565b465b90565b6000600161208c84610cdd565b600781111561209757fe5b146120b45760405162461bcd60e51b8152600401610628906140f4565b60028260ff1611156120d85760405162461bcd60e51b815260040161062890614064565b6000838152600a602090815260408083206001600160a01b0388168452600d8101909252909120805460ff16156121215760405162461bcd60e51b815260040161062890614104565b600954600783015460405163782d6fe160e01b81526000926001600160a01b03169163782d6fe191612157918b91600401613e93565b60206040518083038186803b15801561216f57600080fd5b505afa158015612183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506121a79190810190612d60565b905060ff85166121d2576121c883600a0154826001600160601b0316612270565b600a840155612228565b8460ff16600114156121ff576121f58360090154826001600160601b0316612270565b6009840155612228565b8460ff16600214156122285761222283600b0154826001600160601b0316612270565b600b8401555b8154600160ff199091161761ff00191661010060ff871602176dffffffffffffffffffffffff00001916620100006001600160601b03831602179091559150505b9392505050565b6000828201838110156122695760405162461bcd60e51b8152600401610628906141b4565b6000828211156122b75760405162461bcd60e51b8152600401610628906142b4565b50900390565b6008546040516001600160a01b039091169063f2b06537906122eb9088908890889088908890602001613ea1565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161231d9190613f97565b60206040518083038186803b15801561233557600080fd5b505afa158015612349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061236d9190810190612bc5565b1561238a5760405162461bcd60e51b815260040161062890614094565b600854604051633a66f90160e01b81526001600160a01b0390911690633a66f901906123c29088908890889088908890600401613ea1565b602060405180830381600087803b1580156123dc57600080fd5b505af11580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124149190810190612be3565b505050505050565b604051806101c001604052806000815260200160006001600160a01b03168152602001600081526020016060815260200160608152602001606081526020016060815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b8280548282559060005260206000209081019282156124ed579160200282015b828111156124ed57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906124b8565b506124f9929150612616565b5090565b828054828255906000526020600020908101928215612538579160200282015b8281111561253857825182559160200191906001019061251d565b506124f992915061263a565b828054828255906000526020600020908101928215612591579160200282015b828111156125915782518051612581918491602090910190612654565b5091602001919060010190612564565b506124f99291506126c1565b8280548282559060005260206000209081019282156125ea579160200282015b828111156125ea57825180516125da918491602090910190612654565b50916020019190600101906125bd565b506124f99291506126e4565b604080516060810182526000808252602082018190529181019190915290565b61207c91905b808211156124f95780546001600160a01b031916815560010161261c565b61207c91905b808211156124f95760008155600101612640565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061269557805160ff1916838001178555612538565b82800160010185558215612538579182018281111561253857825182559160200191906001019061251d565b61207c91905b808211156124f95760006126db8282612707565b506001016126c7565b61207c91905b808211156124f95760006126fe8282612707565b506001016126ea565b50805460018160011615610100020316600290046000825580601f1061272d575061274b565b601f01602090049060005260206000209081019061274b919061263a565b50565b8035611cb7816145d5565b600082601f83011261276a57600080fd5b813561277d612778826144c3565b61449d565b915081818352602084019350602081019050838560208402820111156127a257600080fd5b60005b838110156127ce57816127b8888261274e565b84525060209283019291909101906001016127a5565b5050505092915050565b600082601f8301126127e957600080fd5b81356127f7612778826144c3565b81815260209384019390925082018360005b838110156127ce578135860161281f8882612923565b8452506020928301929190910190600101612809565b600082601f83011261284657600080fd5b8135612854612778826144c3565b81815260209384019390925082018360005b838110156127ce578135860161287c8882612923565b8452506020928301929190910190600101612866565b600082601f8301126128a357600080fd5b81356128b1612778826144c3565b915081818352602084019350602081019050838560208402820111156128d657600080fd5b60005b838110156127ce57816128ec888261290d565b84525060209283019291909101906001016128d9565b8051611cb7816145e9565b8035611cb7816145f2565b8051611cb7816145f2565b600082601f83011261293457600080fd5b8135612942612778826144e3565b9150808252602083016020830185838301111561295e57600080fd5b612969838284614589565b50505092915050565b600082601f83011261298357600080fd5b8151612991612778826144e3565b915080825260208301602083018583830111156129ad57600080fd5b612969838284614595565b60008083601f8401126129ca57600080fd5b5081356001600160401b038111156129e157600080fd5b6020830191508360018202830111156129f957600080fd5b9250929050565b8035611cb7816145fb565b8051611cb781614604565b600060208284031215612a2857600080fd5b6000612a34848461274e565b949350505050565b600080600080600060a08688031215612a5457600080fd5b6000612a60888861274e565b9550506020612a718882890161274e565b9450506040612a828882890161290d565b9350506060612a938882890161290d565b9250506080612aa48882890161290d565b9150509295509295909350565b60008060408385031215612ac457600080fd5b6000612ad0858561274e565b9250506020612ae18582860161290d565b9150509250929050565b600080600080600060a08688031215612b0357600080fd5b85356001600160401b03811115612b1957600080fd5b612b2588828901612759565b95505060208601356001600160401b03811115612b4157600080fd5b612b4d88828901612892565b94505060408601356001600160401b03811115612b6957600080fd5b612b7588828901612835565b93505060608601356001600160401b03811115612b9157600080fd5b612b9d888289016127d8565b92505060808601356001600160401b03811115612bb957600080fd5b612aa488828901612923565b600060208284031215612bd757600080fd5b6000612a348484612902565b600060208284031215612bf557600080fd5b6000612a348484612918565b600060208284031215612c1357600080fd5b81516001600160401b03811115612c2957600080fd5b612a3484828501612972565b600060208284031215612c4757600080fd5b6000612a34848461290d565b60008060408385031215612c6657600080fd5b6000612c72858561290d565b9250506020612ae18582860161274e565b60008060408385031215612c9657600080fd5b6000612ca2858561290d565b9250506020612ae185828601612a00565b60008060008060608587031215612cc957600080fd5b6000612cd5878761290d565b9450506020612ce687828801612a00565b93505060408501356001600160401b03811115612d0257600080fd5b612d0e878288016129b8565b95989497509550505050565b600080600080600060a08688031215612d3257600080fd5b6000612d3e888861290d565b9550506020612d4f88828901612a00565b9450506040612a8288828901612a00565b600060208284031215612d7257600080fd5b6000612a348484612a0b565b6000612d8a8383612db9565b505060200190565b60006122698383612f5b565b6000612d8a8383612f41565b612db381614561565b82525050565b612db381614529565b6000612dcd8261451c565b612dd78185614520565b9350612de28361450a565b8060005b83811015612e10578151612dfa8882612d7e565b9750612e058361450a565b925050600101612de6565b509495945050505050565b6000612e268261451c565b612e308185614520565b935083602082028501612e428561450a565b8060005b85811015612e7c5784840389528151612e5f8582612d92565b9450612e6a8361450a565b60209a909a0199925050600101612e46565b5091979650505050505050565b6000612e948261451c565b612e9e8185614520565b935083602082028501612eb08561450a565b8060005b85811015612e7c5784840389528151612ecd8582612d92565b9450612ed88361450a565b60209a909a0199925050600101612eb4565b6000612ef58261451c565b612eff8185614520565b9350612f0a8361450a565b8060005b83811015612e10578151612f228882612d9e565b9750612f2d8361450a565b925050600101612f0e565b612db381614534565b612db38161207c565b612db3612f568261207c565b61207c565b6000612f668261451c565b612f708185614520565b9350612f80818560208601614595565b612f89816145c1565b9093019392505050565b600081546001811660008114612fb05760018114612fd657613015565b607f6002830416612fc18187614520565b60ff1984168152955050602085019250613015565b60028204612fe48187614520565b9550612fef85614510565b60005b8281101561300e57815488820152600190910190602001612ff2565b8701945050505b505092915050565b612db381614568565b612db381614573565b600061303b8385614520565b9350613048838584614589565b612f89836145c1565b600061305e603283614520565b60008051602061460e83398151915281527120696e76616c696420766f7465207479706560701b602082015260400192915050565b60006130a0602883610b0f565b7f42616c6c6f742875696e743235362070726f706f73616c49642c75696e743820815267737570706f72742960c01b602082015260280192915050565b60006130ea603383614520565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2063616e206f8152726e6c7920696e697469616c697a65206f6e636560681b602082015260400192915050565b600061313f602a83614520565b7f476f7665726e6f72427261766f3a5f73657450656e64696e6741646d696e3a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b600061318b605583614520565b7f476f7665726e6f72427261766f3a3a71756575654f72526576657274496e746581527f726e616c3a206964656e746963616c2070726f706f73616c20616374696f6e20602082015274616c7265616479207175657565642061742065746160581b604082015260600192915050565b6000613208602b83614520565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a81526a2061646d696e206f6e6c7960a81b602082015260400192915050565b6000613255603383614520565b60008051602061462e83398151915281527269642074696d656c6f636b206164647265737360681b602082015260400192915050565b6000613298602a83614520565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a2081526961646d696e206f6e6c7960b01b602082015260400192915050565b60006132e4603183614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20476f7665726e6f7281527020427261766f206e6f742061637469766560781b602082015260400192915050565b6000613337600283610b0f565b61190160f01b815260020192915050565b6000613355603683614520565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e67506572696f643a815275081a5b9d985b1a59081d9bdd1a5b99c81c195c9a5bd960521b602082015260400192915050565b60006133ad603183614520565b60008051602061460e833981519152815270081d9bdd1a5b99c81a5cc818db1bdcd959607a1b602082015260400192915050565b60006133ee603483614520565b60008051602061460e833981519152815273081d9bdd195c88185b1c9958591e481d9bdd195960621b602082015260400192915050565b6000613432603483614520565b7f476f7665726e6f72427261766f3a3a5f736574566f74696e6744656c61793a20815273696e76616c696420766f74696e672064656c617960601b602082015260400192915050565b6000613488603583614520565b60008051602061462e8339815191528152741a59081c1c9bdc1bdcd85b081d1a1c995cda1bdb19605a1b602082015260400192915050565b60006134cd604583614520565b7f476f7665726e6f72427261766f3a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b600061353a602f83614520565b7f476f7665726e6f72427261766f3a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b600061358b602f83614520565b60008051602061462e83398151915281526e696420766f74696e672064656c617960881b602082015260400192915050565b60006135ca603083614520565b7f476f7665726e6f72427261766f3a3a5f73657457686974656c6973744775617281526f6469616e3a2061646d696e206f6e6c7960801b602082015260400192915050565b600061361c604483614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b6000613688602583614520565b7f476f7665726e6f72427261766f3a3a696e697469616c697a653a2061646d696e815264206f6e6c7960d81b602082015260400192915050565b60006136cf604083614520565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381527f686f6c643a20696e76616c69642070726f706f73616c207468726573686f6c64602082015260400192915050565b600061372e604483614520565b7f476f7665726e6f72427261766f3a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b600061379a601183614520565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b60006137c7604383610b0f565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000613832603083614520565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2063616e206f6e81526f6c7920696e697469617465206f6e636560801b602082015260400192915050565b6000613884602c83614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b60006138d2602e83614520565b7f476f7665726e6f72427261766f3a5f61636365707441646d696e3a2070656e6481526d696e672061646d696e206f6e6c7960901b602082015260400192915050565b6000613922602f83614520565b60008051602061462e83398151915281526e696420636f6d70206164647265737360881b602082015260400192915050565b6000613961602f83614520565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b60006139b2602883614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b60006139fc605983614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527808185b1c9958591e481c195b991a5b99c81c1c9bdc1bdcd85b603a1b604082015260600192915050565b6000613a7d605883614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527708185b1c9958591e481858dd1a5d99481c1c9bdc1bdcd85b60421b604082015260600192915050565b6000611cb7600083614520565b6000613b0a602483614520565b7f476f7665726e6f72427261766f3a3a5f696e6974696174653a2061646d696e208152636f6e6c7960e01b602082015260400192915050565b6000613b50603f83614520565b7f476f7665726e6f72427261766f3a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b6000613baf603983614520565b7f476f7665726e6f72427261766f3a3a5f73657457686974656c6973744163636f815278756e7445787069726174696f6e3a2061646d696e206f6e6c7960381b602082015260400192915050565b6000613c0a603683614520565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b6000613c62603083614520565b7f476f7665726e6f72427261766f3a3a5f73657450726f706f73616c546872657381526f686f6c643a2061646d696e206f6e6c7960801b602082015260400192915050565b6000613cb4602983614520565b7f476f7665726e6f72427261766f3a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000613cff603083614520565b60008051602061462e83398151915281526f1a59081d9bdd1a5b99c81c195c9a5bd960821b602082015260400192915050565b6000613d3f601583614520565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b6000613d70602b83614520565b7f476f7665726e6f72427261766f3a3a63616e63656c3a2077686974656c69737481526a32b210383937b837b9b2b960a91b602082015260400192915050565b80516060830190613dc18482612f38565b506020820151613dd46020850182613ded565b506040820151613de76040850182613dff565b50505050565b612db38161454f565b612db38161457e565b612db381614555565b6000611cb782613093565b6000613e1e8261332a565b9150613e2a8285612f4a565b602082019150613e3a8284612f4a565b5060200192915050565b6000611cb7826137ba565b60208101611cb78284612db9565b60408101613e6b8285612daa565b6122696020830184612f41565b60408101613e868285612db9565b6122696020830184612db9565b60408101613e6b8285612db9565b60a08101613eaf8288612db9565b613ebc6020830187612f41565b8181036040830152613ece8186612f5b565b90508181036060830152613ee28185612f5b565b9050613ef16080830184612f41565b9695505050505050565b60a08101613f098288612db9565b613f166020830187612f41565b8181036040830152613f288186612f93565b90508181036060830152613ee28185612f93565b60808082528101613f4d8187612dc2565b90508181036020830152613f618186612eea565b90508181036040830152613f758185612e89565b90508181036060830152613ef18184612e1b565b60208101611cb78284612f38565b60208101611cb78284612f41565b60808101613fb38287612f41565b613fc06020830186612f41565b613fcd6040830185612f41565b6119bf6060830184612db9565b60608101613fe88286612f41565b613ff56020830185612f41565b612a346040830184613ded565b608081016140108287612f41565b61401d6020830186613ded565b61402a6040830185612f41565b6119bf6060830184612f41565b60208101611cb7828461301d565b60208101611cb78284613026565b602080825281016122698184612f5b565b60208082528101611cb781613051565b60208082528101611cb7816130dd565b60208082528101611cb781613132565b60208082528101611cb78161317e565b60208082528101611cb7816131fb565b60208082528101611cb781613248565b60208082528101611cb78161328b565b60208082528101611cb7816132d7565b60208082528101611cb781613348565b60208082528101611cb7816133a0565b60208082528101611cb7816133e1565b60208082528101611cb781613425565b60208082528101611cb78161347b565b60208082528101611cb7816134c0565b60208082528101611cb78161352d565b60208082528101611cb78161357e565b60208082528101611cb7816135bd565b60208082528101611cb78161360f565b60208082528101611cb78161367b565b60208082528101611cb7816136c2565b60208082528101611cb781613721565b60208082528101611cb78161378d565b60208082528101611cb781613825565b60208082528101611cb781613877565b60208082528101611cb7816138c5565b60208082528101611cb781613915565b60208082528101611cb781613954565b60208082528101611cb7816139a5565b60208082528101611cb7816139ef565b60208082528101611cb781613a70565b60208082528101611cb781613afd565b60208082528101611cb781613b43565b60208082528101611cb781613ba2565b60208082528101611cb781613bfd565b60208082528101611cb781613c55565b60208082528101611cb781613ca7565b60208082528101611cb781613cf2565b60208082528101611cb781613d32565b60208082528101611cb781613d63565b60608101611cb78284613db0565b61012081016142f1828c612f41565b6142fe602083018b612daa565b8181036040830152614310818a612dc2565b905081810360608301526143248189612eea565b905081810360808301526143388188612e89565b905081810360a083015261434c8187612e1b565b905061435b60c0830186612f41565b61436860e0830185612f41565b81810361010083015261437b8184612f5b565b9b9a5050505050505050505050565b6101408101614399828d612f41565b6143a6602083018c612db9565b6143b3604083018b612f41565b6143c0606083018a612f41565b6143cd6080830189612f41565b6143da60a0830188612f41565b6143e760c0830187612f41565b6143f460e0830186612f41565b614402610100830185612f38565b61437b610120830184612f38565b60408101613e6b8285612f41565b6080810161442c8288612f41565b6144396020830187613ded565b6144466040830186613df6565b818103606083015261445981848661302f565b979650505050505050565b608081016144728286612f41565b61447f6020830185613ded565b61448c6040830184613df6565b81810360608301526119bf81613af0565b6040518181016001600160401b03811182821017156144bb57600080fd5b604052919050565b60006001600160401b038211156144d957600080fd5b5060209081020190565b60006001600160401b038211156144f957600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611cb782614543565b151590565b80610b0f816145cb565b6001600160a01b031690565b60ff1690565b6001600160601b031690565b6000611cb7825b6000611cb782614529565b6000611cb782614539565b6000611cb782614555565b82818337506000910152565b60005b838110156145b0578181015183820152602001614598565b83811115613de75750506000910152565b601f01601f191690565b6008811061274b57fe5b6145de81614529565b811461274b57600080fd5b6145de81614534565b6145de8161207c565b6145de8161454f565b6145de8161455556fe476f7665726e6f72427261766f3a3a63617374566f7465496e7465726e616c3a476f7665726e6f72427261766f3a3a696e697469616c697a653a20696e76616cb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4a365627a7a723158201f6ec1acac4eca911219c54fc32fcd15f022a7e21c318f7612c8214dd92f73f96c6578706572696d656e74616cf564736f6c63430005110040
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.