Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 383 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Execute | 21065655 | 97 days ago | IN | 0 ETH | 0.00223948 | ||||
Vote | 21065650 | 97 days ago | IN | 0 ETH | 0.00196684 | ||||
Proposal | 21029852 | 102 days ago | IN | 0 ETH | 0.00452437 | ||||
Proposal | 20684423 | 150 days ago | IN | 0 ETH | 0.00067393 | ||||
Execute | 19969851 | 250 days ago | IN | 0 ETH | 0.00139076 | ||||
Vote | 19969830 | 250 days ago | IN | 0 ETH | 0.00144678 | ||||
Vote | 19957516 | 252 days ago | IN | 0 ETH | 0.00027929 | ||||
Vote | 19937042 | 255 days ago | IN | 0 ETH | 0.00048454 | ||||
Vote | 19933123 | 255 days ago | IN | 0 ETH | 0.00116901 | ||||
Vote | 19931137 | 256 days ago | IN | 0 ETH | 0.00081506 | ||||
Vote | 19926020 | 256 days ago | IN | 0 ETH | 0.00182532 | ||||
Proposal | 19919500 | 257 days ago | IN | 0 ETH | 0.00652357 | ||||
Execute | 19668414 | 292 days ago | IN | 0 ETH | 0.00096114 | ||||
Vote | 19667725 | 292 days ago | IN | 0 ETH | 0.00076033 | ||||
Vote | 19667629 | 292 days ago | IN | 0 ETH | 0.00091652 | ||||
Vote | 19667190 | 292 days ago | IN | 0 ETH | 0.00045368 | ||||
Vote | 19667187 | 292 days ago | IN | 0 ETH | 0.00068405 | ||||
Vote | 19666434 | 293 days ago | IN | 0 ETH | 0.00066022 | ||||
Vote | 19666422 | 293 days ago | IN | 0 ETH | 0.00069477 | ||||
Vote | 19666416 | 293 days ago | IN | 0 ETH | 0.00066867 | ||||
Vote | 19665095 | 293 days ago | IN | 0 ETH | 0.00062083 | ||||
Vote | 19665016 | 293 days ago | IN | 0 ETH | 0.00059712 | ||||
Vote | 19664641 | 293 days ago | IN | 0 ETH | 0.00059538 | ||||
Vote | 19664425 | 293 days ago | IN | 0 ETH | 0.00054776 | ||||
Vote | 19664269 | 293 days ago | IN | 0 ETH | 0.00057735 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
ArcadeCoreVoting
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 999999 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0 /* solhint-disable */ pragma solidity 0.8.18; import "./external/council/interfaces/IVotingVault.sol"; import "./external/council/libraries/Authorizable.sol"; import "./external/council/libraries/ReentrancyBlock.sol"; import "./external/council/interfaces/ICoreVoting.sol"; contract ArcadeCoreVoting is Authorizable, ReentrancyBlock, ICoreVoting { // if a function selector does not have a set quorum we use this default quorum uint256 public baseQuorum; // Assumes avg block time of 12.06 seconds. May be longer or shorter due // to ice ages or short term changes in hash power. uint256 public constant DAY_IN_BLOCKS = 7150; // minimum time a proposal must be active for before executing // Default to 3 days, this avoids weekend surprise proposals uint256 public lockDuration = DAY_IN_BLOCKS * 3; // The number of blocks after the proposal is unlocked during which // voting can continue. Max vote time = lockDuration + extraVoteTime // Default to ~5 days of blocks, ie 8 days max vote time uint256 public extraVoteTime = DAY_IN_BLOCKS * 5; // minimum amount of voting power required to submit a proposal uint256 public minProposalPower; // number of proposals created uint256 public proposalCount; // toggle to allow new voting vaults to be approved or not // can only be set upon deployment bool public immutable allowNewVotingVaults; // mapping of address and selector to quorum mapping(address => mapping(bytes4 => uint256)) private _quorums; /// @notice Override of the getter for the 'quorums' mapping which returns the default /// quorum when the quorum is not set. /// @param target the contract for which the quorum is set /// @param functionSelector the function which is callable /// @return The quorum needed to pass the function at this point in time function quorums(address target, bytes4 functionSelector) public view returns (uint256) { uint256 storedQuorum = _quorums[target][functionSelector]; if (storedQuorum == 0) { return baseQuorum; } else { return storedQuorum; } } // stores approved voting vaults mapping(address => bool) public override approvedVaults; // proposal storage with the proposalID as key mapping(uint256 => Proposal) public proposals; // mapping of addresses and proposalIDs to vote struct representing // the voting actions taken for each proposal mapping(address => mapping(uint256 => Vote)) public votes; enum Ballot { YES, NO, MAYBE } struct Proposal { // hash of this proposal's intended function calls bytes32 proposalHash; // block of the proposal creation uint128 created; // timestamp when the proposal can execute uint128 unlock; // expiration time of a proposal uint128 expiration; // the quorum required for the proposal to execute uint128 quorum; // [yes, no, maybe] voting power uint128[3] votingPower; // Timestamp after which if the call has not been executed it cannot be executed uint128 lastCall; } struct Vote { // voting power of the vote uint128 votingPower; // direction of the vote Ballot castBallot; } event ProposalCreated(uint256 proposalId, uint256 created, uint256 execution, uint256 expiration); event ProposalExecuted(uint256 proposalId); event Voted(address indexed voter, uint256 indexed proposalId, Vote vote); /// @notice constructor /// @param _timelock Timelock contract. /// @param _baseQuorum Default quorum for all functions with no set quorum. /// @param _minProposalPower Minimum voting power needed to submit a proposal. /// @param _gsc governance steering committee contract. /// @param votingVaults Initial voting vaults to approve. constructor( address _timelock, uint256 _baseQuorum, uint256 _minProposalPower, address _gsc, address[] memory votingVaults, bool _allowNewVotingVaults ) Authorizable() { baseQuorum = _baseQuorum; minProposalPower = _minProposalPower; allowNewVotingVaults = _allowNewVotingVaults; for (uint256 i = 0; i < votingVaults.length; i++) { approvedVaults[votingVaults[i]] = true; } setOwner(address(_timelock)); _authorize(_gsc); } /// @notice Create a new proposal /// @dev all provided votingVaults must be approved vaults `approvedVaults`. /// @param votingVaults voting vaults to draw voting power from. /// @param extraVaultData an encoded list of extra data to provide to vaults /// @param targets list of target addresses the timelock contract will interact with. /// @param calldatas execution calldata for each target. /// @param lastCall timestamp after which this cannot be executed, note should be /// more than the voting time period /// @param ballot vote direction (yes, no, maybe) function proposal( address[] calldata votingVaults, bytes[] calldata extraVaultData, address[] calldata targets, bytes[] calldata calldatas, uint256 lastCall, Ballot ballot ) external { require(targets.length == calldatas.length, "array length mismatch"); require(targets.length != 0, "empty proposal"); // the hash is only used to verify the proposal data, proposals are tracked by ID // so there is no need to hash with proposalCount nonce. bytes32 proposalHash = keccak256(abi.encode(targets, calldatas)); // get the quorum requirement for this proposal. The quorum requirement is equal to // the greatest quorum item in the proposal uint256 quorum; for (uint256 i = 0; i < targets.length; i++) { // function selector should be the first 4 bytes of the calldata bytes4 selector = _getSelector(calldatas[i]); uint256 unitQuorum = _quorums[targets[i]][selector]; // don't assume baseQuorum is the highest unitQuorum = unitQuorum == 0 ? baseQuorum : unitQuorum; if (unitQuorum > quorum) { quorum = unitQuorum; } } // We check that the expiration is possibly valid require(lastCall > block.number + lockDuration + extraVoteTime, "expires before voting ends"); proposals[proposalCount] = Proposal( proposalHash, // Note we use blocknumber - 1 here as a flash loan mitigation. uint128(block.number - 1), uint128(block.number + lockDuration), uint128(block.number + lockDuration + extraVoteTime), uint128(quorum), proposals[proposalCount].votingPower, uint128(lastCall) ); uint256 votingPower = vote(votingVaults, extraVaultData, proposalCount, ballot); // the proposal quorum is the lowest of minProposalPower and the proposal quorum // because it is awkward for the proposal to require more voting power than // the execution uint256 minPower = quorum <= minProposalPower ? quorum : minProposalPower; // the GSC (governance steering comity) contract does not have a voting power requirement // to submit a proposal if (!isAuthorized(msg.sender)) { require(votingPower >= minPower, "insufficient voting power"); } emit ProposalCreated( proposalCount, block.number, block.number + lockDuration, block.number + lockDuration + extraVoteTime ); proposalCount += 1; } /// @notice Votes for a new proposal. /// @dev all provided votingVaults must be approved vaults `approvedVaults`. /// Addresses can re-vote, but the previous vote's effect will be negated. /// @param votingVaults voting vaults to draw voting power from. /// @param extraVaultData extra bytes data to give to each vault /// @param proposalId proposal identifier. /// @param ballot vote direction (yes, no, maybe) /// @return the user's voting power function vote( address[] memory votingVaults, bytes[] memory extraVaultData, uint256 proposalId, Ballot ballot ) public returns (uint256) { // No votes after the vote period is over require(proposals[proposalId].created != 0, "proposal does not exist"); require(block.number <= proposals[proposalId].expiration, "Expired"); uint128 votingPower; for (uint256 i = 0; i < votingVaults.length; i++) { // ensure there are no voting vault duplicates for (uint256 j = i + 1; j < votingVaults.length; j++) { require(votingVaults[i] != votingVaults[j], "duplicate vault"); } require(approvedVaults[votingVaults[i]], "unverified vault"); votingPower += uint128( IVotingVault(votingVaults[i]).queryVotePower( msg.sender, proposals[proposalId].created, extraVaultData[i] ) ); } // if a user has already voted, undo their previous vote. // NOTE: A new vote can have less voting power if (votes[msg.sender][proposalId].votingPower > 0) { proposals[proposalId].votingPower[uint256(votes[msg.sender][proposalId].castBallot)] -= votes[msg.sender][ proposalId ].votingPower; } votes[msg.sender][proposalId] = Vote(votingPower, ballot); proposals[proposalId].votingPower[uint256(ballot)] += votingPower; // Emit an event to track this info emit Voted(msg.sender, proposalId, votes[msg.sender][proposalId]); return votingPower; } /// @notice Execute a proposal. /// @param proposalId proposal identifier. /// @param targets list of target addresses the timelock contract will interact with. /// @param calldatas execution calldata for each target. function execute(uint256 proposalId, address[] memory targets, bytes[] memory calldatas) external nonReentrant { // We have to execute after min voting period require(block.number >= proposals[proposalId].unlock, "not unlocked"); // If executed the proposal will be deleted and this will be zero require(proposals[proposalId].unlock != 0, "Previously executed"); // We cannot execute if the proposal has expired require(block.number < proposals[proposalId].lastCall, "past last call timestamp"); // ensure the data matches the hash require(keccak256(abi.encode(targets, calldatas)) == proposals[proposalId].proposalHash, "hash mismatch"); uint128[3] memory results = proposals[proposalId].votingPower; // if there are enough votes to meet quorum and there are more yes votes than no votes // then the proposal is executed bool passesQuorum = results[0] + results[1] + results[2] >= proposals[proposalId].quorum; bool majorityInFavor = results[0] > results[1]; require(passesQuorum && majorityInFavor, "Cannot execute"); // Execute a package of low level calls // NOTE - All of them must succeed for the package to succeed. for (uint256 i = 0; i < targets.length; i++) { (bool success, ) = targets[i].call(calldatas[i]); require(success, "Call failed"); } // Notification of proposal execution emit ProposalExecuted(proposalId); // delete proposal for some gas savings, // Proposals are only deleted when they are actually executed, failed proposals // are never deleted delete proposals[proposalId]; } /// @notice gets the current voting power for a proposal /// @param proposalId The proposal's ID. function getProposalVotingPower(uint256 proposalId) external view returns (uint128[3] memory) { return proposals[proposalId].votingPower; } /// @notice Sets a quorum for a specific address and selector. /// @param target Target contract address. /// @param selector Function selector. /// @param quorum Fraction to set quorum to. function setCustomQuorum(address target, bytes4 selector, uint256 quorum) external onlyOwner { _quorums[target][selector] = quorum; } /// @notice Updates the status of a voting vault. /// @param vault Address of the voting vault. /// @param isValid True to be valid, false otherwise. function changeVaultStatus(address vault, bool isValid) external onlyOwner { require(allowNewVotingVaults, "new vaults not allowed"); approvedVaults[vault] = isValid; } /// @notice Updates the default quorum. /// @param quorum New base quorum. function setDefaultQuorum(uint256 quorum) external onlyOwner { baseQuorum = quorum; } /// @notice Updates the minimum voting power needed to submit a proposal. /// @param _minProposalPower Minimum voting power needed to submit a proposal. function setMinProposalPower(uint256 _minProposalPower) external onlyOwner { minProposalPower = _minProposalPower; } /// @notice Updates the lock duration of a proposal. /// @param _lockDuration New lock duration. function setLockDuration(uint256 _lockDuration) external onlyOwner { lockDuration = _lockDuration; } /// @notice Updates the extra voting period /// @param _extraVoteTime New extra voting time function changeExtraVotingTime(uint256 _extraVoteTime) external onlyOwner { extraVoteTime = _extraVoteTime; } /// @notice Internal helper function to get the function selector of a calldata string. function _getSelector(bytes memory _calldata) internal pure returns (bytes4 out) { assembly { out := and(mload(add(_calldata, 32)), 0xFFFFFFFFF0000000000000000000000000000000000000000000000000000000) } } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.3; interface ICoreVoting { /// @notice A method auto generated from a public storage mapping, looks /// up which vault addresses are approved by core voting /// @param vault the address to check if it is an approved vault /// @return true if approved false if not approved function approvedVaults(address vault) external view returns (bool); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.3; interface IVotingVault { /// @notice Attempts to load the voting power of a user /// @param user The address we want to load the voting power of /// @param blockNumber the block number we want the user's voting power at /// @param extraData Abi encoded optional extra data used by some vaults, such as merkle proofs /// @return the number of votes function queryVotePower( address user, uint256 blockNumber, bytes calldata extraData ) external returns (uint256); }
// SPDX-License-Identifier: Apache-2.0 pragma solidity >=0.7.0; contract Authorizable { // This contract allows a flexible authorization scheme // The owner who can change authorization status address public owner; // A mapping from an address to its authorization status mapping(address => bool) public authorized; /// @dev We set the deployer to the owner constructor() { owner = msg.sender; } /// @dev This modifier checks if the msg.sender is the owner modifier onlyOwner() { require(msg.sender == owner, "Sender not owner"); _; } /// @dev This modifier checks if an address is authorized modifier onlyAuthorized() { require(isAuthorized(msg.sender), "Sender not Authorized"); _; } /// @dev Returns true if an address is authorized /// @param who the address to check /// @return true if authorized false if not function isAuthorized(address who) public view returns (bool) { return authorized[who]; } /// @dev Privileged function authorize an address /// @param who the address to authorize function authorize(address who) external onlyOwner() { _authorize(who); } /// @dev Privileged function to de authorize an address /// @param who The address to remove authorization from function deauthorize(address who) external onlyOwner() { authorized[who] = false; } /// @dev Function to change owner /// @param who The new owner address function setOwner(address who) public onlyOwner() { owner = who; } /// @dev Inheritable function which authorizes someone /// @param who the address to authorize function _authorize(address who) internal { authorized[who] = true; } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.3; contract ReentrancyBlock { // A storage slot for the reentrancy flag bool private _entered; // Will use a state flag to prevent this function from being called back into modifier nonReentrant() { // Check the state variable before the call is entered require(!_entered, "Reentrancy"); // Store that the function has been entered _entered = true; // Run the function code _; // Clear the state _entered = false; } }
{ "metadata": { "bytecodeHash": "none" }, "optimizer": { "enabled": true, "runs": 999999 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_timelock","type":"address"},{"internalType":"uint256","name":"_baseQuorum","type":"uint256"},{"internalType":"uint256","name":"_minProposalPower","type":"uint256"},{"internalType":"address","name":"_gsc","type":"address"},{"internalType":"address[]","name":"votingVaults","type":"address[]"},{"internalType":"bool","name":"_allowNewVotingVaults","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"created","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"execution","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":true,"internalType":"uint256","name":"proposalId","type":"uint256"},{"components":[{"internalType":"uint128","name":"votingPower","type":"uint128"},{"internalType":"enum ArcadeCoreVoting.Ballot","name":"castBallot","type":"uint8"}],"indexed":false,"internalType":"struct ArcadeCoreVoting.Vote","name":"vote","type":"tuple"}],"name":"Voted","type":"event"},{"inputs":[],"name":"DAY_IN_BLOCKS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowNewVotingVaults","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"approvedVaults","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseQuorum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_extraVoteTime","type":"uint256"}],"name":"changeExtraVotingTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"bool","name":"isValid","type":"bool"}],"name":"changeVaultStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"deauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"extraVoteTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getProposalVotingPower","outputs":[{"internalType":"uint128[3]","name":"","type":"uint128[3]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minProposalPower","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"votingVaults","type":"address[]"},{"internalType":"bytes[]","name":"extraVaultData","type":"bytes[]"},{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"uint256","name":"lastCall","type":"uint256"},{"internalType":"enum ArcadeCoreVoting.Ballot","name":"ballot","type":"uint8"}],"name":"proposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"bytes32","name":"proposalHash","type":"bytes32"},{"internalType":"uint128","name":"created","type":"uint128"},{"internalType":"uint128","name":"unlock","type":"uint128"},{"internalType":"uint128","name":"expiration","type":"uint128"},{"internalType":"uint128","name":"quorum","type":"uint128"},{"internalType":"uint128","name":"lastCall","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"functionSelector","type":"bytes4"}],"name":"quorums","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"},{"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"setCustomQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"setDefaultQuorum","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lockDuration","type":"uint256"}],"name":"setLockDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minProposalPower","type":"uint256"}],"name":"setMinProposalPower","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"votingVaults","type":"address[]"},{"internalType":"bytes[]","name":"extraVaultData","type":"bytes[]"},{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"enum ArcadeCoreVoting.Ballot","name":"ballot","type":"uint8"}],"name":"vote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"votes","outputs":[{"internalType":"uint128","name":"votingPower","type":"uint128"},{"internalType":"enum ArcadeCoreVoting.Ballot","name":"castBallot","type":"uint8"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a060405262000013611bee6003620001b5565b60045562000025611bee6005620001b5565b6005553480156200003557600080fd5b50604051620030ac380380620030ac833981016040819052620000589162000219565b600080546001600160a01b03191633178155600386905560068590558115156080525b8251811015620000e757600160096000858481518110620000a057620000a062000338565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620000de816200034e565b9150506200007b565b50620000f3866200012b565b6200011f836001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b5050505050506200036a565b6000546001600160a01b031633146200017d5760405162461bcd60e51b815260206004820152601060248201526f29b2b73232b9103737ba1037bbb732b960811b604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620001cf57620001cf6200019f565b92915050565b80516001600160a01b0381168114620001ed57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b80518015158114620001ed57600080fd5b60008060008060008060c087890312156200023357600080fd5b6200023e87620001d5565b95506020808801519550604088015194506200025d60608901620001d5565b60808901519094506001600160401b03808211156200027b57600080fd5b818a0191508a601f8301126200029057600080fd5b815181811115620002a557620002a5620001f2565b8060051b604051601f19603f83011681018181108582111715620002cd57620002cd620001f2565b60405291825284820192508381018501918d831115620002ec57600080fd5b938501935b8285101562000315576200030585620001d5565b84529385019392850192620002f1565b8097505050505050506200032c60a0880162000208565b90509295509295509295565b634e487b7160e01b600052603260045260246000fd5b6000600182016200036357620003636200019f565b5060010190565b608051612d1f6200038d6000396000818161031f0152610e540152612d1f6000f3fe608060405234801561001057600080fd5b50600436106101b85760003560e01c80638da5cb5b116100f9578063bd9c75a511610097578063d4b8756711610071578063d4b87567146104db578063da35c664146104e4578063f131e5eb146104ed578063fe9fbb80146104f657600080fd5b8063bd9c75a514610495578063c52ea3db146104a8578063d1b67627146104c857600080fd5b8063aa35fb51116100d3578063aa35fb5114610429578063af7a060c1461043c578063b6a5d7de1461045f578063b91816111461047257600080fd5b80638da5cb5b146103775780639f2524ee146103bc578063a4c950771461042057600080fd5b806327c97fa5116101665780634eb665af116101405780634eb665af146103075780635a4a60d81461031a578063771a5323146103515780637d5709eb1461036457600080fd5b806327c97fa5146102ce578063341a7b42146102e15780634392b99c146102f457600080fd5b806313af40351161019757806313af40351461029f57806315126a3d146102b25780631c39c96c146102c557600080fd5b806214d11d146101bd578063013cf08b146101d25780630455444314610288575b600080fd5b6101d06101cb3660046121b3565b61052f565b005b61023c6101e03660046121b3565b600a60205260009081526040902080546001820154600283015460059093015491926fffffffffffffffffffffffffffffffff808316937001000000000000000000000000000000009384900482169383831693048216911686565b604080519687526fffffffffffffffffffffffffffffffff9586166020880152938516938601939093529083166060850152821660808401521660a082015260c0015b60405180910390f35b61029160045481565b60405190815260200161027f565b6101d06102ad3660046121f5565b6105ba565b6101d06102c0366004612435565b610682565b61029160035481565b6101d06102dc3660046121f5565b610d04565b6101d06102ef3660046124a2565b610dd1565b6101d061030236600461250e565b610f2f565b6101d06103153660046121b3565b611006565b6103417f000000000000000000000000000000000000000000000000000000000000000081565b604051901515815260200161027f565b61029161035f36600461254a565b61108c565b6101d06103723660046121b3565b6110ff565b6000546103979073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161027f565b6104126103ca36600461257d565b600b6020908152600092835260408084209091529082529020546fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000900460ff1682565b60405161027f929190612611565b61029160055481565b610291610437366004612646565b611185565b61034161044a3660046121f5565b60096020526000908152604090205460ff1681565b6101d061046d3660046121f5565b611853565b6103416104803660046121f5565b60016020526000908152604090205460ff1681565b6101d06104a3366004612710565b61192d565b6104bb6104b63660046121b3565b611f85565b60405161027f91906127ed565b6101d06104d63660046121b3565b612011565b61029160065481565b61029160075481565b610291611bee81565b6103416105043660046121f5565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064015b60405180910390fd5b600555565b60005473ffffffffffffffffffffffffffffffffffffffff16331461063b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025460ff16156106ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5265656e7472616e63790000000000000000000000000000000000000000000060448201526064016105ac565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556000848152600a6020526040902001546fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909104164310156107bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f7420756e6c6f636b6564000000000000000000000000000000000000000060448201526064016105ac565b6000838152600a602052604081206001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16900361085d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50726576696f75736c792065786563757465640000000000000000000000000060448201526064016105ac565b6000838152600a60205260409020600501546fffffffffffffffffffffffffffffffff1643106108e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f70617374206c6173742063616c6c2074696d657374616d70000000000000000060448201526064016105ac565b6000838152600a602090815260409182902054915161090c91859185910161289e565b6040516020818303038152906040528051906020012014610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f68617368206d69736d617463680000000000000000000000000000000000000060448201526064016105ac565b6000838152600a60205260408082208151606081019283905291600391820191908285855b82829054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019060100190602082600f010492830192600103820291508084116109ae575050506000888152600a60209081526040808320600201549087015191870151875197985092967001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff169550909350610a5d92506129c8565b610a6791906129c8565b6fffffffffffffffffffffffffffffffff1610159050600082600160200201516fffffffffffffffffffffffffffffffff1683600060200201516fffffffffffffffffffffffffffffffff16119050818015610ac05750805b610b26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f43616e6e6f74206578656375746500000000000000000000000000000000000060448201526064016105ac565b60005b8551811015610c4b576000868281518110610b4657610b4661296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16868381518110610b7657610b7661296a565b6020026020010151604051610b8b91906129f1565b6000604051808303816000865af19150503d8060008114610bc8576040519150601f19603f3d011682016040523d82523d6000602084013e610bcd565b606091505b5050905080610c38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f43616c6c206661696c656400000000000000000000000000000000000000000060448201526064016105ac565b5080610c4381612a0d565b915050610b29565b506040518681527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f9060200160405180910390a150505060009283525050600a6020526040812081815560018101829055600280820183905560038201839055600482019290925560050180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b7f0000000000000000000000000000000000000000000000000000000000000000610ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e6577207661756c7473206e6f7420616c6c6f7765640000000000000000000060448201526064016105ac565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526008602090815260408083207fffffffff0000000000000000000000000000000000000000000000000000000090941683529290522055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600455565b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602090815260408083207fffffffff00000000000000000000000000000000000000000000000000000000851684529091528120548082036110f05750506003546110f9565b90506110f9565b505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600355565b6000828152600a60205260408120600101546fffffffffffffffffffffffffffffffff168103611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f70726f706f73616c20646f6573206e6f7420657869737400000000000000000060448201526064016105ac565b6000838152600a60205260409020600201546fffffffffffffffffffffffffffffffff1643111561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f457870697265640000000000000000000000000000000000000000000000000060448201526064016105ac565b6000805b86518110156115505760006112b8826001612a45565b90505b875181101561139d578781815181106112d6576112d661296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168883815181106113065761130661296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361138b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6475706c6963617465207661756c74000000000000000000000000000000000060448201526064016105ac565b8061139581612a0d565b9150506112bb565b50600960008883815181106113b4576113b461296a565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff1661144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f756e7665726966696564207661756c740000000000000000000000000000000060448201526064016105ac565b8681815181106114605761146061296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663e91f323533600a600089815260200190815260200160002060010160009054906101000a90046fffffffffffffffffffffffffffffffff168985815181106114c9576114c961296a565b60200260200101516040518463ffffffff1660e01b81526004016114ef93929190612a58565b6020604051808303816000875af115801561150e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115329190612aa8565b61153c90836129c8565b91508061154881612a0d565b9150506112a2565b50336000908152600b602090815260408083208784529091529020546fffffffffffffffffffffffffffffffff161561166757336000908152600b6020908152604080832087845280835281842054600a845291909320929091526fffffffffffffffffffffffffffffffff81169160030190700100000000000000000000000000000000900460ff1660028111156115eb576115eb6125a7565b600381106115fb576115fb61296a565b600291828204019190066010028282829054906101000a90046fffffffffffffffffffffffffffffffff166116309190612ac1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b6040518060400160405280826fffffffffffffffffffffffffffffffff16815260200184600281111561169c5761169c6125a7565b9052336000908152600b602090815260408083208884528252909120825181546fffffffffffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffff0000000000000000000000000000000082168117835592840151919283917fffffffffffffffffffffffffffffff00000000000000000000000000000000001617700100000000000000000000000000000000836002811115611746576117466125a7565b021790555050506000848152600a602052604090208190600301846002811115611772576117726125a7565b600381106117825761178261296a565b600291828204019190066010028282829054906101000a90046fffffffffffffffffffffffffffffffff166117b791906129c8565b82546fffffffffffffffffffffffffffffffff9182166101009390930a928302919092021990911617905550336000818152600b602090815260408083208884529091529081902090518692917f79597d31752b5a254be8f219c055ebfefe925e085d99c7b04b0883298b356951916118309190612aea565b60405180910390a36fffffffffffffffffffffffffffffffff1695945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146118d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b61192a8173ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b50565b848314611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6172726179206c656e677468206d69736d61746368000000000000000000000060448201526064016105ac565b6000859003611a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f656d7074792070726f706f73616c00000000000000000000000000000000000060448201526064016105ac565b600086868686604051602001611a1a9493929190612b63565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506000805b87811015611b7b576000611ac1888884818110611a7557611a7561296a565b9050602002810190611a879190612c8d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061209792505050565b90506000600860008c8c86818110611adb57611adb61296a565b9050602002016020810190611af091906121f5565b73ffffffffffffffffffffffffffffffffffffffff168152602080820192909252604090810160009081207fffffffff000000000000000000000000000000000000000000000000000000008616825290925290205490508015611b545780611b58565b6003545b905083811115611b66578093505b50508080611b7390612a0d565b915050611a56565b50600554600454611b8c9043612a45565b611b969190612a45565b8411611bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f65787069726573206265666f726520766f74696e6720656e647300000000000060448201526064016105ac565b6040518060e00160405280838152602001600143611c1c9190612cf2565b6fffffffffffffffffffffffffffffffff16815260200160045443611c419190612a45565b6fffffffffffffffffffffffffffffffff16815260200160055460045443611c699190612a45565b611c739190612a45565b6fffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff168152602001600a60006007548152602001908152602001600020600301600380602002604051908101604052809291908260038015611d35576020028201916000905b82829054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019060100190602082600f01049283019260010382029150808411611ce05790505b50505091835250506fffffffffffffffffffffffffffffffff8681166020928301526007546000908152600a835260409081902084518155928401519084015190821670010000000000000000000000000000000091831682021760018401556060840151608085015190831692160217600282015560a0820151611dc090600380840191906120c0565b5060c08201518160050160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050506000611e518d8d80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e4892508e91508f9050612d05565b60075487611185565b90506000600654831115611e6757600654611e69565b825b3360009081526001602052604090205490915060ff16611eed5780821015611eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696e73756666696369656e7420766f74696e6720706f7765720000000000000060448201526064016105ac565b7fafbd5d299242bf861d198949ad835672e2e35b2e1838cee606a0b5aec2b4fa426007544360045443611f209190612a45565b600554600454611f309043612a45565b611f3a9190612a45565b60408051948552602085019390935291830152606082015260800160405180910390a1600160076000828254611f709190612a45565b90915550505050505050505050505050505050565b611f8d612180565b6000828152600a60205260408082208151606081019283905292600391820192908390855b82829054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019060100190602082600f01049283019260010382029150808411611fb2575094979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600655565b602001517ffffffffff00000000000000000000000000000000000000000000000000000001690565b6002830191839082156121705791602002820160005b8382111561213257835183826101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509260200192601001602081600f010492830192600103026120d6565b801561216e5782816101000a8154906fffffffffffffffffffffffffffffffff0219169055601001602081600f01049283019260010302612132565b505b5061217c92915061219e565b5090565b60405180606001604052806003906020820280368337509192915050565b5b8082111561217c576000815560010161219f565b6000602082840312156121c557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146121f057600080fd5b919050565b60006020828403121561220757600080fd5b612210826121cc565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561228d5761228d612217565b604052919050565b600067ffffffffffffffff8211156122af576122af612217565b5060051b60200190565b600082601f8301126122ca57600080fd5b813560206122df6122da83612295565b612246565b82815260059290921b840181019181810190868411156122fe57600080fd5b8286015b8481101561232057612313816121cc565b8352918301918301612302565b509695505050505050565b60006123396122da84612295565b8381529050602080820190600585901b84018681111561235857600080fd5b845b8181101561240a57803567ffffffffffffffff8082111561237b5760008081fd5b8188019150601f8a818401126123915760008081fd5b8235828111156123a3576123a3612217565b6123d2877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08484011601612246565b92508083528b878286010111156123eb57600091508182fd5b808785018885013760009083018701525085525092820192820161235a565b505050509392505050565b600082601f83011261242657600080fd5b6122108383356020850161232b565b60008060006060848603121561244a57600080fd5b83359250602084013567ffffffffffffffff8082111561246957600080fd5b612475878388016122b9565b9350604086013591508082111561248b57600080fd5b5061249886828701612415565b9150509250925092565b600080604083850312156124b557600080fd5b6124be836121cc565b9150602083013580151581146124d357600080fd5b809150509250929050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146121f057600080fd5b60008060006060848603121561252357600080fd5b61252c846121cc565b925061253a602085016124de565b9150604084013590509250925092565b6000806040838503121561255d57600080fd5b612566836121cc565b9150612574602084016124de565b90509250929050565b6000806040838503121561259057600080fd5b612599836121cc565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061260d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6fffffffffffffffffffffffffffffffff831681526040810161221060208301846125d6565b8035600381106121f057600080fd5b6000806000806080858703121561265c57600080fd5b843567ffffffffffffffff8082111561267457600080fd5b612680888389016122b9565b9550602087013591508082111561269657600080fd5b506126a387828801612415565b935050604085013591506126b960608601612637565b905092959194509250565b60008083601f8401126126d657600080fd5b50813567ffffffffffffffff8111156126ee57600080fd5b6020830191508360208260051b850101111561270957600080fd5b9250929050565b60008060008060008060008060008060c08b8d03121561272f57600080fd5b8a3567ffffffffffffffff8082111561274757600080fd5b6127538e838f016126c4565b909c509a5060208d013591508082111561276c57600080fd5b6127788e838f016126c4565b909a50985060408d013591508082111561279157600080fd5b61279d8e838f016126c4565b909850965060608d01359150808211156127b657600080fd5b506127c38d828e016126c4565b90955093505060808b013591506127dc60a08c01612637565b90509295989b9194979a5092959850565b60608101818360005b60038110156128275781516fffffffffffffffffffffffffffffffff168352602092830192909101906001016127f6565b50505092915050565b60005b8381101561284b578181015183820152602001612833565b50506000910152565b6000815180845261286c816020860160208601612830565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604080825283519082018190526000906020906060840190828701845b828110156128ed57815173ffffffffffffffffffffffffffffffffffffffff16845292840192908401906001016128bb565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561295b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018552612949838351612854565b9487019492509086019060010161290f565b50909998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6fffffffffffffffffffffffffffffffff8181168382160190808211156110f7576110f7612999565b60008251612a03818460208701612830565b9190910192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a3e57612a3e612999565b5060010190565b808201808211156110f9576110f9612999565b73ffffffffffffffffffffffffffffffffffffffff841681526fffffffffffffffffffffffffffffffff83166020820152606060408201526000612a9f6060830184612854565b95945050505050565b600060208284031215612aba57600080fd5b5051919050565b6fffffffffffffffffffffffffffffffff8281168282160390808211156110f7576110f7612999565b81546fffffffffffffffffffffffffffffffff8116825260408201906110f760208401608083901c60ff166125d6565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6040808252810184905260008560608301825b87811015612bb15773ffffffffffffffffffffffffffffffffffffffff612b9c846121cc565b16825260209283019290910190600101612b76565b506020915083810382850152808582528282019050828660051b8301018760005b88811015612c7d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18b3603018112612c3357600080fd5b8a01868101903567ffffffffffffffff811115612c4f57600080fd5b803603821315612c5e57600080fd5b612c69858284612b1a565b958801959450505090850190600101612bd2565b50909a9950505050505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612cc257600080fd5b83018035915067ffffffffffffffff821115612cdd57600080fd5b60200191503681900382131561270957600080fd5b818103818111156110f9576110f9612999565b600061221036848461232b56fea164736f6c6343000812000a00000000000000000000000002c845ac4bac48a6cd1e1c88a84195b7d5805b82000000000000000000000000000000000000000000013da329b633647180000000000000000000000000000000000000000000000000043c33c1937564800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000ae40af135c060e10b218c617c2d74a370b09c40f000000000000000000000000dd7a92062d1939357fb17a66288cde30b3711e53000000000000000000000000be951d1b791c6878eec5d9129adeb72a28d59e68
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101b85760003560e01c80638da5cb5b116100f9578063bd9c75a511610097578063d4b8756711610071578063d4b87567146104db578063da35c664146104e4578063f131e5eb146104ed578063fe9fbb80146104f657600080fd5b8063bd9c75a514610495578063c52ea3db146104a8578063d1b67627146104c857600080fd5b8063aa35fb51116100d3578063aa35fb5114610429578063af7a060c1461043c578063b6a5d7de1461045f578063b91816111461047257600080fd5b80638da5cb5b146103775780639f2524ee146103bc578063a4c950771461042057600080fd5b806327c97fa5116101665780634eb665af116101405780634eb665af146103075780635a4a60d81461031a578063771a5323146103515780637d5709eb1461036457600080fd5b806327c97fa5146102ce578063341a7b42146102e15780634392b99c146102f457600080fd5b806313af40351161019757806313af40351461029f57806315126a3d146102b25780631c39c96c146102c557600080fd5b806214d11d146101bd578063013cf08b146101d25780630455444314610288575b600080fd5b6101d06101cb3660046121b3565b61052f565b005b61023c6101e03660046121b3565b600a60205260009081526040902080546001820154600283015460059093015491926fffffffffffffffffffffffffffffffff808316937001000000000000000000000000000000009384900482169383831693048216911686565b604080519687526fffffffffffffffffffffffffffffffff9586166020880152938516938601939093529083166060850152821660808401521660a082015260c0015b60405180910390f35b61029160045481565b60405190815260200161027f565b6101d06102ad3660046121f5565b6105ba565b6101d06102c0366004612435565b610682565b61029160035481565b6101d06102dc3660046121f5565b610d04565b6101d06102ef3660046124a2565b610dd1565b6101d061030236600461250e565b610f2f565b6101d06103153660046121b3565b611006565b6103417f000000000000000000000000000000000000000000000000000000000000000181565b604051901515815260200161027f565b61029161035f36600461254a565b61108c565b6101d06103723660046121b3565b6110ff565b6000546103979073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161027f565b6104126103ca36600461257d565b600b6020908152600092835260408084209091529082529020546fffffffffffffffffffffffffffffffff811690700100000000000000000000000000000000900460ff1682565b60405161027f929190612611565b61029160055481565b610291610437366004612646565b611185565b61034161044a3660046121f5565b60096020526000908152604090205460ff1681565b6101d061046d3660046121f5565b611853565b6103416104803660046121f5565b60016020526000908152604090205460ff1681565b6101d06104a3366004612710565b61192d565b6104bb6104b63660046121b3565b611f85565b60405161027f91906127ed565b6101d06104d63660046121b3565b612011565b61029160065481565b61029160075481565b610291611bee81565b6103416105043660046121f5565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205460ff1690565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064015b60405180910390fd5b600555565b60005473ffffffffffffffffffffffffffffffffffffffff16331461063b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025460ff16156106ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f5265656e7472616e63790000000000000000000000000000000000000000000060448201526064016105ac565b600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556000848152600a6020526040902001546fffffffffffffffffffffffffffffffff700100000000000000000000000000000000909104164310156107bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f7420756e6c6f636b6564000000000000000000000000000000000000000060448201526064016105ac565b6000838152600a602052604081206001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16900361085d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f50726576696f75736c792065786563757465640000000000000000000000000060448201526064016105ac565b6000838152600a60205260409020600501546fffffffffffffffffffffffffffffffff1643106108e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f70617374206c6173742063616c6c2074696d657374616d70000000000000000060448201526064016105ac565b6000838152600a602090815260409182902054915161090c91859185910161289e565b6040516020818303038152906040528051906020012014610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f68617368206d69736d617463680000000000000000000000000000000000000060448201526064016105ac565b6000838152600a60205260408082208151606081019283905291600391820191908285855b82829054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019060100190602082600f010492830192600103820291508084116109ae575050506000888152600a60209081526040808320600201549087015191870151875197985092967001000000000000000000000000000000009091046fffffffffffffffffffffffffffffffff169550909350610a5d92506129c8565b610a6791906129c8565b6fffffffffffffffffffffffffffffffff1610159050600082600160200201516fffffffffffffffffffffffffffffffff1683600060200201516fffffffffffffffffffffffffffffffff16119050818015610ac05750805b610b26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f43616e6e6f74206578656375746500000000000000000000000000000000000060448201526064016105ac565b60005b8551811015610c4b576000868281518110610b4657610b4661296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16868381518110610b7657610b7661296a565b6020026020010151604051610b8b91906129f1565b6000604051808303816000865af19150503d8060008114610bc8576040519150601f19603f3d011682016040523d82523d6000602084013e610bcd565b606091505b5050905080610c38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f43616c6c206661696c656400000000000000000000000000000000000000000060448201526064016105ac565b5080610c4381612a0d565b915050610b29565b506040518681527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f9060200160405180910390a150505060009283525050600a6020526040812081815560018101829055600280820183905560038201839055600482019290925560050180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b73ffffffffffffffffffffffffffffffffffffffff16600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b7f0000000000000000000000000000000000000000000000000000000000000001610ed9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e6577207661756c7473206e6f7420616c6c6f7765640000000000000000000060448201526064016105ac565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260096020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b73ffffffffffffffffffffffffffffffffffffffff90921660009081526008602090815260408083207fffffffff0000000000000000000000000000000000000000000000000000000090941683529290522055565b60005473ffffffffffffffffffffffffffffffffffffffff163314611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600455565b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602090815260408083207fffffffff00000000000000000000000000000000000000000000000000000000851684529091528120548082036110f05750506003546110f9565b90506110f9565b505b92915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600355565b6000828152600a60205260408120600101546fffffffffffffffffffffffffffffffff168103611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f70726f706f73616c20646f6573206e6f7420657869737400000000000000000060448201526064016105ac565b6000838152600a60205260409020600201546fffffffffffffffffffffffffffffffff1643111561129e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f457870697265640000000000000000000000000000000000000000000000000060448201526064016105ac565b6000805b86518110156115505760006112b8826001612a45565b90505b875181101561139d578781815181106112d6576112d661296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff168883815181106113065761130661296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361138b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6475706c6963617465207661756c74000000000000000000000000000000000060448201526064016105ac565b8061139581612a0d565b9150506112bb565b50600960008883815181106113b4576113b461296a565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff1661144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f756e7665726966696564207661756c740000000000000000000000000000000060448201526064016105ac565b8681815181106114605761146061296a565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1663e91f323533600a600089815260200190815260200160002060010160009054906101000a90046fffffffffffffffffffffffffffffffff168985815181106114c9576114c961296a565b60200260200101516040518463ffffffff1660e01b81526004016114ef93929190612a58565b6020604051808303816000875af115801561150e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115329190612aa8565b61153c90836129c8565b91508061154881612a0d565b9150506112a2565b50336000908152600b602090815260408083208784529091529020546fffffffffffffffffffffffffffffffff161561166757336000908152600b6020908152604080832087845280835281842054600a845291909320929091526fffffffffffffffffffffffffffffffff81169160030190700100000000000000000000000000000000900460ff1660028111156115eb576115eb6125a7565b600381106115fb576115fb61296a565b600291828204019190066010028282829054906101000a90046fffffffffffffffffffffffffffffffff166116309190612ac1565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505b6040518060400160405280826fffffffffffffffffffffffffffffffff16815260200184600281111561169c5761169c6125a7565b9052336000908152600b602090815260408083208884528252909120825181546fffffffffffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffff0000000000000000000000000000000082168117835592840151919283917fffffffffffffffffffffffffffffff00000000000000000000000000000000001617700100000000000000000000000000000000836002811115611746576117466125a7565b021790555050506000848152600a602052604090208190600301846002811115611772576117726125a7565b600381106117825761178261296a565b600291828204019190066010028282829054906101000a90046fffffffffffffffffffffffffffffffff166117b791906129c8565b82546fffffffffffffffffffffffffffffffff9182166101009390930a928302919092021990911617905550336000818152600b602090815260408083208884529091529081902090518692917f79597d31752b5a254be8f219c055ebfefe925e085d99c7b04b0883298b356951916118309190612aea565b60405180910390a36fffffffffffffffffffffffffffffffff1695945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146118d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b61192a8173ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b50565b848314611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6172726179206c656e677468206d69736d61746368000000000000000000000060448201526064016105ac565b6000859003611a01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f656d7074792070726f706f73616c00000000000000000000000000000000000060448201526064016105ac565b600086868686604051602001611a1a9493929190612b63565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012090506000805b87811015611b7b576000611ac1888884818110611a7557611a7561296a565b9050602002810190611a879190612c8d565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061209792505050565b90506000600860008c8c86818110611adb57611adb61296a565b9050602002016020810190611af091906121f5565b73ffffffffffffffffffffffffffffffffffffffff168152602080820192909252604090810160009081207fffffffff000000000000000000000000000000000000000000000000000000008616825290925290205490508015611b545780611b58565b6003545b905083811115611b66578093505b50508080611b7390612a0d565b915050611a56565b50600554600454611b8c9043612a45565b611b969190612a45565b8411611bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f65787069726573206265666f726520766f74696e6720656e647300000000000060448201526064016105ac565b6040518060e00160405280838152602001600143611c1c9190612cf2565b6fffffffffffffffffffffffffffffffff16815260200160045443611c419190612a45565b6fffffffffffffffffffffffffffffffff16815260200160055460045443611c699190612a45565b611c739190612a45565b6fffffffffffffffffffffffffffffffff168152602001826fffffffffffffffffffffffffffffffff168152602001600a60006007548152602001908152602001600020600301600380602002604051908101604052809291908260038015611d35576020028201916000905b82829054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019060100190602082600f01049283019260010382029150808411611ce05790505b50505091835250506fffffffffffffffffffffffffffffffff8681166020928301526007546000908152600a835260409081902084518155928401519084015190821670010000000000000000000000000000000091831682021760018401556060840151608085015190831692160217600282015560a0820151611dc090600380840191906120c0565b5060c08201518160050160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509050506000611e518d8d80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611e4892508e91508f9050612d05565b60075487611185565b90506000600654831115611e6757600654611e69565b825b3360009081526001602052604090205490915060ff16611eed5780821015611eed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f696e73756666696369656e7420766f74696e6720706f7765720000000000000060448201526064016105ac565b7fafbd5d299242bf861d198949ad835672e2e35b2e1838cee606a0b5aec2b4fa426007544360045443611f209190612a45565b600554600454611f309043612a45565b611f3a9190612a45565b60408051948552602085019390935291830152606082015260800160405180910390a1600160076000828254611f709190612a45565b90915550505050505050505050505050505050565b611f8d612180565b6000828152600a60205260408082208151606081019283905292600391820192908390855b82829054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020019060100190602082600f01049283019260010382029150808411611fb2575094979650505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f53656e646572206e6f74206f776e65720000000000000000000000000000000060448201526064016105ac565b600655565b602001517ffffffffff00000000000000000000000000000000000000000000000000000001690565b6002830191839082156121705791602002820160005b8382111561213257835183826101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055509260200192601001602081600f010492830192600103026120d6565b801561216e5782816101000a8154906fffffffffffffffffffffffffffffffff0219169055601001602081600f01049283019260010302612132565b505b5061217c92915061219e565b5090565b60405180606001604052806003906020820280368337509192915050565b5b8082111561217c576000815560010161219f565b6000602082840312156121c557600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146121f057600080fd5b919050565b60006020828403121561220757600080fd5b612210826121cc565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561228d5761228d612217565b604052919050565b600067ffffffffffffffff8211156122af576122af612217565b5060051b60200190565b600082601f8301126122ca57600080fd5b813560206122df6122da83612295565b612246565b82815260059290921b840181019181810190868411156122fe57600080fd5b8286015b8481101561232057612313816121cc565b8352918301918301612302565b509695505050505050565b60006123396122da84612295565b8381529050602080820190600585901b84018681111561235857600080fd5b845b8181101561240a57803567ffffffffffffffff8082111561237b5760008081fd5b8188019150601f8a818401126123915760008081fd5b8235828111156123a3576123a3612217565b6123d2877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08484011601612246565b92508083528b878286010111156123eb57600091508182fd5b808785018885013760009083018701525085525092820192820161235a565b505050509392505050565b600082601f83011261242657600080fd5b6122108383356020850161232b565b60008060006060848603121561244a57600080fd5b83359250602084013567ffffffffffffffff8082111561246957600080fd5b612475878388016122b9565b9350604086013591508082111561248b57600080fd5b5061249886828701612415565b9150509250925092565b600080604083850312156124b557600080fd5b6124be836121cc565b9150602083013580151581146124d357600080fd5b809150509250929050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146121f057600080fd5b60008060006060848603121561252357600080fd5b61252c846121cc565b925061253a602085016124de565b9150604084013590509250925092565b6000806040838503121561255d57600080fd5b612566836121cc565b9150612574602084016124de565b90509250929050565b6000806040838503121561259057600080fd5b612599836121cc565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6003811061260d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b6fffffffffffffffffffffffffffffffff831681526040810161221060208301846125d6565b8035600381106121f057600080fd5b6000806000806080858703121561265c57600080fd5b843567ffffffffffffffff8082111561267457600080fd5b612680888389016122b9565b9550602087013591508082111561269657600080fd5b506126a387828801612415565b935050604085013591506126b960608601612637565b905092959194509250565b60008083601f8401126126d657600080fd5b50813567ffffffffffffffff8111156126ee57600080fd5b6020830191508360208260051b850101111561270957600080fd5b9250929050565b60008060008060008060008060008060c08b8d03121561272f57600080fd5b8a3567ffffffffffffffff8082111561274757600080fd5b6127538e838f016126c4565b909c509a5060208d013591508082111561276c57600080fd5b6127788e838f016126c4565b909a50985060408d013591508082111561279157600080fd5b61279d8e838f016126c4565b909850965060608d01359150808211156127b657600080fd5b506127c38d828e016126c4565b90955093505060808b013591506127dc60a08c01612637565b90509295989b9194979a5092959850565b60608101818360005b60038110156128275781516fffffffffffffffffffffffffffffffff168352602092830192909101906001016127f6565b50505092915050565b60005b8381101561284b578181015183820152602001612833565b50506000910152565b6000815180845261286c816020860160208601612830565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604080825283519082018190526000906020906060840190828701845b828110156128ed57815173ffffffffffffffffffffffffffffffffffffffff16845292840192908401906001016128bb565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561295b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018552612949838351612854565b9487019492509086019060010161290f565b50909998505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6fffffffffffffffffffffffffffffffff8181168382160190808211156110f7576110f7612999565b60008251612a03818460208701612830565b9190910192915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a3e57612a3e612999565b5060010190565b808201808211156110f9576110f9612999565b73ffffffffffffffffffffffffffffffffffffffff841681526fffffffffffffffffffffffffffffffff83166020820152606060408201526000612a9f6060830184612854565b95945050505050565b600060208284031215612aba57600080fd5b5051919050565b6fffffffffffffffffffffffffffffffff8281168282160390808211156110f7576110f7612999565b81546fffffffffffffffffffffffffffffffff8116825260408201906110f760208401608083901c60ff166125d6565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6040808252810184905260008560608301825b87811015612bb15773ffffffffffffffffffffffffffffffffffffffff612b9c846121cc565b16825260209283019290910190600101612b76565b506020915083810382850152808582528282019050828660051b8301018760005b88811015612c7d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18b3603018112612c3357600080fd5b8a01868101903567ffffffffffffffff811115612c4f57600080fd5b803603821315612c5e57600080fd5b612c69858284612b1a565b958801959450505090850190600101612bd2565b50909a9950505050505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612cc257600080fd5b83018035915067ffffffffffffffff821115612cdd57600080fd5b60200191503681900382131561270957600080fd5b818103818111156110f9576110f9612999565b600061221036848461232b56fea164736f6c6343000812000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000002c845ac4bac48a6cd1e1c88a84195b7d5805b82000000000000000000000000000000000000000000013da329b633647180000000000000000000000000000000000000000000000000043c33c1937564800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000ae40af135c060e10b218c617c2d74a370b09c40f000000000000000000000000dd7a92062d1939357fb17a66288cde30b3711e53000000000000000000000000be951d1b791c6878eec5d9129adeb72a28d59e68
-----Decoded View---------------
Arg [0] : _timelock (address): 0x02C845ac4baC48A6CD1e1c88a84195B7d5805B82
Arg [1] : _baseQuorum (uint256): 1500000000000000000000000
Arg [2] : _minProposalPower (uint256): 20000000000000000000000
Arg [3] : _gsc (address): 0x0000000000000000000000000000000000000000
Arg [4] : votingVaults (address[]): 0xae40Af135C060E10b218C617c2d74A370B09C40F,0xDD7a92062d1939357FB17A66288cdE30b3711E53,0xBe951D1B791C6878eec5d9129ADEB72A28D59E68
Arg [5] : _allowNewVotingVaults (bool): True
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000002c845ac4bac48a6cd1e1c88a84195b7d5805b82
Arg [1] : 000000000000000000000000000000000000000000013da329b6336471800000
Arg [2] : 00000000000000000000000000000000000000000000043c33c1937564800000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 000000000000000000000000ae40af135c060e10b218c617c2d74a370b09c40f
Arg [8] : 000000000000000000000000dd7a92062d1939357fb17a66288cde30b3711e53
Arg [9] : 000000000000000000000000be951d1b791c6878eec5d9129adeb72a28d59e68
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.