ETH Price: $2,668.16 (+9.45%)
Gas: 5 Gwei

Contract

0xCC73944e04EDAA27CEf95F87A9EbBD022FEdb1b9
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040101879822020-06-02 18:17:301528 days ago1591121850IN
 Create: MVDFunctionalityProposalManager
0 ETH0.0943102120.00000247

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
142249002022-02-17 17:10:49903 days ago1645117849
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
137145552021-11-30 11:45:15982 days ago1638272715
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
135087222021-10-28 23:37:361015 days ago1635464256
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
130421422021-08-17 10:24:251087 days ago1629195865
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
130419222021-08-17 9:31:341087 days ago1629192694
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
128446602021-07-17 14:05:211118 days ago1626530721
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
128440882021-07-17 11:50:031118 days ago1626522603
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
128440032021-07-17 11:31:561118 days ago1626521516
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
128400362021-07-16 20:33:131119 days ago1626467593
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
128254052021-07-14 13:34:291121 days ago1626269669
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
128252672021-07-14 13:03:281121 days ago1626267808
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
126923082021-06-23 19:36:491142 days ago1624477009
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
126922662021-06-23 19:26:431142 days ago1624476403
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
126922322021-06-23 19:18:331142 days ago1624475913
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
126921692021-06-23 19:05:101142 days ago1624475110
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
126918932021-06-23 18:06:141142 days ago1624471574
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
126393632021-06-15 13:41:131150 days ago1623764473
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
123379102021-04-29 21:49:051197 days ago1619732945
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
123349072021-04-29 10:48:491197 days ago1619693329
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
122905302021-04-22 14:19:501204 days ago1619101190
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
122899312021-04-22 12:13:591204 days ago1619093639
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
122899162021-04-22 12:10:531204 days ago1619093453
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
122779112021-04-20 15:45:121206 days ago1618933512
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
122777182021-04-20 14:59:471206 days ago1618930787
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
122772312021-04-20 13:16:041206 days ago1618924564
0xCC73944e...22FEdb1b9
 Contract Creation0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MVDFunctionalityProposalManager

Compiler Version
v0.6.8+commit.0bbfe453

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: MVDFunctionalityProposalManager.sol
pragma solidity ^0.6.0;

import "./IMVDFunctionalityProposalManager.sol";
import "./IMVDProxy.sol";
import "./MVDFunctionalityProposal.sol";
import "./IMVDFunctionalitiesManager.sol";

contract MVDFunctionalityProposalManager is IMVDFunctionalityProposalManager {

    address private _proxy;

    mapping(address => bool) private _proposals;

    modifier onlyProxy() {
        require(msg.sender == address(_proxy), "Only Proxy can call this functionality");
        _;
    }

    function newProposal(string memory codeName, address location, string memory methodSignature, string memory returnAbiParametersArray, string memory replaces) public override onlyProxy returns(address) {
        return setProposal(codeName, location, methodSignature, replaces, address(new MVDFunctionalityProposal(codeName, location, methodSignature, returnAbiParametersArray, replaces, _proxy)));
    }

    function preconditionCheck(string memory codeName, address location, string memory methodSignature, string memory replaces) private view {

        bool hasCodeName = !compareStrings(codeName, "");
        bool hasReplaces = !compareStrings(replaces, "");

        require((hasCodeName || !hasCodeName && !hasReplaces) ? location != address(0) : true, "Cannot have zero address for functionality to set or one time functionality to call");

        require(location == address(0) || !compareStrings(methodSignature, ""), "Cannot have empty string for methodSignature");

        require(hasCodeName || hasReplaces ? true : compareStrings(methodSignature, "callOneTime(address)"), "One Time Functionality method signature allowed is callOneTime(address)");

        IMVDFunctionalitiesManager functionalitiesManager = IMVDFunctionalitiesManager(IMVDProxy(_proxy).getMVDFunctionalitiesManagerAddress());

        require(hasCodeName && functionalitiesManager.hasFunctionality(codeName) ? compareStrings(codeName, replaces) : true, "codeName is already used by another functionality");

        require(hasReplaces ? functionalitiesManager.hasFunctionality(replaces) : true, "Cannot replace unexisting or inactive functionality");
    }

    function setProposal(string memory codeName, address location, string memory methodSignature, string memory replaces, address proposalAddress) private returns(address) {

        preconditionCheck(codeName, location, methodSignature, replaces);

        _proposals[proposalAddress] = true;

        return proposalAddress;
    }

    function checkProposal(address proposalAddress) public override onlyProxy {
        require(_proposals[proposalAddress], "Unauthorized Access!");

        IMVDFunctionalityProposal proposal = IMVDFunctionalityProposal(proposalAddress);

        uint256 surveyEndBlock = proposal.getSurveyEndBlock();

        require(surveyEndBlock > 0, "Survey was not started!");

        require(!proposal.isDisabled(), "Proposal is disabled!");

        if(!proposal.isVotesHardCapReached()) {
            require(block.number >= surveyEndBlock, "Survey is still running!");
        }

        require(!proposal.isTerminated(), "Survey already terminated!");
    }

    function isValidProposal(address proposal) public override view returns (bool) {
        return _proposals[proposal];
    }

    function getProxy() public override view returns (address) {
        return _proxy;
    }

    function setProxy() public override {
        require(_proxy == address(0) || _proxy == msg.sender, _proxy != address(0) ? "Proxy already set!" : "Only Proxy can toggle itself!");
        _proxy = _proxy == address(0) ?  msg.sender : address(0);
    }

    function compareStrings(string memory a, string memory b) private pure returns(bool) {
        return keccak256(bytes(a)) == keccak256(bytes(b));
    }
}

File 2 of 7: IERC20.sol
pragma solidity ^0.6.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 7: IMVDFunctionalitiesManager.sol
pragma solidity ^0.6.0;

interface IMVDFunctionalitiesManager {

    function getProxy() external view returns (address);
    function setProxy() external;

    function init(address sourceLocation,
        uint256 getMinimumBlockNumberSourceLocationId, address getMinimumBlockNumberFunctionalityAddress,
        uint256 getEmergencyMinimumBlockNumberSourceLocationId, address getEmergencyMinimumBlockNumberFunctionalityAddress,
        uint256 getEmergencySurveyStakingSourceLocationId, address getEmergencySurveyStakingFunctionalityAddress,
        uint256 checkVoteResultSourceLocationId, address checkVoteResultFunctionalityAddress) external;

    function addFunctionality(string calldata codeName, address sourceLocation, uint256 sourceLocationId, address location, bool submitable, string calldata methodSignature, string calldata returnAbiParametersArray, bool isInternal, bool needsSender) external;
    function addFunctionality(string calldata codeName, address sourceLocation, uint256 sourceLocationId, address location, bool submitable, string calldata methodSignature, string calldata returnAbiParametersArray, bool isInternal, bool needsSender, uint256 position) external;
    function removeFunctionality(string calldata codeName) external returns(bool removed, uint256 position);
    function isValidFunctionality(address functionality) external view returns(bool);
    function isAuthorizedFunctionality(address functionality) external view returns(bool);
    function setCallingContext(address location) external returns(bool);
    function clearCallingContext() external;
    function getFunctionalityData(string calldata codeName) external view returns(address, uint256, string memory, address, uint256);
    function hasFunctionality(string calldata codeName) external view returns(bool);
    function getFunctionalitiesAmount() external view returns(uint256);
    function functionalitiesToJSON() external view returns(string memory);
    function functionalitiesToJSON(uint256 start, uint256 l) external view returns(string memory functionsJSONArray);
    function functionalityNames() external view returns(string memory);
    function functionalityNames(uint256 start, uint256 l) external view returns(string memory functionsJSONArray);
    function functionalityToJSON(string calldata codeName) external view returns(string memory);

    function preConditionCheck(string calldata codeName, bytes calldata data, uint8 submitable, address sender, uint256 value) external view returns(address location, bytes memory payload);

    function setupFunctionality(address proposalAddress) external returns (bool);
}

File 4 of 7: IMVDFunctionalityProposal.sol
pragma solidity ^0.6.0;

interface IMVDFunctionalityProposal {

    function init(string calldata codeName, address location, string calldata methodSignature, string calldata returnAbiParametersArray, string calldata replaces, address proxy) external;
    function setCollateralData(bool emergency, address sourceLocation, uint256 sourceLocationId, bool submitable, bool isInternal, bool needsSender, address proposer, uint256 votesHardCap) external;

    function getProxy() external view returns(address);
    function getCodeName() external view returns(string memory);
    function isEmergency() external view returns(bool);
    function getSourceLocation() external view returns(address);
    function getSourceLocationId() external view returns(uint256);
    function getLocation() external view returns(address);
    function isSubmitable() external view returns(bool);
    function getMethodSignature() external view returns(string memory);
    function getReturnAbiParametersArray() external view returns(string memory);
    function isInternal() external view returns(bool);
    function needsSender() external view returns(bool);
    function getReplaces() external view returns(string memory);
    function getProposer() external view returns(address);
    function getSurveyEndBlock() external view returns(uint256);
    function getSurveyDuration() external view returns(uint256);
    function isVotesHardCapReached() external view returns(bool);
    function getVotesHardCapToReach() external view returns(uint256);
    function toJSON() external view returns(string memory);
    function getVote(address addr) external view returns(uint256 accept, uint256 refuse);
    function getVotes() external view returns(uint256, uint256);
    function start() external;
    function disable() external;
    function isDisabled() external view returns(bool);
    function isTerminated() external view returns(bool);
    function accept(uint256 amount) external;
    function retireAccept(uint256 amount) external;
    function moveToAccept(uint256 amount) external;
    function refuse(uint256 amount) external;
    function retireRefuse(uint256 amount) external;
    function moveToRefuse(uint256 amount) external;
    function retireAll() external;
    function withdraw() external;
    function terminate() external;
    function set() external;

    event Accept(address indexed voter, uint256 amount);
    event RetireAccept(address indexed voter, uint256 amount);
    event MoveToAccept(address indexed voter, uint256 amount);
    event Refuse(address indexed voter, uint256 amount);
    event RetireRefuse(address indexed voter, uint256 amount);
    event MoveToRefuse(address indexed voter, uint256 amount);
    event RetireAll(address indexed voter, uint256 amount);
}

File 5 of 7: IMVDFunctionalityProposalManager.sol
pragma solidity ^0.6.0;

interface IMVDFunctionalityProposalManager {
    function newProposal(string calldata codeName, address location, string calldata methodSignature, string calldata returnAbiParametersArray, string calldata replaces) external returns(address);
    function checkProposal(address proposalAddress) external;
    function getProxy() external view returns (address);
    function setProxy() external;
    function isValidProposal(address proposal) external view returns (bool);
}

File 6 of 7: IMVDProxy.sol
pragma solidity ^0.6.0;

interface IMVDProxy {

    function init(address votingTokenAddress, address functionalityProposalManagerAddress, address stateHolderAddress, address functionalityModelsManagerAddress, address functionalitiesManagerAddress, address walletAddress) external;

    function getDelegates() external view returns(address,address,address,address,address,address);
    function getToken() external view returns(address);
    function getMVDFunctionalityProposalManagerAddress() external view returns(address);
    function getStateHolderAddress() external view returns(address);
    function getMVDFunctionalityModelsManagerAddress() external view returns(address);
    function getMVDFunctionalitiesManagerAddress() external view returns(address);
    function getMVDWalletAddress() external view returns(address);
    function setDelegate(uint256 position, address newAddress) external returns(address oldAddress);
    function changeProxy(address newAddress, bytes calldata initPayload) external;
    function isValidProposal(address proposal) external view returns (bool);
    function isAuthorizedFunctionality(address functionality) external view returns(bool);
    function newProposal(string calldata codeName, bool emergency, address sourceLocation, uint256 sourceLocationId, address location, bool submitable, string calldata methodSignature, string calldata returnParametersJSONArray, bool isInternal, bool needsSender, string calldata replaces) external returns(address proposalAddress);
    function startProposal(address proposalAddress) external;
    function disableProposal(address proposalAddress) external;
    function transfer(address receiver, uint256 value, address token) external;
    function transfer721(address receiver, uint256 tokenId, bytes calldata data, bool safe, address token) external;
    function setProposal() external;
    function read(string calldata codeName, bytes calldata data) external view returns(bytes memory returnData);
    function submit(string calldata codeName, bytes calldata data) external payable returns(bytes memory returnData);
    function callFromManager(address location, bytes calldata payload) external returns(bool, bytes memory);
    function emitFromManager(string calldata codeName, address proposal, string calldata replaced, address replacedSourceLocation, uint256 replacedSourceLocationId, address location, bool submitable, string calldata methodSignature, bool isInternal, bool needsSender, address proposalAddress) external;

    function emitEvent(string calldata eventSignature, bytes calldata firstIndex, bytes calldata secondIndex, bytes calldata data) external;

    event ProxyChanged(address indexed newAddress);
    event DelegateChanged(uint256 position, address indexed oldAddress, address indexed newAddress);

    event Proposal(address proposal);
    event ProposalCheck(address indexed proposal);
    event ProposalSet(address indexed proposal, bool success);
    event FunctionalitySet(string codeName, address indexed proposal, string replaced, address replacedSourceLocation, uint256 replacedSourceLocationId, address indexed replacedLocation, bool replacedWasSubmitable, string replacedMethodSignature, bool replacedWasInternal, bool replacedNeededSender, address indexed replacedProposal);

    event Event(string indexed key, bytes32 indexed firstIndex, bytes32 indexed secondIndex, bytes data);
}

File 7 of 7: MVDFunctionalityProposal.sol
pragma solidity ^0.6.0;

import "./IMVDFunctionalityProposal.sol";
import "./IMVDProxy.sol";
import "./IERC20.sol";

contract MVDFunctionalityProposal is IMVDFunctionalityProposal{

    bool private _collateralDataSet;

    address private _proxy;
    address private _token;
    string private _codeName;
    bool private _emergency;
    address private _sourceLocation;
    uint256 private _sourceLocationId;
    address private _location;
    bool private _submitable;
    string private _methodSignature;
    string private _returnAbiParametersArray;
    bool private _isInternal;
    bool private _needsSender;
    string private _replaces;
    uint256 private _surveyEndBlock;
    uint256 private _surveyDuration;
    bool private _terminated;
    address private _proposer;
    bool private _disabled;

    mapping(address => uint256) private _accept;
    mapping(address => uint256) private _refuse;
    uint256 private _totalAccept;
    uint256 private _totalRefuse;
    mapping(address => bool) private _withdrawed;

    uint256 private _votesHardCap;
    bool private _votesHardCapReached;

    constructor(string memory codeName, address location, string memory methodSignature, string memory returnAbiParametersArray,
        string memory replaces, address proxy) public {
        init(codeName, location, methodSignature, returnAbiParametersArray, replaces, proxy);
    }

    function init(string memory codeName, address location, string memory methodSignature, string memory returnAbiParametersArray,
        string memory replaces, address proxy) public override {
        require(_proxy == address(0), "Already initialized!");
        _token = IMVDProxy(_proxy = proxy).getToken();
        _codeName = codeName;
        _location = location;
        _methodSignature = methodSignature;
        _returnAbiParametersArray = returnAbiParametersArray;
        _replaces = replaces;
    }

    function setCollateralData(bool emergency, address sourceLocation, uint256 sourceLocationId, bool submitable, bool isInternal, bool needsSender, address proposer, uint256 votesHardCap) public override {
        require(!_collateralDataSet, "setCollateralData already called!");
        require(_proxy == msg.sender, "Only Original Proxy can call this method!");
        _sourceLocation = sourceLocation;
        _sourceLocationId = sourceLocationId;
        _submitable = submitable;
        _isInternal = isInternal;
        _needsSender = needsSender;
        _proposer = proposer;
        _surveyDuration = toUint256(IMVDProxy(_proxy).read((_emergency = emergency) ? "getMinimumBlockNumberForEmergencySurvey" : "getMinimumBlockNumberForSurvey", bytes("")));
        _votesHardCap = votesHardCap;
        _collateralDataSet = true;
    }

    function getProxy() public override view returns(address) {
        return _proxy;
    }

    function getCodeName() public override view returns(string memory) {
        return _codeName;
    }

    function isEmergency() public override view returns(bool) {
        return _emergency;
    }

    function getSourceLocation() public override view returns(address) {
        return _sourceLocation;
    }

    function getSourceLocationId() public override view returns(uint256) {
        return _sourceLocationId;
    }

    function getLocation() public override view returns(address) {
        return _location;
    }

    function isSubmitable() public override view returns(bool) {
        return _submitable;
    }

    function getMethodSignature() public override view returns(string memory) {
        return _methodSignature;
    }

    function getReturnAbiParametersArray() public override view returns(string memory) {
        return _returnAbiParametersArray;
    }

    function isInternal() public override view returns(bool) {
        return _isInternal;
    }

    function needsSender() public override view returns(bool) {
        return _needsSender;
    }

    function getReplaces() public override view returns(string memory) {
        return _replaces;
    }

    function getProposer() public override view returns(address) {
        return _proposer;
    }

    function getSurveyEndBlock() public override view returns(uint256) {
        return _surveyEndBlock;
    }

    function getSurveyDuration() public override view returns(uint256) {
        return _surveyDuration;
    }

    function getVote(address addr) public override view returns(uint256 accept, uint256 refuse) {
        accept = _accept[addr];
        refuse = _refuse[addr];
    }

    function getVotes() public override view returns(uint256, uint256) {
        return (_totalAccept, _totalRefuse);
    }

    function isTerminated() public override view returns(bool) {
        return _terminated;
    }

    function isDisabled() public override view returns(bool) {
        return _disabled;
    }

    function isVotesHardCapReached() public override view returns(bool) {
        return _votesHardCapReached;
    }

    function getVotesHardCapToReach() public override view returns(uint256) {
        return _votesHardCap;
    }

    function start() public override {
        require(_collateralDataSet, "Still waiting for setCollateralData to be called!");
        require(msg.sender == _proxy, "Only Proxy can call this function!");
        require(_surveyEndBlock == 0, "Already started!");
        require(!_disabled, "Already disabled!");
        _surveyEndBlock = block.number + _surveyDuration;
    }

    function disable() public override {
        require(_collateralDataSet, "Still waiting for setCollateralData to be called!");
        require(msg.sender == _proxy, "Only Proxy can call this function!");
        require(_surveyEndBlock == 0, "Already started!");
        _disabled = true;
        _terminated = true;
    }

    function toJSON() public override view returns(string memory) {
        return string(abi.encodePacked(
            '{',
            getFirstJSONPart(_sourceLocation, _sourceLocationId, _location),
            '","submitable":',
            _submitable ? "true" : "false",
            ',"emergency":',
            _emergency ? "true" : "false",
            ',"isInternal":',
            _isInternal ? "true" : "false",
            ',"needsSender":',
            _needsSender ? "true" : "false",
            ',',
            getSecondJSONPart(),
            ',"proposer":"',
            toString(_proposer),
            '","endBlock":',
            toString(_surveyEndBlock),
            ',"terminated":',
            _terminated ? "true" : "false",
            ',"accepted":',
            toString(_totalAccept),
            ',"refused":',
            toString(_totalRefuse),
            ',"disabled":',
            _disabled ? 'true' : 'false',
            '}')
        );
    }

    function getSecondJSONPart() private view returns (string memory){
        return string(abi.encodePacked(
            '"codeName":"',
            _codeName,
            '","methodSignature":"',
            _methodSignature,
            '","returnAbiParametersArray":',
            formatReturnAbiParametersArray(_returnAbiParametersArray),
            ',"replaces":"',
            _replaces,
            '"'));
    }

    modifier duringSurvey() {
        require(_collateralDataSet, "Still waiting for setCollateralData to be called!");
        require(!_disabled, "Survey disabled!");
        require(!_terminated, "Survey Terminated!");
        require(!_votesHardCapReached, "Votes Hard Cap reached!");
        require(_surveyEndBlock > 0, "Survey Not Started!");
        require(block.number < _surveyEndBlock, "Survey ended!");
        _;
    }

    modifier onSurveyEnd() {
        require(_collateralDataSet, "Still waiting for setCollateralData to be called!");
        require(!_disabled, "Survey disabled!");
        require(_surveyEndBlock > 0, "Survey Not Started!");
        if(!_votesHardCapReached) {
            require(block.number >= _surveyEndBlock, "Survey is still running!");
        }
        _;
    }

    function _checkVotesHardCap() private {
        if(_votesHardCap == 0 || (_totalAccept < _votesHardCap && _totalRefuse < _votesHardCap)) {
            return;
        }
        _votesHardCapReached = true;
        terminate();
    }

    function accept(uint256 amount) external override duringSurvey {
        IERC20(_token).transferFrom(msg.sender, address(this), amount);
        uint256 vote = _accept[msg.sender];
        vote += amount;
        _accept[msg.sender] = vote;
        _totalAccept += amount;
        emit Accept(msg.sender, amount);
        _checkVotesHardCap();
    }

    function retireAccept(uint256 amount) external override duringSurvey {
        require(_accept[msg.sender] >= amount, "Insufficient funds!");
        IERC20(_token).transfer(msg.sender, amount);
        uint256 vote = _accept[msg.sender];
        vote -= amount;
        _accept[msg.sender] = vote;
        _totalAccept -= amount;
        emit RetireAccept(msg.sender, amount);
    }

    function moveToAccept(uint256 amount) external override duringSurvey {
        require(_refuse[msg.sender] >= amount, "Insufficient funds!");
        uint256 vote = _refuse[msg.sender];
        vote -= amount;
        _refuse[msg.sender] = vote;
        _totalRefuse -= amount;

        vote = _accept[msg.sender];
        vote += amount;
        _accept[msg.sender] = vote;
        _totalAccept += amount;
        emit MoveToAccept(msg.sender, amount);
        _checkVotesHardCap();
    }

    function refuse(uint256 amount) external override duringSurvey {
        IERC20(_token).transferFrom(msg.sender, address(this), amount);
        uint256 vote = _refuse[msg.sender];
        vote += amount;
        _refuse[msg.sender] = vote;
        _totalRefuse += amount;
        emit Refuse(msg.sender, amount);
        _checkVotesHardCap();
    }

    function retireRefuse(uint256 amount) external override duringSurvey {
        require(_refuse[msg.sender] >= amount, "Insufficient funds!");
        IERC20(_token).transfer(msg.sender, amount);
        uint256 vote = _refuse[msg.sender];
        vote -= amount;
        _refuse[msg.sender] = vote;
        _totalRefuse -= amount;
        emit RetireRefuse(msg.sender, amount);
    }

    function moveToRefuse(uint256 amount) external override duringSurvey {
        require(_accept[msg.sender] >= amount, "Insufficient funds!");
        uint256 vote = _accept[msg.sender];
        vote -= amount;
        _accept[msg.sender] = vote;
        _totalAccept -= amount;

        vote = _refuse[msg.sender];
        vote += amount;
        _refuse[msg.sender] = vote;
        _totalRefuse += amount;
        emit MoveToRefuse(msg.sender, amount);
        _checkVotesHardCap();
    }

    function retireAll() external override duringSurvey {
        require(_accept[msg.sender] + _refuse[msg.sender] > 0, "No votes!");
        uint256 acpt = _accept[msg.sender];
        uint256 rfs = _refuse[msg.sender];
        IERC20(_token).transfer(msg.sender, acpt + rfs);
        _accept[msg.sender] = 0;
        _refuse[msg.sender] = 0;
        _totalAccept -= acpt;
        _totalRefuse -= rfs;
        emit RetireAll(msg.sender, acpt + rfs);
    }

    function withdraw() external override onSurveyEnd {
        if(!_terminated && !_disabled) {
            terminate();
            return;
        }
        _withdraw(true);
    }

    function terminate() public override onSurveyEnd {
        require(!_terminated, "Already terminated!");
        IMVDProxy(_proxy).setProposal();
        _withdraw(false);
    }

    function _withdraw(bool launchError) private {
        require(!launchError || _accept[msg.sender] + _refuse[msg.sender] > 0, "Nothing to Withdraw!");
        require(!launchError || !_withdrawed[msg.sender], "Already Withdrawed!");
        if(_accept[msg.sender] + _refuse[msg.sender] > 0 && !_withdrawed[msg.sender]) {
            IERC20(_token).transfer(msg.sender, _accept[msg.sender] + _refuse[msg.sender]);
            _withdrawed[msg.sender] = true;
        }
    }

    function set() public override onSurveyEnd {
        require(msg.sender == _proxy, "Unauthorized Access!");
        require(!_terminated, "Already terminated!");
        _terminated = true;
    }

    function toUint256(bytes memory bs) public pure returns(uint256 x) {
        if(bs.length >= 32) {
            assembly {
                x := mload(add(bs, add(0x20, 0)))
            }
        }
    }

    function toString(address _addr) public pure returns(string memory) {
        bytes32 value = bytes32(uint256(_addr));
        bytes memory alphabet = "0123456789abcdef";

        bytes memory str = new bytes(42);
        str[0] = '0';
        str[1] = 'x';
        for (uint i = 0; i < 20; i++) {
            str[2+i*2] = alphabet[uint(uint8(value[i + 12] >> 4))];
            str[3+i*2] = alphabet[uint(uint8(value[i + 12] & 0x0f))];
        }
        return string(str);
    }

    function toString(uint _i) public pure returns(string memory) {
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len - 1;
        while (_i != 0) {
            bstr[k--] = byte(uint8(48 + _i % 10));
            _i /= 10;
        }
        return string(bstr);
    }

    function getFirstJSONPart(address sourceLocation, uint256 sourceLocationId, address location) public pure returns(bytes memory) {
        return abi.encodePacked(
            '"sourceLocation":"',
            toString(sourceLocation),
            '","sourceLocationId":',
            toString(sourceLocationId),
            ',"location":"',
            toString(location)
        );
    }

    function formatReturnAbiParametersArray(string memory m) public pure returns(string memory) {
        bytes memory b = bytes(m);
        if(b.length < 2) {
            return "[]";
        }
        if(b[0] != bytes1("[")) {
            return "[]";
        }
        if(b[b.length - 1] != bytes1("]")) {
            return "[]";
        }
        return m;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"proposalAddress","type":"address"}],"name":"checkProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"proposal","type":"address"}],"name":"isValidProposal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"codeName","type":"string"},{"internalType":"address","name":"location","type":"address"},{"internalType":"string","name":"methodSignature","type":"string"},{"internalType":"string","name":"returnAbiParametersArray","type":"string"},{"internalType":"string","name":"replaces","type":"string"}],"name":"newProposal","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setProxy","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50615460806100206000396000f3fe60806040523480156200001157600080fd5b50600436106200005e5760003560e01c80632c9f55ed14620000635780633914a04f146200008e578063933a9ce81462000098578063a7d5a1ee14620000be578063a9771afd1462000311575b600080fd5b6200008c600480360360208110156200007b57600080fd5b50356001600160a01b03166200034e565b005b6200008c620006f8565b620000a262000860565b604080516001600160a01b039092168252519081900360200190f35b620000a2600480360360a0811015620000d657600080fd5b810190602081018135600160201b811115620000f157600080fd5b8201836020820111156200010457600080fd5b803590602001918460018302840111600160201b831117156200012657600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b8111156200018a57600080fd5b8201836020820111156200019d57600080fd5b803590602001918460018302840111600160201b83111715620001bf57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156200021257600080fd5b8201836020820111156200022557600080fd5b803590602001918460018302840111600160201b831117156200024757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156200029a57600080fd5b820183602082011115620002ad57600080fd5b803590602001918460018302840111600160201b83111715620002cf57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506200086f945050505050565b6200033a600480360360208110156200032957600080fd5b50356001600160a01b031662000af5565b604080519115158252519081900360200190f35b6000546001600160a01b03163314620003995760405162461bcd60e51b8152600401808060200182810382526026815260200180620053be6026913960400191505060405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16620003fe576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a6564204163636573732160601b604482015290519081900360640190fd5b60008190506000816001600160a01b0316633fa4d9ca6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043f57600080fd5b505afa15801562000454573d6000803e3d6000fd5b505050506040513d60208110156200046b57600080fd5b5051905080620004c2576040805162461bcd60e51b815260206004820152601760248201527f53757276657920776173206e6f74207374617274656421000000000000000000604482015290519081900360640190fd5b816001600160a01b0316636c57f5a96040518163ffffffff1660e01b815260040160206040518083038186803b158015620004fc57600080fd5b505afa15801562000511573d6000803e3d6000fd5b505050506040513d60208110156200052857600080fd5b50511562000575576040805162461bcd60e51b815260206004820152601560248201527450726f706f73616c2069732064697361626c65642160581b604482015290519081900360640190fd5b816001600160a01b03166315db404e6040518163ffffffff1660e01b815260040160206040518083038186803b158015620005af57600080fd5b505afa158015620005c4573d6000803e3d6000fd5b505050506040513d6020811015620005db57600080fd5b505162000638578043101562000638576040805162461bcd60e51b815260206004820152601860248201527f537572766579206973207374696c6c2072756e6e696e67210000000000000000604482015290519081900360640190fd5b816001600160a01b031663d1cc99766040518163ffffffff1660e01b815260040160206040518083038186803b1580156200067257600080fd5b505afa15801562000687573d6000803e3d6000fd5b505050506040513d60208110156200069e57600080fd5b505115620006f3576040805162461bcd60e51b815260206004820152601a60248201527f53757276657920616c7265616479207465726d696e6174656421000000000000604482015290519081900360640190fd5b505050565b6000546001600160a01b031615806200071b57506000546001600160a01b031633145b6000546001600160a01b031662000768576040518060400160405280601d81526020017f4f6e6c792050726f78792063616e20746f67676c6520697473656c662100000081525062000794565b6040518060400160405280601281526020017150726f787920616c7265616479207365742160701b8152505b90620008215760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620007e5578181015183820152602001620007cb565b50505050905090810190601f168015620008135780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000546001600160a01b0316156200083c5760006200083e565b335b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b600080546001600160a01b03163314620008bb5760405162461bcd60e51b8152600401808060200182810382526026815260200180620053be6026913960400191505060405180910390fd5b62000aeb868686858a8a8a8a8a6000809054906101000a90046001600160a01b0316604051620008eb9062000fee565b8080602001876001600160a01b03166001600160a01b03168152602001806020018060200180602001866001600160a01b03166001600160a01b0316815260200185810385528b818151815260200191508051906020019080838360005b838110156200096357818101518382015260200162000949565b50505050905090810190601f168015620009915780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b83811015620009c6578181015183820152602001620009ac565b50505050905090810190601f168015620009f45780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b8381101562000a2957818101518382015260200162000a0f565b50505050905090810190601f16801562000a575780820380516001836020036101000a031916815260200191505b50858103825287518152875160209182019189019080838360005b8381101562000a8c57818101518382015260200162000a72565b50505050905090810190601f16801562000aba5780820380516001836020036101000a031916815260200191505b509a5050505050505050505050604051809103906000f08015801562000ae4573d6000803e3d6000fd5b5062000b13565b9695505050505050565b6001600160a01b031660009081526001602052604090205460ff1690565b600062000b238686868662000b52565b506001600160a01b0381166000908152600160208190526040909120805460ff19169091179055949350505050565b600062000b6f856040518060200160405280600081525062000fd8565b159050600062000b8f836040518060200160405280600081525062000fd8565b159050818062000ba757508115801562000ba7575080155b62000bb457600162000bc1565b6001600160a01b03851615155b62000bfe5760405162461bcd60e51b8152600401808060200182810382526053815260200180620052db6053913960600191505060405180910390fd5b6001600160a01b038516158062000c2d575062000c2b846040518060200160405280600081525062000fd8565b155b62000c6a5760405162461bcd60e51b815260040180806020018281038252602c8152602001806200535f602c913960400191505060405180910390fd5b818062000c745750805b62000cb75762000cb1846040518060400160405280601481526020017363616c6c4f6e6554696d6528616464726573732960601b81525062000fd8565b62000cba565b60015b62000cf75760405162461bcd60e51b8152600401808060200182810382526047815260200180620053e46047913960600191505060405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b0316636701586a6040518163ffffffff1660e01b815260040160206040518083038186803b15801562000d4757600080fd5b505afa15801562000d5c573d6000803e3d6000fd5b505050506040513d602081101562000d7357600080fd5b5051905082801562000e575750604051630f26020160e21b81526020600482018181528951602484015289516001600160a01b03851693633c980804938c939283926044019185019080838360005b8381101562000ddc57818101518382015260200162000dc2565b50505050905090810190601f16801562000e0a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801562000e2857600080fd5b505afa15801562000e3d573d6000803e3d6000fd5b505050506040513d602081101562000e5457600080fd5b50515b62000e6457600162000e70565b62000e70878562000fd8565b62000ead5760405162461bcd60e51b81526004018080602001828103825260318152602001806200532e6031913960400191505060405180910390fd5b8162000ebb57600162000f92565b604051630f26020160e21b81526020600482018181528651602484015286516001600160a01b03851693633c9808049389939283926044019185019080838360005b8381101562000f1757818101518382015260200162000efd565b50505050905090810190601f16801562000f455780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801562000f6357600080fd5b505afa15801562000f78573d6000803e3d6000fd5b505050506040513d602081101562000f8f57600080fd5b50515b62000fcf5760405162461bcd60e51b81526004018080602001828103825260338152602001806200538b6033913960400191505060405180910390fd5b50505050505050565b8051602091820120825192909101919091201490565b6142de8062000ffd8339019056fe60806040523480156200001157600080fd5b50604051620042de380380620042de833981810160405260c08110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b506040818152602083015192018051929491939192846401000000008211156200010f57600080fd5b9083019060208201858111156200012557600080fd5b82516401000000008111828201881017156200014057600080fd5b82525081516020918201929091019080838360005b838110156200016f57818101518382015260200162000155565b50505050905090810190601f1680156200019d5780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001c157600080fd5b908301906020820185811115620001d757600080fd5b8251640100000000811182820188101715620001f257600080fd5b82525081516020918201929091019080838360005b838110156200022157818101518382015260200162000207565b50505050905090810190601f1680156200024f5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200027357600080fd5b9083019060208201858111156200028957600080fd5b8251640100000000811182820188101715620002a457600080fd5b82525081516020918201929091019080838360005b83811015620002d3578181015183820152602001620002b9565b50505050905090810190601f168015620003015780820380516001836020036101000a031916815260200191505b506040526020015191506200032690508686868686866001600160e01b036200033216565b50505050505062000562565b60005461010090046001600160a01b03161562000396576040805162461bcd60e51b815260206004820152601460248201527f416c726561647920696e697469616c697a656421000000000000000000000000604482015290519081900360640190fd5b80600060016101000a8154816001600160a01b0302191690836001600160a01b0316021790556001600160a01b03166321df0da76040518163ffffffff1660e01b815260040160206040518083038186803b158015620003f557600080fd5b505afa1580156200040a573d6000803e3d6000fd5b505050506040513d60208110156200042157600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055855162000457906002906020890190620004bd565b50600580546001600160a01b0319166001600160a01b038716179055835162000488906006906020870190620004bd565b5082516200049e906007906020860190620004bd565b508151620004b4906009906020850190620004bd565b50505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200050057805160ff191683800117855562000530565b8280016001018555821562000530579182015b828111156200053057825182559160200191906001019062000513565b506200053e92915062000542565b5090565b6200055f91905b808211156200053e576000815560010162000549565b90565b613d6c80620005726000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c806366844c7e11610146578063b8e010de116100c3578063d1cc997611610087578063d1cc9976146108e9578063e9790d02146108f1578063eb3464a1146108f9578063eba3aa4214610916578063ef0e99a71461091e578063f48f489e1461093b57610253565b8063b8e010de14610825578063b9c33b261461082d578063bd37c8aa14610835578063be9a6555146108d9578063ce2ce3fc146108e157610253565b80638fc38e0b1161010a5780638fc38e0b146107cc578063933a9ce8146107d4578063a60a07b2146107f8578063aa1cc2e914610815578063b23d26521461081d57610253565b806366844c7e146107075780636900a3ae146107245780636c57f5a9146107415780638d06bc5b146107495780638d337b81146107a657610253565b80633ccfd60b116101d457806355d92ae31161019857806355d92ae31461061057806356ca623e146106185780635ad3c9311461063e5780635f9e8f82146106e257806366698389146106ea57610253565b80633ccfd60b146105d65780633e1b421d146105de5780633fa4d9ca146105e65780634398037c14610600578063485e2d9e1461060857610253565b806316375cb31161021b57806316375cb31461056b57806316e29d711461057357806319b05f491461057b5780632c394d99146105985780632f2770db146105ce57610253565b806304f181b7146102585780630c08bf88146102d55780630dc96015146102df57806314ebd7831461030057806315db404e1461054f575b600080fd5b610260610943565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029a578181015183820152602001610282565b50505050905090810190601f1680156102c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102dd6109da565b005b6102e7610bd0565b6040805192835260208301919091528051918290030190f35b6102dd600480360360c081101561031657600080fd5b810190602081018135600160201b81111561033057600080fd5b82018360208201111561034257600080fd5b803590602001918460018302840111600160201b8311171561036357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b8111156103c657600080fd5b8201836020820111156103d857600080fd5b803590602001918460018302840111600160201b831117156103f957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561044b57600080fd5b82018360208201111561045d57600080fd5b803590602001918460018302840111600160201b8311171561047e57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156104d057600080fd5b8201836020820111156104e257600080fd5b803590602001918460018302840111600160201b8311171561050357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150610bda9050565b610557610d50565b604080519115158252519081900360200190f35b610260610d59565b61055761144c565b6102dd6004803603602081101561059157600080fd5b5035611455565b610260600480360360608110156105ae57600080fd5b506001600160a01b038135811691602081013591604090910135166116ee565b6102dd611863565b6102dd611958565b610260611ac5565b6105ee611b26565b60408051918252519081900360200190f35b610260611b2c565b6105ee611b8a565b610557611b90565b6102606004803603602081101561062e57600080fd5b50356001600160a01b0316611ba0565b6102606004803603602081101561065457600080fd5b810190602081018135600160201b81111561066e57600080fd5b82018360208201111561068057600080fd5b803590602001918460018302840111600160201b831117156106a157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d1e945050505050565b610557611df1565b6102dd6004803603602081101561070057600080fd5b5035611dfa565b6102dd6004803603602081101561071d57600080fd5b503561207a565b6102606004803603602081101561073a57600080fd5b50356122fa565b6105576123c9565b6102dd600480360361010081101561076057600080fd5b5080351515906001600160a01b0360208201358116916040810135916060820135151591608081013515159160a082013515159160c08101359091169060e001356123d9565b6102e7600480360360208110156107bc57600080fd5b50356001600160a01b0316612763565b6105ee61278b565b6107dc612791565b604080516001600160a01b039092168252519081900360200190f35b6102dd6004803603602081101561080e57600080fd5b50356127a5565b6105ee612a3a565b610557612a40565b6102dd612a4e565b6107dc612c3a565b6105ee6004803603602081101561084b57600080fd5b810190602081018135600160201b81111561086557600080fd5b82018360208201111561087757600080fd5b803590602001918460018302840111600160201b8311171561089857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612c4e945050505050565b6102dd612c61565b6107dc612d95565b610557612da4565b6107dc612dad565b6102dd6004803603602081101561090f57600080fd5b5035612dc1565b6102dd6130a8565b6102dd6004803603602081101561093457600080fd5b50356133b8565b61026061369f565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109cf5780601f106109a4576101008083540402835291602001916109cf565b820191906000526020600020905b8154815290600101906020018083116109b257829003601f168201915b505050505090505b90565b60005460ff16610a1b5760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff1615610a6d576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b6000600a5411610ab2576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b60135460ff16610b0e57600a54431015610b0e576040805162461bcd60e51b8152602060048201526018602482015277537572766579206973207374696c6c2072756e6e696e672160401b604482015290519081900360640190fd5b600c5460ff1615610b5c576040805162461bcd60e51b8152602060048201526013602482015272416c7265616479207465726d696e617465642160681b604482015290519081900360640190fd5b600060019054906101000a90046001600160a01b03166001600160a01b0316632a7434a86040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b50505050610bce6000613700565b565b600f546010549091565b60005461010090046001600160a01b031615610c34576040805162461bcd60e51b8152602060048201526014602482015273416c726561647920696e697469616c697a65642160601b604482015290519081900360640190fd5b80600060016101000a8154816001600160a01b0302191690836001600160a01b0316021790556001600160a01b03166321df0da76040518163ffffffff1660e01b815260040160206040518083038186803b158015610c9257600080fd5b505afa158015610ca6573d6000803e3d6000fd5b505050506040513d6020811015610cbc57600080fd5b5051600180546001600160a01b0319166001600160a01b039092169190911790558551610cf0906002906020890190613b9a565b50600580546001600160a01b0319166001600160a01b0387161790558351610d1f906006906020870190613b9a565b508251610d33906007906020860190613b9a565b508151610d47906009906020850190613b9a565b50505050505050565b60135460ff1690565b600354600454600554606092610d81926101009091046001600160a01b0390811692166116ee565b600554600160a01b900460ff16610db5576040518060400160405280600581526020016466616c736560d81b815250610dd3565b604051806040016040528060048152602001637472756560e01b8152505b60035460ff16610e00576040518060400160405280600581526020016466616c736560d81b815250610e1e565b604051806040016040528060048152602001637472756560e01b8152505b60085460ff16610e4b576040518060400160405280600581526020016466616c736560d81b815250610e69565b604051806040016040528060048152602001637472756560e01b8152505b600854610100900460ff16610e9b576040518060400160405280600581526020016466616c736560d81b815250610eb9565b604051806040016040528060048152602001637472756560e01b8152505b610ec16138c6565b600c54610edb9061010090046001600160a01b0316611ba0565b610ee6600a546122fa565b600c5460ff16610f13576040518060400160405280600581526020016466616c736560d81b815250610f31565b604051806040016040528060048152602001637472756560e01b8152505b610f3c600f546122fa565b610f476010546122fa565b600c54600160a81b900460ff16610f7b576040518060400160405280600581526020016466616c736560d81b815250610f99565b604051806040016040528060048152602001637472756560e01b8152505b6040516020018080607b60f81b8152506001018d805190602001908083835b60208310610fd75780518252601f199092019160209182019101610fb8565b51815160209384036101000a60001901801990921691161790526e11161139bab136b4ba30b13632911d60891b919093019081528e51600f909101928f0191508083835b6020831061103a5780518252601f19909201916020918201910161101b565b51815160209384036101000a60001901801990921691161790526c161132b6b2b933b2b731bc911d60991b919093019081528d51600d909101928e0191508083835b6020831061109b5780518252601f19909201916020918201910161107c565b51815160209384036101000a60001901801990921691161790526d161134b9a4b73a32b93730b6111d60911b919093019081528c51600e909101928d0191508083835b602083106110fd5780518252601f1990920191602091820191016110de565b51815160209384036101000a60001901801990921691161790526e16113732b2b239a9b2b73232b9111d60891b919093019081528b51600f909101928c0191508083835b602083106111605780518252601f199092019160209182019101611141565b6001836020036101000a03801982511681845116808217855250505050505090500180600b60fa1b81525060010188805190602001908083835b602083106111b95780518252601f19909201916020918201910161119a565b51815160209384036101000a60001901801990921691161790526c1611383937b837b9b2b9111d1160991b919093019081528951600d909101928a0191508083835b6020831061121a5780518252601f1990920191602091820191016111fb565b51815160209384036101000a60001901801990921691161790526c11161132b732213637b1b5911d60991b919093019081528851600d90910192890191508083835b6020831061127b5780518252601f19909201916020918201910161125c565b51815160209384036101000a60001901801990921691161790526d16113a32b936b4b730ba32b2111d60911b919093019081528751600e90910192880191508083835b602083106112dd5780518252601f1990920191602091820191016112be565b51815160209384036101000a60001901801990921691161790526b161130b1b1b2b83a32b2111d60a11b919093019081528651600c90910192870191508083835b6020831061133d5780518252601f19909201916020918201910161131e565b51815160209384036101000a60001901801990921691161790526a16113932b33ab9b2b2111d60a91b919093019081528551600b90910192860191508083835b6020831061139c5780518252601f19909201916020918201910161137d565b51815160209384036101000a60001901801990921691161790526b16113234b9b0b13632b2111d60a11b919093019081528451600c90910192850191508083835b602083106113fc5780518252601f1990920191602091820191016113dd565b6001836020036101000a03801982511681845116808217855250505050505090500180607d60f81b8152506001019c50505050505050505050505050604051602081830303815290604052905090565b60085460ff1690565b60005460ff166114965760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff16156114e8576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff1615611535576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff161561157b576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a54116115c0576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a544310611606576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b600154604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561166057600080fd5b505af1158015611674573d6000803e3d6000fd5b505050506040513d602081101561168a57600080fd5b5050336000818152600d60209081526040918290208054850190819055600f805486019055825185815292519093927f68e07974e86f9190b39c5e1783e6ba66b3d0d7ccf507de51450f14e594d1686892908290030190a26116ea613b5b565b5050565b60606116f984611ba0565b611702846122fa565b61170b84611ba0565b6040516020018080711139b7bab931b2a637b1b0ba34b7b7111d1160711b81525060120184805190602001908083835b6020831061175a5780518252601f19909201916020918201910161173b565b51815160209384036101000a60001901801990921691161790527411161139b7bab931b2a637b1b0ba34b7b724b2111d60591b919093019081528551601590910192860191508083835b602083106117c35780518252601f1990920191602091820191016117a4565b51815160209384036101000a60001901801990921691161790526c16113637b1b0ba34b7b7111d1160991b919093019081528451600d90910192850191508083835b602083106118245780518252601f199092019160209182019101611805565b6001836020036101000a038019825116818451168082178552505050505050905001935050505060405160208183030381529060405290509392505050565b60005460ff166118a45760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b60005461010090046001600160a01b031633146118f25760405162461bcd60e51b8152600401808060200182810382526022815260200180613c7a6022913960400191505060405180910390fd5b600a541561193a576040805162461bcd60e51b815260206004820152601060248201526f416c726561647920737461727465642160801b604482015290519081900360640190fd5b600c805460ff1960ff60a81b19909116600160a81b17166001179055565b60005460ff166119995760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff16156119eb576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b6000600a5411611a30576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b60135460ff16611a8c57600a54431015611a8c576040805162461bcd60e51b8152602060048201526018602482015277537572766579206973207374696c6c2072756e6e696e672160401b604482015290519081900360640190fd5b600c5460ff16158015611aa95750600c54600160a81b900460ff16155b15611abb57611ab66109da565b610bce565b610bce6001613700565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109cf5780601f106109a4576101008083540402835291602001916109cf565b600a5490565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156109cf5780601f106109a4576101008083540402835291602001916109cf565b60045490565b600554600160a01b900460ff1690565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180368337019050509050600360fc1b81600081518110611c0457fe5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611c2d57fe5b60200101906001600160f81b031916908160001a90535060005b6014811015611d13578260048583600c0160208110611c6257fe5b1a60f81b6001600160f81b031916901c60f81c60ff1681518110611c8257fe5b602001015160f81c60f81b828260020260020181518110611c9f57fe5b60200101906001600160f81b031916908160001a905350828482600c0160208110611cc657fe5b825191901a600f16908110611cd757fe5b602001015160f81c60f81b828260020260030181518110611cf457fe5b60200101906001600160f81b031916908160001a905350600101611c47565b50925050505b919050565b606080829050600281511015611d4e5750506040805180820190915260028152615b5d60f01b6020820152611d19565b605b60f81b6001600160f81b03191681600081518110611d6a57fe5b01602001516001600160f81b03191614611d9e5750506040805180820190915260028152615b5d60f01b6020820152611d19565b8051605d60f81b9082906000198101908110611db657fe5b01602001516001600160f81b03191614611dea5750506040805180820190915260028152615b5d60f01b6020820152611d19565b5090919050565b60035460ff1690565b60005460ff16611e3b5760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff1615611e8d576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff1615611eda576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff1615611f20576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a5411611f65576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a544310611fab576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b336000908152600d6020526040902054811115612005576040805162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015290519081900360640190fd5b336000818152600d6020908152604080832080548690039055600f80548690039055600e82529182902080548501908190556010805486019055825185815292519093927f66ac89bb1a67976b7989a763cdec43b50a592dc86bb59f48d08e26572cb1522192908290030190a26116ea613b5b565b60005460ff166120bb5760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff161561210d576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff161561215a576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff16156121a0576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a54116121e5576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a54431061222b576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b336000908152600e6020526040902054811115612285576040805162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015290519081900360640190fd5b336000818152600e6020908152604080832080548690039055601080548690039055600d8252918290208054850190819055600f805486019055825185815292519093927f483d089c46398a02a8985779ec41436d62364736e8a9b40a10183fa12867839292908290030190a26116ea613b5b565b60608161231f57506040805180820190915260018152600360fc1b6020820152611d19565b8160005b811561233757600101600a82049150612323565b60608167ffffffffffffffff8111801561235057600080fd5b506040519080825280601f01601f19166020018201604052801561237b576020820181803683370190505b50905060001982015b8515611d1357600a860660300160f81b828280600190039350815181106123a757fe5b60200101906001600160f81b031916908160001a905350600a86049550612384565b600c54600160a81b900460ff1690565b60005460ff161561241b5760405162461bcd60e51b8152600401808060200182810382526021815260200180613d166021913960400191505060405180910390fd5b60005461010090046001600160a01b031633146124695760405162461bcd60e51b8152600401808060200182810382526029815260200180613c9c6029913960400191505060405180910390fd5b6003805460048890556005805460ff60a01b1916600160a01b891515021790556008805460ff199081168815151761ff001916610100881515810291909117909255600c8054610100600160a81b03199081166001600160a01b0389811686029190911790925560005494168c82168402179091168c1515179093556127479291041663841d0ed78a612531576040518060400160405280601e81526020017f6765744d696e696d756d426c6f636b4e756d626572466f72537572766579000081525061254b565b604051806060016040528060278152602001613c53602791395b604051806020016040528060008152506040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b838110156125ab578181015183820152602001612593565b50505050905090810190601f1680156125d85780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561260b5781810151838201526020016125f3565b50505050905090810190601f1680156126385780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038186803b15801561265757600080fd5b505afa15801561266b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561269457600080fd5b8101908080516040519392919084600160201b8211156126b357600080fd5b9083019060208201858111156126c857600080fd5b8251600160201b8111828201881017156126e157600080fd5b82525081516020918201929091019080838360005b8381101561270e5781810151838201526020016126f6565b50505050905090810190601f16801561273b5780820380516001836020036101000a031916815260200191505b50604052505050612c4e565b600b5560125550506000805460ff191660011790555050505050565b6001600160a01b03166000908152600d6020908152604080832054600e909252909120549091565b600b5490565b60005461010090046001600160a01b031690565b60005460ff166127e65760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff1615612838576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff1615612885576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff16156128cb576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a5411612910576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a544310612956576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b600154604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156129b057600080fd5b505af11580156129c4573d6000803e3d6000fd5b505050506040513d60208110156129da57600080fd5b5050336000818152600e602090815260409182902080548501908190556010805486019055825185815292519093927f4e855894dd91aeb0192726b247db8c42f6d1275c4094286dfeadd2005971a1b492908290030190a26116ea613b5b565b60125490565b600854610100900460ff1690565b60005460ff16612a8f5760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff1615612ae1576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b6000600a5411612b26576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b60135460ff16612b8257600a54431015612b82576040805162461bcd60e51b8152602060048201526018602482015277537572766579206973207374696c6c2072756e6e696e672160401b604482015290519081900360640190fd5b60005461010090046001600160a01b03163314612bdd576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a6564204163636573732160601b604482015290519081900360640190fd5b600c5460ff1615612c2b576040805162461bcd60e51b8152602060048201526013602482015272416c7265616479207465726d696e617465642160681b604482015290519081900360640190fd5b600c805460ff19166001179055565b60035461010090046001600160a01b031690565b60006020825110611d1957506020015190565b60005460ff16612ca25760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b60005461010090046001600160a01b03163314612cf05760405162461bcd60e51b8152600401808060200182810382526022815260200180613c7a6022913960400191505060405180910390fd5b600a5415612d38576040805162461bcd60e51b815260206004820152601060248201526f416c726561647920737461727465642160801b604482015290519081900360640190fd5b600c54600160a81b900460ff1615612d8b576040805162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b604482015290519081900360640190fd5b600b544301600a55565b6005546001600160a01b031690565b600c5460ff1690565b600c5461010090046001600160a01b031690565b60005460ff16612e025760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff1615612e54576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff1615612ea1576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff1615612ee7576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a5411612f2c576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a544310612f72576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b336000908152600e6020526040902054811115612fcc576040805162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015290519081900360640190fd5b6001546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561302057600080fd5b505af1158015613034573d6000803e3d6000fd5b505050506040513d602081101561304a57600080fd5b5050336000818152600e6020908152604091829020805485900390819055601080548690039055825185815292519093927fa369065c2bc9cea922be2bf705101c039bc3af5575b8548b4d16d6a0b1893e2592908290030190a25050565b60005460ff166130e95760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff161561313b576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff1615613188576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff16156131ce576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a5411613213576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a544310613259576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b336000908152600e6020908152604080832054600d90925290912054016132b3576040805162461bcd60e51b81526020600482015260096024820152684e6f20766f7465732160b81b604482015290519081900360640190fd5b336000818152600d6020908152604080832054600e835281842054600154835163a9059cbb60e01b8152600481019790975281830160248801529251919590946001600160a01b039093169363a9059cbb9360448084019492938390030190829087803b15801561332357600080fd5b505af1158015613337573d6000803e3d6000fd5b505050506040513d602081101561334d57600080fd5b5050336000818152600d60209081526040808320839055600e825280832092909255600f805486900390556010805485900390558151848601815291517f1dd395e89b5da0e80f0242ec498fdfcaa6bc77d32b4417d89ec195e160fd7ad89281900390910190a25050565b60005460ff166133f95760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff161561344b576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff1615613498576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff16156134de576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a5411613523576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a544310613569576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b336000908152600d60205260409020548111156135c3576040805162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015290519081900360640190fd5b6001546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561361757600080fd5b505af115801561362b573d6000803e3d6000fd5b505050506040513d602081101561364157600080fd5b5050336000818152600d6020908152604091829020805485900390819055600f80548690039055825185815292519093927fc4e9f6c43fa16caaa3278b92f5fadf533efad8e8124fa4253fd9490cdc0742b492908290030190a25050565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109cf5780601f106109a4576101008083540402835291602001916109cf565b8015806137285750336000908152600e6020908152604080832054600d909252909120540115155b613770576040805162461bcd60e51b81526020600482015260146024820152734e6f7468696e6720746f2057697468647261772160601b604482015290519081900360640190fd5b80158061378d57503360009081526011602052604090205460ff16155b6137d4576040805162461bcd60e51b8152602060048201526013602482015272416c726561647920576974686472617765642160681b604482015290519081900360640190fd5b336000908152600e6020908152604080832054600d90925290912054011580159061380f57503360009081526011602052604090205460ff16155b156138c357600154336000818152600e6020908152604080832054600d835281842054825163a9059cbb60e01b81526004810196909652016024850152516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b15801561387c57600080fd5b505af1158015613890573d6000803e3d6000fd5b505050506040513d60208110156138a657600080fd5b5050336000908152601160205260409020805460ff191660011790555b50565b60078054604080516020600260018516156101000260001901909416849004601f810182900482028301820190935282825260609460069361395e93928301828280156139545780601f1061392957610100808354040283529160200191613954565b820191906000526020600020905b81548152906001019060200180831161393757829003601f168201915b5050505050611d1e565b600960405160200180806b1131b7b232a730b6b2911d1160a11b815250600c01858054600181600116156101000203166002900480156139d55780601f106139b35761010080835404028352918201916139d5565b820191906000526020600020905b8154815290600101906020018083116139c1575b5050807411161136b2ba3437b229b4b3b730ba3ab932911d1160591b81525060150184805460018160011615610100020316600290048015613a4e5780601f10613a2c576101008083540402835291820191613a4e565b820191906000526020600020905b815481529060010190602001808311613a3a575b5050807f222c2272657475726e416269506172616d65746572734172726179223a000000815250601d0183805190602001908083835b60208310613aa35780518252601f199092019160209182019101613a84565b6001836020036101000a038019825116818451168082178552505050505050905001806c16113932b83630b1b2b9911d1160991b815250600d0182805460018160011615610100020316600290048015613b345780601f10613b12576101008083540402835291820191613b34565b820191906000526020600020905b815481529060010190602001808311613b20575b5050601160f91b815260408051601e19818403018152600190920190529550505050505090565b6012541580613b7b5750601254600f54108015613b7b5750601254601054105b15613b8557610bce565b6013805460ff19166001179055610bce6109da565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613bdb57805160ff1916838001178555613c08565b82800160010185558215613c08579182015b82811115613c08578251825591602001919060010190613bed565b50613c14929150613c18565b5090565b6109d791905b80821115613c145760008155600101613c1e56fe566f7465732048617264204361702072656163686564210000000000000000006765744d696e696d756d426c6f636b4e756d626572466f72456d657267656e63795375727665794f6e6c792050726f78792063616e2063616c6c20746869732066756e6374696f6e214f6e6c79204f726967696e616c2050726f78792063616e2063616c6c2074686973206d6574686f64215374696c6c2077616974696e6720666f7220736574436f6c6c61746572616c4461746120746f2062652063616c6c656421537572766579204e6f7420537461727465642100000000000000000000000000736574436f6c6c61746572616c4461746120616c72656164792063616c6c656421a2646970667358221220cc7f3bf856466276233180424b6f508fe3d144c7a0a548366500787677c07fa564736f6c6343000608003343616e6e6f742068617665207a65726f206164647265737320666f722066756e6374696f6e616c69747920746f20736574206f72206f6e652074696d652066756e6374696f6e616c69747920746f2063616c6c636f64654e616d6520697320616c7265616479207573656420627920616e6f746865722066756e6374696f6e616c69747943616e6e6f74206861766520656d70747920737472696e6720666f72206d6574686f645369676e617475726543616e6e6f74207265706c61636520756e6578697374696e67206f7220696e6163746976652066756e6374696f6e616c6974794f6e6c792050726f78792063616e2063616c6c20746869732066756e6374696f6e616c6974794f6e652054696d652046756e6374696f6e616c697479206d6574686f64207369676e617475726520616c6c6f7765642069732063616c6c4f6e6554696d65286164647265737329a26469706673582212206b900863d1b72a8b7c1d3692f37b10d62ed3c830cf261066e61a771a30868fdb64736f6c63430006080033

Deployed Bytecode

0x60806040523480156200001157600080fd5b50600436106200005e5760003560e01c80632c9f55ed14620000635780633914a04f146200008e578063933a9ce81462000098578063a7d5a1ee14620000be578063a9771afd1462000311575b600080fd5b6200008c600480360360208110156200007b57600080fd5b50356001600160a01b03166200034e565b005b6200008c620006f8565b620000a262000860565b604080516001600160a01b039092168252519081900360200190f35b620000a2600480360360a0811015620000d657600080fd5b810190602081018135600160201b811115620000f157600080fd5b8201836020820111156200010457600080fd5b803590602001918460018302840111600160201b831117156200012657600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b8111156200018a57600080fd5b8201836020820111156200019d57600080fd5b803590602001918460018302840111600160201b83111715620001bf57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156200021257600080fd5b8201836020820111156200022557600080fd5b803590602001918460018302840111600160201b831117156200024757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156200029a57600080fd5b820183602082011115620002ad57600080fd5b803590602001918460018302840111600160201b83111715620002cf57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506200086f945050505050565b6200033a600480360360208110156200032957600080fd5b50356001600160a01b031662000af5565b604080519115158252519081900360200190f35b6000546001600160a01b03163314620003995760405162461bcd60e51b8152600401808060200182810382526026815260200180620053be6026913960400191505060405180910390fd5b6001600160a01b03811660009081526001602052604090205460ff16620003fe576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a6564204163636573732160601b604482015290519081900360640190fd5b60008190506000816001600160a01b0316633fa4d9ca6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043f57600080fd5b505afa15801562000454573d6000803e3d6000fd5b505050506040513d60208110156200046b57600080fd5b5051905080620004c2576040805162461bcd60e51b815260206004820152601760248201527f53757276657920776173206e6f74207374617274656421000000000000000000604482015290519081900360640190fd5b816001600160a01b0316636c57f5a96040518163ffffffff1660e01b815260040160206040518083038186803b158015620004fc57600080fd5b505afa15801562000511573d6000803e3d6000fd5b505050506040513d60208110156200052857600080fd5b50511562000575576040805162461bcd60e51b815260206004820152601560248201527450726f706f73616c2069732064697361626c65642160581b604482015290519081900360640190fd5b816001600160a01b03166315db404e6040518163ffffffff1660e01b815260040160206040518083038186803b158015620005af57600080fd5b505afa158015620005c4573d6000803e3d6000fd5b505050506040513d6020811015620005db57600080fd5b505162000638578043101562000638576040805162461bcd60e51b815260206004820152601860248201527f537572766579206973207374696c6c2072756e6e696e67210000000000000000604482015290519081900360640190fd5b816001600160a01b031663d1cc99766040518163ffffffff1660e01b815260040160206040518083038186803b1580156200067257600080fd5b505afa15801562000687573d6000803e3d6000fd5b505050506040513d60208110156200069e57600080fd5b505115620006f3576040805162461bcd60e51b815260206004820152601a60248201527f53757276657920616c7265616479207465726d696e6174656421000000000000604482015290519081900360640190fd5b505050565b6000546001600160a01b031615806200071b57506000546001600160a01b031633145b6000546001600160a01b031662000768576040518060400160405280601d81526020017f4f6e6c792050726f78792063616e20746f67676c6520697473656c662100000081525062000794565b6040518060400160405280601281526020017150726f787920616c7265616479207365742160701b8152505b90620008215760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620007e5578181015183820152602001620007cb565b50505050905090810190601f168015620008135780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000546001600160a01b0316156200083c5760006200083e565b335b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b600080546001600160a01b03163314620008bb5760405162461bcd60e51b8152600401808060200182810382526026815260200180620053be6026913960400191505060405180910390fd5b62000aeb868686858a8a8a8a8a6000809054906101000a90046001600160a01b0316604051620008eb9062000fee565b8080602001876001600160a01b03166001600160a01b03168152602001806020018060200180602001866001600160a01b03166001600160a01b0316815260200185810385528b818151815260200191508051906020019080838360005b838110156200096357818101518382015260200162000949565b50505050905090810190601f168015620009915780820380516001836020036101000a031916815260200191505b5085810384528951815289516020918201918b019080838360005b83811015620009c6578181015183820152602001620009ac565b50505050905090810190601f168015620009f45780820380516001836020036101000a031916815260200191505b5085810383528851815288516020918201918a019080838360005b8381101562000a2957818101518382015260200162000a0f565b50505050905090810190601f16801562000a575780820380516001836020036101000a031916815260200191505b50858103825287518152875160209182019189019080838360005b8381101562000a8c57818101518382015260200162000a72565b50505050905090810190601f16801562000aba5780820380516001836020036101000a031916815260200191505b509a5050505050505050505050604051809103906000f08015801562000ae4573d6000803e3d6000fd5b5062000b13565b9695505050505050565b6001600160a01b031660009081526001602052604090205460ff1690565b600062000b238686868662000b52565b506001600160a01b0381166000908152600160208190526040909120805460ff19169091179055949350505050565b600062000b6f856040518060200160405280600081525062000fd8565b159050600062000b8f836040518060200160405280600081525062000fd8565b159050818062000ba757508115801562000ba7575080155b62000bb457600162000bc1565b6001600160a01b03851615155b62000bfe5760405162461bcd60e51b8152600401808060200182810382526053815260200180620052db6053913960600191505060405180910390fd5b6001600160a01b038516158062000c2d575062000c2b846040518060200160405280600081525062000fd8565b155b62000c6a5760405162461bcd60e51b815260040180806020018281038252602c8152602001806200535f602c913960400191505060405180910390fd5b818062000c745750805b62000cb75762000cb1846040518060400160405280601481526020017363616c6c4f6e6554696d6528616464726573732960601b81525062000fd8565b62000cba565b60015b62000cf75760405162461bcd60e51b8152600401808060200182810382526047815260200180620053e46047913960600191505060405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b0316636701586a6040518163ffffffff1660e01b815260040160206040518083038186803b15801562000d4757600080fd5b505afa15801562000d5c573d6000803e3d6000fd5b505050506040513d602081101562000d7357600080fd5b5051905082801562000e575750604051630f26020160e21b81526020600482018181528951602484015289516001600160a01b03851693633c980804938c939283926044019185019080838360005b8381101562000ddc57818101518382015260200162000dc2565b50505050905090810190601f16801562000e0a5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801562000e2857600080fd5b505afa15801562000e3d573d6000803e3d6000fd5b505050506040513d602081101562000e5457600080fd5b50515b62000e6457600162000e70565b62000e70878562000fd8565b62000ead5760405162461bcd60e51b81526004018080602001828103825260318152602001806200532e6031913960400191505060405180910390fd5b8162000ebb57600162000f92565b604051630f26020160e21b81526020600482018181528651602484015286516001600160a01b03851693633c9808049389939283926044019185019080838360005b8381101562000f1757818101518382015260200162000efd565b50505050905090810190601f16801562000f455780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801562000f6357600080fd5b505afa15801562000f78573d6000803e3d6000fd5b505050506040513d602081101562000f8f57600080fd5b50515b62000fcf5760405162461bcd60e51b81526004018080602001828103825260338152602001806200538b6033913960400191505060405180910390fd5b50505050505050565b8051602091820120825192909101919091201490565b6142de8062000ffd8339019056fe60806040523480156200001157600080fd5b50604051620042de380380620042de833981810160405260c08110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b506040818152602083015192018051929491939192846401000000008211156200010f57600080fd5b9083019060208201858111156200012557600080fd5b82516401000000008111828201881017156200014057600080fd5b82525081516020918201929091019080838360005b838110156200016f57818101518382015260200162000155565b50505050905090810190601f1680156200019d5780820380516001836020036101000a031916815260200191505b5060405260200180516040519392919084640100000000821115620001c157600080fd5b908301906020820185811115620001d757600080fd5b8251640100000000811182820188101715620001f257600080fd5b82525081516020918201929091019080838360005b838110156200022157818101518382015260200162000207565b50505050905090810190601f1680156200024f5780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200027357600080fd5b9083019060208201858111156200028957600080fd5b8251640100000000811182820188101715620002a457600080fd5b82525081516020918201929091019080838360005b83811015620002d3578181015183820152602001620002b9565b50505050905090810190601f168015620003015780820380516001836020036101000a031916815260200191505b506040526020015191506200032690508686868686866001600160e01b036200033216565b50505050505062000562565b60005461010090046001600160a01b03161562000396576040805162461bcd60e51b815260206004820152601460248201527f416c726561647920696e697469616c697a656421000000000000000000000000604482015290519081900360640190fd5b80600060016101000a8154816001600160a01b0302191690836001600160a01b0316021790556001600160a01b03166321df0da76040518163ffffffff1660e01b815260040160206040518083038186803b158015620003f557600080fd5b505afa1580156200040a573d6000803e3d6000fd5b505050506040513d60208110156200042157600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055855162000457906002906020890190620004bd565b50600580546001600160a01b0319166001600160a01b038716179055835162000488906006906020870190620004bd565b5082516200049e906007906020860190620004bd565b508151620004b4906009906020850190620004bd565b50505050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200050057805160ff191683800117855562000530565b8280016001018555821562000530579182015b828111156200053057825182559160200191906001019062000513565b506200053e92915062000542565b5090565b6200055f91905b808211156200053e576000815560010162000549565b90565b613d6c80620005726000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c806366844c7e11610146578063b8e010de116100c3578063d1cc997611610087578063d1cc9976146108e9578063e9790d02146108f1578063eb3464a1146108f9578063eba3aa4214610916578063ef0e99a71461091e578063f48f489e1461093b57610253565b8063b8e010de14610825578063b9c33b261461082d578063bd37c8aa14610835578063be9a6555146108d9578063ce2ce3fc146108e157610253565b80638fc38e0b1161010a5780638fc38e0b146107cc578063933a9ce8146107d4578063a60a07b2146107f8578063aa1cc2e914610815578063b23d26521461081d57610253565b806366844c7e146107075780636900a3ae146107245780636c57f5a9146107415780638d06bc5b146107495780638d337b81146107a657610253565b80633ccfd60b116101d457806355d92ae31161019857806355d92ae31461061057806356ca623e146106185780635ad3c9311461063e5780635f9e8f82146106e257806366698389146106ea57610253565b80633ccfd60b146105d65780633e1b421d146105de5780633fa4d9ca146105e65780634398037c14610600578063485e2d9e1461060857610253565b806316375cb31161021b57806316375cb31461056b57806316e29d711461057357806319b05f491461057b5780632c394d99146105985780632f2770db146105ce57610253565b806304f181b7146102585780630c08bf88146102d55780630dc96015146102df57806314ebd7831461030057806315db404e1461054f575b600080fd5b610260610943565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029a578181015183820152602001610282565b50505050905090810190601f1680156102c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102dd6109da565b005b6102e7610bd0565b6040805192835260208301919091528051918290030190f35b6102dd600480360360c081101561031657600080fd5b810190602081018135600160201b81111561033057600080fd5b82018360208201111561034257600080fd5b803590602001918460018302840111600160201b8311171561036357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b03853516959094909350604081019250602001359050600160201b8111156103c657600080fd5b8201836020820111156103d857600080fd5b803590602001918460018302840111600160201b831117156103f957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561044b57600080fd5b82018360208201111561045d57600080fd5b803590602001918460018302840111600160201b8311171561047e57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156104d057600080fd5b8201836020820111156104e257600080fd5b803590602001918460018302840111600160201b8311171561050357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b03169150610bda9050565b610557610d50565b604080519115158252519081900360200190f35b610260610d59565b61055761144c565b6102dd6004803603602081101561059157600080fd5b5035611455565b610260600480360360608110156105ae57600080fd5b506001600160a01b038135811691602081013591604090910135166116ee565b6102dd611863565b6102dd611958565b610260611ac5565b6105ee611b26565b60408051918252519081900360200190f35b610260611b2c565b6105ee611b8a565b610557611b90565b6102606004803603602081101561062e57600080fd5b50356001600160a01b0316611ba0565b6102606004803603602081101561065457600080fd5b810190602081018135600160201b81111561066e57600080fd5b82018360208201111561068057600080fd5b803590602001918460018302840111600160201b831117156106a157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611d1e945050505050565b610557611df1565b6102dd6004803603602081101561070057600080fd5b5035611dfa565b6102dd6004803603602081101561071d57600080fd5b503561207a565b6102606004803603602081101561073a57600080fd5b50356122fa565b6105576123c9565b6102dd600480360361010081101561076057600080fd5b5080351515906001600160a01b0360208201358116916040810135916060820135151591608081013515159160a082013515159160c08101359091169060e001356123d9565b6102e7600480360360208110156107bc57600080fd5b50356001600160a01b0316612763565b6105ee61278b565b6107dc612791565b604080516001600160a01b039092168252519081900360200190f35b6102dd6004803603602081101561080e57600080fd5b50356127a5565b6105ee612a3a565b610557612a40565b6102dd612a4e565b6107dc612c3a565b6105ee6004803603602081101561084b57600080fd5b810190602081018135600160201b81111561086557600080fd5b82018360208201111561087757600080fd5b803590602001918460018302840111600160201b8311171561089857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612c4e945050505050565b6102dd612c61565b6107dc612d95565b610557612da4565b6107dc612dad565b6102dd6004803603602081101561090f57600080fd5b5035612dc1565b6102dd6130a8565b6102dd6004803603602081101561093457600080fd5b50356133b8565b61026061369f565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109cf5780601f106109a4576101008083540402835291602001916109cf565b820191906000526020600020905b8154815290600101906020018083116109b257829003601f168201915b505050505090505b90565b60005460ff16610a1b5760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff1615610a6d576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b6000600a5411610ab2576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b60135460ff16610b0e57600a54431015610b0e576040805162461bcd60e51b8152602060048201526018602482015277537572766579206973207374696c6c2072756e6e696e672160401b604482015290519081900360640190fd5b600c5460ff1615610b5c576040805162461bcd60e51b8152602060048201526013602482015272416c7265616479207465726d696e617465642160681b604482015290519081900360640190fd5b600060019054906101000a90046001600160a01b03166001600160a01b0316632a7434a86040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610bac57600080fd5b505af1158015610bc0573d6000803e3d6000fd5b50505050610bce6000613700565b565b600f546010549091565b60005461010090046001600160a01b031615610c34576040805162461bcd60e51b8152602060048201526014602482015273416c726561647920696e697469616c697a65642160601b604482015290519081900360640190fd5b80600060016101000a8154816001600160a01b0302191690836001600160a01b0316021790556001600160a01b03166321df0da76040518163ffffffff1660e01b815260040160206040518083038186803b158015610c9257600080fd5b505afa158015610ca6573d6000803e3d6000fd5b505050506040513d6020811015610cbc57600080fd5b5051600180546001600160a01b0319166001600160a01b039092169190911790558551610cf0906002906020890190613b9a565b50600580546001600160a01b0319166001600160a01b0387161790558351610d1f906006906020870190613b9a565b508251610d33906007906020860190613b9a565b508151610d47906009906020850190613b9a565b50505050505050565b60135460ff1690565b600354600454600554606092610d81926101009091046001600160a01b0390811692166116ee565b600554600160a01b900460ff16610db5576040518060400160405280600581526020016466616c736560d81b815250610dd3565b604051806040016040528060048152602001637472756560e01b8152505b60035460ff16610e00576040518060400160405280600581526020016466616c736560d81b815250610e1e565b604051806040016040528060048152602001637472756560e01b8152505b60085460ff16610e4b576040518060400160405280600581526020016466616c736560d81b815250610e69565b604051806040016040528060048152602001637472756560e01b8152505b600854610100900460ff16610e9b576040518060400160405280600581526020016466616c736560d81b815250610eb9565b604051806040016040528060048152602001637472756560e01b8152505b610ec16138c6565b600c54610edb9061010090046001600160a01b0316611ba0565b610ee6600a546122fa565b600c5460ff16610f13576040518060400160405280600581526020016466616c736560d81b815250610f31565b604051806040016040528060048152602001637472756560e01b8152505b610f3c600f546122fa565b610f476010546122fa565b600c54600160a81b900460ff16610f7b576040518060400160405280600581526020016466616c736560d81b815250610f99565b604051806040016040528060048152602001637472756560e01b8152505b6040516020018080607b60f81b8152506001018d805190602001908083835b60208310610fd75780518252601f199092019160209182019101610fb8565b51815160209384036101000a60001901801990921691161790526e11161139bab136b4ba30b13632911d60891b919093019081528e51600f909101928f0191508083835b6020831061103a5780518252601f19909201916020918201910161101b565b51815160209384036101000a60001901801990921691161790526c161132b6b2b933b2b731bc911d60991b919093019081528d51600d909101928e0191508083835b6020831061109b5780518252601f19909201916020918201910161107c565b51815160209384036101000a60001901801990921691161790526d161134b9a4b73a32b93730b6111d60911b919093019081528c51600e909101928d0191508083835b602083106110fd5780518252601f1990920191602091820191016110de565b51815160209384036101000a60001901801990921691161790526e16113732b2b239a9b2b73232b9111d60891b919093019081528b51600f909101928c0191508083835b602083106111605780518252601f199092019160209182019101611141565b6001836020036101000a03801982511681845116808217855250505050505090500180600b60fa1b81525060010188805190602001908083835b602083106111b95780518252601f19909201916020918201910161119a565b51815160209384036101000a60001901801990921691161790526c1611383937b837b9b2b9111d1160991b919093019081528951600d909101928a0191508083835b6020831061121a5780518252601f1990920191602091820191016111fb565b51815160209384036101000a60001901801990921691161790526c11161132b732213637b1b5911d60991b919093019081528851600d90910192890191508083835b6020831061127b5780518252601f19909201916020918201910161125c565b51815160209384036101000a60001901801990921691161790526d16113a32b936b4b730ba32b2111d60911b919093019081528751600e90910192880191508083835b602083106112dd5780518252601f1990920191602091820191016112be565b51815160209384036101000a60001901801990921691161790526b161130b1b1b2b83a32b2111d60a11b919093019081528651600c90910192870191508083835b6020831061133d5780518252601f19909201916020918201910161131e565b51815160209384036101000a60001901801990921691161790526a16113932b33ab9b2b2111d60a91b919093019081528551600b90910192860191508083835b6020831061139c5780518252601f19909201916020918201910161137d565b51815160209384036101000a60001901801990921691161790526b16113234b9b0b13632b2111d60a11b919093019081528451600c90910192850191508083835b602083106113fc5780518252601f1990920191602091820191016113dd565b6001836020036101000a03801982511681845116808217855250505050505090500180607d60f81b8152506001019c50505050505050505050505050604051602081830303815290604052905090565b60085460ff1690565b60005460ff166114965760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff16156114e8576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff1615611535576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff161561157b576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a54116115c0576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a544310611606576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b600154604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561166057600080fd5b505af1158015611674573d6000803e3d6000fd5b505050506040513d602081101561168a57600080fd5b5050336000818152600d60209081526040918290208054850190819055600f805486019055825185815292519093927f68e07974e86f9190b39c5e1783e6ba66b3d0d7ccf507de51450f14e594d1686892908290030190a26116ea613b5b565b5050565b60606116f984611ba0565b611702846122fa565b61170b84611ba0565b6040516020018080711139b7bab931b2a637b1b0ba34b7b7111d1160711b81525060120184805190602001908083835b6020831061175a5780518252601f19909201916020918201910161173b565b51815160209384036101000a60001901801990921691161790527411161139b7bab931b2a637b1b0ba34b7b724b2111d60591b919093019081528551601590910192860191508083835b602083106117c35780518252601f1990920191602091820191016117a4565b51815160209384036101000a60001901801990921691161790526c16113637b1b0ba34b7b7111d1160991b919093019081528451600d90910192850191508083835b602083106118245780518252601f199092019160209182019101611805565b6001836020036101000a038019825116818451168082178552505050505050905001935050505060405160208183030381529060405290509392505050565b60005460ff166118a45760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b60005461010090046001600160a01b031633146118f25760405162461bcd60e51b8152600401808060200182810382526022815260200180613c7a6022913960400191505060405180910390fd5b600a541561193a576040805162461bcd60e51b815260206004820152601060248201526f416c726561647920737461727465642160801b604482015290519081900360640190fd5b600c805460ff1960ff60a81b19909116600160a81b17166001179055565b60005460ff166119995760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff16156119eb576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b6000600a5411611a30576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b60135460ff16611a8c57600a54431015611a8c576040805162461bcd60e51b8152602060048201526018602482015277537572766579206973207374696c6c2072756e6e696e672160401b604482015290519081900360640190fd5b600c5460ff16158015611aa95750600c54600160a81b900460ff16155b15611abb57611ab66109da565b610bce565b610bce6001613700565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109cf5780601f106109a4576101008083540402835291602001916109cf565b600a5490565b60028054604080516020601f60001961010060018716150201909416859004938401819004810282018101909252828152606093909290918301828280156109cf5780601f106109a4576101008083540402835291602001916109cf565b60045490565b600554600160a01b900460ff1690565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180368337019050509050600360fc1b81600081518110611c0457fe5b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611c2d57fe5b60200101906001600160f81b031916908160001a90535060005b6014811015611d13578260048583600c0160208110611c6257fe5b1a60f81b6001600160f81b031916901c60f81c60ff1681518110611c8257fe5b602001015160f81c60f81b828260020260020181518110611c9f57fe5b60200101906001600160f81b031916908160001a905350828482600c0160208110611cc657fe5b825191901a600f16908110611cd757fe5b602001015160f81c60f81b828260020260030181518110611cf457fe5b60200101906001600160f81b031916908160001a905350600101611c47565b50925050505b919050565b606080829050600281511015611d4e5750506040805180820190915260028152615b5d60f01b6020820152611d19565b605b60f81b6001600160f81b03191681600081518110611d6a57fe5b01602001516001600160f81b03191614611d9e5750506040805180820190915260028152615b5d60f01b6020820152611d19565b8051605d60f81b9082906000198101908110611db657fe5b01602001516001600160f81b03191614611dea5750506040805180820190915260028152615b5d60f01b6020820152611d19565b5090919050565b60035460ff1690565b60005460ff16611e3b5760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff1615611e8d576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff1615611eda576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff1615611f20576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a5411611f65576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a544310611fab576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b336000908152600d6020526040902054811115612005576040805162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015290519081900360640190fd5b336000818152600d6020908152604080832080548690039055600f80548690039055600e82529182902080548501908190556010805486019055825185815292519093927f66ac89bb1a67976b7989a763cdec43b50a592dc86bb59f48d08e26572cb1522192908290030190a26116ea613b5b565b60005460ff166120bb5760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff161561210d576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff161561215a576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff16156121a0576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a54116121e5576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a54431061222b576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b336000908152600e6020526040902054811115612285576040805162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015290519081900360640190fd5b336000818152600e6020908152604080832080548690039055601080548690039055600d8252918290208054850190819055600f805486019055825185815292519093927f483d089c46398a02a8985779ec41436d62364736e8a9b40a10183fa12867839292908290030190a26116ea613b5b565b60608161231f57506040805180820190915260018152600360fc1b6020820152611d19565b8160005b811561233757600101600a82049150612323565b60608167ffffffffffffffff8111801561235057600080fd5b506040519080825280601f01601f19166020018201604052801561237b576020820181803683370190505b50905060001982015b8515611d1357600a860660300160f81b828280600190039350815181106123a757fe5b60200101906001600160f81b031916908160001a905350600a86049550612384565b600c54600160a81b900460ff1690565b60005460ff161561241b5760405162461bcd60e51b8152600401808060200182810382526021815260200180613d166021913960400191505060405180910390fd5b60005461010090046001600160a01b031633146124695760405162461bcd60e51b8152600401808060200182810382526029815260200180613c9c6029913960400191505060405180910390fd5b6003805460048890556005805460ff60a01b1916600160a01b891515021790556008805460ff199081168815151761ff001916610100881515810291909117909255600c8054610100600160a81b03199081166001600160a01b0389811686029190911790925560005494168c82168402179091168c1515179093556127479291041663841d0ed78a612531576040518060400160405280601e81526020017f6765744d696e696d756d426c6f636b4e756d626572466f72537572766579000081525061254b565b604051806060016040528060278152602001613c53602791395b604051806020016040528060008152506040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b838110156125ab578181015183820152602001612593565b50505050905090810190601f1680156125d85780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561260b5781810151838201526020016125f3565b50505050905090810190601f1680156126385780820380516001836020036101000a031916815260200191505b5094505050505060006040518083038186803b15801561265757600080fd5b505afa15801561266b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561269457600080fd5b8101908080516040519392919084600160201b8211156126b357600080fd5b9083019060208201858111156126c857600080fd5b8251600160201b8111828201881017156126e157600080fd5b82525081516020918201929091019080838360005b8381101561270e5781810151838201526020016126f6565b50505050905090810190601f16801561273b5780820380516001836020036101000a031916815260200191505b50604052505050612c4e565b600b5560125550506000805460ff191660011790555050505050565b6001600160a01b03166000908152600d6020908152604080832054600e909252909120549091565b600b5490565b60005461010090046001600160a01b031690565b60005460ff166127e65760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff1615612838576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff1615612885576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff16156128cb576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a5411612910576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a544310612956576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b600154604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156129b057600080fd5b505af11580156129c4573d6000803e3d6000fd5b505050506040513d60208110156129da57600080fd5b5050336000818152600e602090815260409182902080548501908190556010805486019055825185815292519093927f4e855894dd91aeb0192726b247db8c42f6d1275c4094286dfeadd2005971a1b492908290030190a26116ea613b5b565b60125490565b600854610100900460ff1690565b60005460ff16612a8f5760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff1615612ae1576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b6000600a5411612b26576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b60135460ff16612b8257600a54431015612b82576040805162461bcd60e51b8152602060048201526018602482015277537572766579206973207374696c6c2072756e6e696e672160401b604482015290519081900360640190fd5b60005461010090046001600160a01b03163314612bdd576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a6564204163636573732160601b604482015290519081900360640190fd5b600c5460ff1615612c2b576040805162461bcd60e51b8152602060048201526013602482015272416c7265616479207465726d696e617465642160681b604482015290519081900360640190fd5b600c805460ff19166001179055565b60035461010090046001600160a01b031690565b60006020825110611d1957506020015190565b60005460ff16612ca25760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b60005461010090046001600160a01b03163314612cf05760405162461bcd60e51b8152600401808060200182810382526022815260200180613c7a6022913960400191505060405180910390fd5b600a5415612d38576040805162461bcd60e51b815260206004820152601060248201526f416c726561647920737461727465642160801b604482015290519081900360640190fd5b600c54600160a81b900460ff1615612d8b576040805162461bcd60e51b8152602060048201526011602482015270416c72656164792064697361626c65642160781b604482015290519081900360640190fd5b600b544301600a55565b6005546001600160a01b031690565b600c5460ff1690565b600c5461010090046001600160a01b031690565b60005460ff16612e025760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff1615612e54576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff1615612ea1576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff1615612ee7576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a5411612f2c576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a544310612f72576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b336000908152600e6020526040902054811115612fcc576040805162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015290519081900360640190fd5b6001546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561302057600080fd5b505af1158015613034573d6000803e3d6000fd5b505050506040513d602081101561304a57600080fd5b5050336000818152600e6020908152604091829020805485900390819055601080548690039055825185815292519093927fa369065c2bc9cea922be2bf705101c039bc3af5575b8548b4d16d6a0b1893e2592908290030190a25050565b60005460ff166130e95760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff161561313b576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff1615613188576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff16156131ce576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a5411613213576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a544310613259576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b336000908152600e6020908152604080832054600d90925290912054016132b3576040805162461bcd60e51b81526020600482015260096024820152684e6f20766f7465732160b81b604482015290519081900360640190fd5b336000818152600d6020908152604080832054600e835281842054600154835163a9059cbb60e01b8152600481019790975281830160248801529251919590946001600160a01b039093169363a9059cbb9360448084019492938390030190829087803b15801561332357600080fd5b505af1158015613337573d6000803e3d6000fd5b505050506040513d602081101561334d57600080fd5b5050336000818152600d60209081526040808320839055600e825280832092909255600f805486900390556010805485900390558151848601815291517f1dd395e89b5da0e80f0242ec498fdfcaa6bc77d32b4417d89ec195e160fd7ad89281900390910190a25050565b60005460ff166133f95760405162461bcd60e51b8152600401808060200182810382526031815260200180613cc56031913960400191505060405180910390fd5b600c54600160a81b900460ff161561344b576040805162461bcd60e51b815260206004820152601060248201526f5375727665792064697361626c65642160801b604482015290519081900360640190fd5b600c5460ff1615613498576040805162461bcd60e51b8152602060048201526012602482015271537572766579205465726d696e617465642160701b604482015290519081900360640190fd5b60135460ff16156134de576040805162461bcd60e51b81526020600482015260176024820152600080516020613c33833981519152604482015290519081900360640190fd5b6000600a5411613523576040805162461bcd60e51b81526020600482015260136024820152600080516020613cf6833981519152604482015290519081900360640190fd5b600a544310613569576040805162461bcd60e51b815260206004820152600d60248201526c53757276657920656e6465642160981b604482015290519081900360640190fd5b336000908152600d60205260409020548111156135c3576040805162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b604482015290519081900360640190fd5b6001546040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b15801561361757600080fd5b505af115801561362b573d6000803e3d6000fd5b505050506040513d602081101561364157600080fd5b5050336000818152600d6020908152604091829020805485900390819055600f80548690039055825185815292519093927fc4e9f6c43fa16caaa3278b92f5fadf533efad8e8124fa4253fd9490cdc0742b492908290030190a25050565b60098054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109cf5780601f106109a4576101008083540402835291602001916109cf565b8015806137285750336000908152600e6020908152604080832054600d909252909120540115155b613770576040805162461bcd60e51b81526020600482015260146024820152734e6f7468696e6720746f2057697468647261772160601b604482015290519081900360640190fd5b80158061378d57503360009081526011602052604090205460ff16155b6137d4576040805162461bcd60e51b8152602060048201526013602482015272416c726561647920576974686472617765642160681b604482015290519081900360640190fd5b336000908152600e6020908152604080832054600d90925290912054011580159061380f57503360009081526011602052604090205460ff16155b156138c357600154336000818152600e6020908152604080832054600d835281842054825163a9059cbb60e01b81526004810196909652016024850152516001600160a01b039094169363a9059cbb93604480820194918390030190829087803b15801561387c57600080fd5b505af1158015613890573d6000803e3d6000fd5b505050506040513d60208110156138a657600080fd5b5050336000908152601160205260409020805460ff191660011790555b50565b60078054604080516020600260018516156101000260001901909416849004601f810182900482028301820190935282825260609460069361395e93928301828280156139545780601f1061392957610100808354040283529160200191613954565b820191906000526020600020905b81548152906001019060200180831161393757829003601f168201915b5050505050611d1e565b600960405160200180806b1131b7b232a730b6b2911d1160a11b815250600c01858054600181600116156101000203166002900480156139d55780601f106139b35761010080835404028352918201916139d5565b820191906000526020600020905b8154815290600101906020018083116139c1575b5050807411161136b2ba3437b229b4b3b730ba3ab932911d1160591b81525060150184805460018160011615610100020316600290048015613a4e5780601f10613a2c576101008083540402835291820191613a4e565b820191906000526020600020905b815481529060010190602001808311613a3a575b5050807f222c2272657475726e416269506172616d65746572734172726179223a000000815250601d0183805190602001908083835b60208310613aa35780518252601f199092019160209182019101613a84565b6001836020036101000a038019825116818451168082178552505050505050905001806c16113932b83630b1b2b9911d1160991b815250600d0182805460018160011615610100020316600290048015613b345780601f10613b12576101008083540402835291820191613b34565b820191906000526020600020905b815481529060010190602001808311613b20575b5050601160f91b815260408051601e19818403018152600190920190529550505050505090565b6012541580613b7b5750601254600f54108015613b7b5750601254601054105b15613b8557610bce565b6013805460ff19166001179055610bce6109da565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613bdb57805160ff1916838001178555613c08565b82800160010185558215613c08579182015b82811115613c08578251825591602001919060010190613bed565b50613c14929150613c18565b5090565b6109d791905b80821115613c145760008155600101613c1e56fe566f7465732048617264204361702072656163686564210000000000000000006765744d696e696d756d426c6f636b4e756d626572466f72456d657267656e63795375727665794f6e6c792050726f78792063616e2063616c6c20746869732066756e6374696f6e214f6e6c79204f726967696e616c2050726f78792063616e2063616c6c2074686973206d6574686f64215374696c6c2077616974696e6720666f7220736574436f6c6c61746572616c4461746120746f2062652063616c6c656421537572766579204e6f7420537461727465642100000000000000000000000000736574436f6c6c61746572616c4461746120616c72656164792063616c6c656421a2646970667358221220cc7f3bf856466276233180424b6f508fe3d144c7a0a548366500787677c07fa564736f6c6343000608003343616e6e6f742068617665207a65726f206164647265737320666f722066756e6374696f6e616c69747920746f20736574206f72206f6e652074696d652066756e6374696f6e616c69747920746f2063616c6c636f64654e616d6520697320616c7265616479207573656420627920616e6f746865722066756e6374696f6e616c69747943616e6e6f74206861766520656d70747920737472696e6720666f72206d6574686f645369676e617475726543616e6e6f74207265706c61636520756e6578697374696e67206f7220696e6163746976652066756e6374696f6e616c6974794f6e6c792050726f78792063616e2063616c6c20746869732066756e6374696f6e616c6974794f6e652054696d652046756e6374696f6e616c697479206d6574686f64207369676e617475726520616c6c6f7765642069732063616c6c4f6e6554696d65286164647265737329a26469706673582212206b900863d1b72a8b7c1d3692f37b10d62ed3c830cf261066e61a771a30868fdb64736f6c63430006080033

Deployed Bytecode Sourcemap

185:3571:6:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;185:3571:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;2465:651:6;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2465:651:6;-1:-1:-1;;;;;2465:651:6;;:::i;:::-;;3346:251;;;:::i;3251:89::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3251:89:6;;;;;;;;;;;;;;483:403;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;483:403:6;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;483:403:6;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;483:403:6;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;483:403:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;483:403:6;;-1:-1:-1;;;;;483:403:6;;;;;;;;-1:-1:-1;483:403:6;;;;-1:-1:-1;483:403:6;;;;-1:-1:-1;;;;11:28;;8:2;;;52:1;49;42:12;8:2;483:403:6;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;483:403:6;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;483:403:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;483:403:6;;;;;;;;-1:-1:-1;483:403:6;;-1:-1:-1;;;;;11:28;;8:2;;;52:1;49;42:12;8:2;483:403:6;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;483:403:6;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;483:403:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;483:403:6;;;;;;;;-1:-1:-1;483:403:6;;-1:-1:-1;;;;;11:28;;8:2;;;52:1;49;42:12;8:2;483:403:6;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;483:403:6;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;483:403:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;483:403:6;;-1:-1:-1;483:403:6;;-1:-1:-1;;;;;483:403:6:i;3122:123::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3122:123:6;-1:-1:-1;;;;;3122:123:6;;:::i;:::-;;;;;;;;;;;;;;;;;;2465:651;409:6;;-1:-1:-1;;;;;409:6:6;387:10;:29;379:80;;;;-1:-1:-1;;;379:80:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2557:27:6;::::1;;::::0;;;:10:::1;:27;::::0;;;;;::::1;;2549:60;;;::::0;;-1:-1:-1;;;2549:60:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2549:60:6;;;;;;;;;;;;;::::1;;2620:34;2683:15;2620:79;;2710:22;2735:8;-1:-1:-1::0;;;;;2735:26:6::1;;:28;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2735:28:6;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2735:28:6;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;2735:28:6;;-1:-1:-1;2782:18:6;2774:54:::1;;;::::0;;-1:-1:-1;;;2774:54:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;2848:8;-1:-1:-1::0;;;;;2848:19:6::1;;:21;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2848:21:6;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2848:21:6;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;2848:21:6;2847:22:::1;2839:56;;;::::0;;-1:-1:-1;;;2839:56:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2839:56:6;;;;;;;;;;;;;::::1;;2910:8;-1:-1:-1::0;;;;;2910:30:6::1;;:32;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;2910:32:6;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;2910:32:6;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;2910:32:6;2906:130:::1;;2982:14;2966:12;:30;;2958:67;;;::::0;;-1:-1:-1;;;2958:67:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3055:8;-1:-1:-1::0;;;;;3055:21:6::1;;:23;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;3055:23:6;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3055:23:6;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;3055:23:6;3054:24:::1;3046:63;;;::::0;;-1:-1:-1;;;3046:63:6;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;469:1;;2465:651:::0;:::o;3346:251::-;3418:1;3400:6;-1:-1:-1;;;;;3400:6:6;:20;;:44;;-1:-1:-1;3424:6:6;;-1:-1:-1;;;;;3424:6:6;3434:10;3424:20;3400:44;3464:1;3446:6;-1:-1:-1;;;;;3446:6:6;:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3446:77:6;;;;3392:132;;;;;-1:-1:-1;;;3392:132:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3392:132:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3561:1:6;3543:6;-1:-1:-1;;;;;3543:6:6;:20;:47;;3588:1;3543:47;;;3567:10;3543:47;3534:6;:56;;-1:-1:-1;;;;;;3534:56:6;-1:-1:-1;;;;;3534:56:6;;;;;;;;;;3346:251::o;3251:89::-;3301:7;3327:6;-1:-1:-1;;;;;3327:6:6;3251:89;:::o;483:403::-;675:7;409:6;;-1:-1:-1;;;;;409:6:6;387:10;:29;379:80;;;;-1:-1:-1;;;379:80:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;701:178:::1;713:8;723;733:15;750:8;797;807;817:15;834:24;860:8;870:6;::::0;::::1;;;;;;;-1:-1:-1::0;;;;;870:6:6::1;768:109;;;;;:::i;:::-;;;;;;-1:-1:-1::0;;;;;768:109:6::1;-1:-1:-1::0;;;;;768:109:6::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;768:109:6::1;-1:-1:-1::0;;;;;768:109:6::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;768:109:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;768:109:6;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;768:109:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;768:109:6;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;768:109:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;768:109:6;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;12:14;768:109:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;768:109:6;701:11;:178::i;:::-;694:185:::0;483:403;-1:-1:-1;;;;;;483:403:6:o;3122:123::-;-1:-1:-1;;;;;3218:20:6;3195:4;3218:20;;;:10;:20;;;;;;;;;3122:123::o;2131:328::-;2290:7;2310:64;2328:8;2338;2348:15;2365:8;2310:17;:64::i;:::-;-1:-1:-1;;;;;;2385:27:6;;;;;;2415:4;2385:27;;;;;;;;:34;;-1:-1:-1;;2385:34:6;;;;;;:27;2131:328;-1:-1:-1;;;;2131:328:6:o;892:1233::-;1040:16;1060:28;1075:8;1060:28;;;;;;;;;;;;:14;:28::i;:::-;1059:29;1040:48;;1098:16;1118:28;1133:8;1118:28;;;;;;;;;;;;:14;:28::i;:::-;1117:29;1098:48;;1166:11;:43;;;;1182:11;1181:12;:28;;;;;1198:11;1197:12;1181:28;1165:77;;1238:4;1165:77;;;-1:-1:-1;;;;;1213:22:6;;;;1165:77;1157:173;;;;-1:-1:-1;;;1157:173:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1349:22:6;;;;:62;;;1376:35;1391:15;1376:35;;;;;;;;;;;;:14;:35::i;:::-;1375:36;1349:62;1341:119;;;;-1:-1:-1;;;1341:119:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1479:11;:26;;;;1494:11;1479:26;:91;;1515:55;1530:15;1515:55;;;;;;;;;;;;;-1:-1:-1;;;1515:55:6;;;:14;:55::i;:::-;1479:91;;;1508:4;1479:91;1471:175;;;;-1:-1:-1;;;1471:175:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1657:49;1746:6;;;;;;;;;-1:-1:-1;;;;;1746:6:6;-1:-1:-1;;;;;1736:53:6;;:55;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1736:55:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1736:55:6;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1736:55:6;;-1:-1:-1;1811:11:6;:64;;;;-1:-1:-1;1826:49:6;;-1:-1:-1;;;1826:49:6;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1826:39:6;;;;;1866:8;;1826:49;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;1826:49:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1826:49:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1826:49:6;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1826:49:6;1811:64;:108;;1915:4;1811:108;;;1878:34;1893:8;1903;1878:14;:34::i;:::-;1803:170;;;;-1:-1:-1;;;1803:170:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1992:11;:70;;2058:4;1992:70;;;2006:49;;-1:-1:-1;;;2006:49:6;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2006:39:6;;;;;2046:8;;2006:49;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2006:49:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2006:49:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2006:49:6;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2006:49:6;1992:70;1984:134;;;;-1:-1:-1;;;1984:134:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;892:1233;;;;;;;:::o;3603:151::-;3728:19;;;;;;;3705;;;;;;;;;;:42;;3603:151::o;-1:-1:-1:-;;;;;;;;:::o

Swarm Source

ipfs://6b900863d1b72a8b7c1d3692f37b10d62ed3c830cf261066e61a771a30868fdb

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.