ETH Price: $2,329.43 (+0.70%)

Contract

0x3fd80bBb0B71Bc48655B307573EE73ea77BE2EF9
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

2 Internal Transactions found.

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
-98303552020-04-08 8:09:272170 days ago1586333367
0x3fd80bBb...a77BE2EF9
 Contract Creation0 ETH
-98303552020-04-08 8:09:272170 days ago1586333367  Contract Creation0 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x7385a81F...2b8c7Ecc2
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Moloch

Compiler Version
v0.5.13+commit.5b0b510c

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-01-30
*/

pragma solidity ^0.5.3;

contract Moloch {
    using SafeMath for uint256;

    /***************
    GLOBAL CONSTANTS
    ***************/
    uint256 public periodDuration; // default = 17280 = 4.8 hours in seconds (5 periods per day)
    uint256 public votingPeriodLength; // default = 35 periods (7 days)
    uint256 public gracePeriodLength; // default = 35 periods (7 days)
    uint256 public abortWindow; // default = 5 periods (1 day)
    uint256 public proposalDeposit; // default = 10 ETH (~$1,000 worth of ETH at contract deployment)
    uint256 public dilutionBound; // default = 3 - maximum multiplier a YES voter will be obligated to pay in case of mass ragequit
    uint256 public processingReward; // default = 0.1 - amount of ETH to give to whoever processes a proposal
    uint256 public summoningTime; // needed to determine the current period
    string public summoningStamp; // string stamp recording details of Moloch Summoning 

    IERC20 public approvedToken; // approved token contract reference; default = wETH
    GuildBank public guildBank; // guild bank contract reference

    // HARD-CODED LIMITS
    // These numbers are quite arbitrary; they are small enough to avoid overflows when doing calculations
    // with periods or shares, yet big enough to not limit reasonable use cases.
    uint256 constant MAX_VOTING_PERIOD_LENGTH = 10**18; // maximum length of voting period
    uint256 constant MAX_GRACE_PERIOD_LENGTH = 10**18; // maximum length of grace period
    uint256 constant MAX_DILUTION_BOUND = 10**18; // maximum dilution bound
    uint256 constant MAX_NUMBER_OF_SHARES = 10**18; // maximum number of shares that can be minted

    /***************
    EVENTS
    ***************/
    event SubmitProposal(uint256 proposalIndex, address indexed delegateKey, address indexed memberAddress, address indexed applicant, uint256 tokenTribute, uint256 sharesRequested);
    event SubmitVote(uint256 indexed proposalIndex, address indexed delegateKey, address indexed memberAddress, uint8 uintVote);
    event ProcessProposal(uint256 indexed proposalIndex, address indexed applicant, address indexed memberAddress, uint256 tokenTribute, uint256 sharesRequested, bool didPass);
    event Ragequit(address indexed memberAddress, uint256 sharesToBurn);
    event Abort(uint256 indexed proposalIndex, address applicantAddress);
    event UpdateDelegateKey(address indexed memberAddress, address newDelegateKey);
    event SummonComplete(address indexed summoner, uint256 shares);

    /******************
    INTERNAL ACCOUNTING
    ******************/
    uint256 public totalShares = 0; // total shares across all members
    uint256 public totalSharesRequested = 0; // total shares that have been requested in unprocessed proposals

    enum Vote {
        Null, // default value, counted as abstention
        Yes,
        No
    }

    struct Member {
        address delegateKey; // the key responsible for submitting proposals and voting - defaults to member address unless updated
        uint256 shares; // the # of shares assigned to this member
        bool exists; // always true once a member has been created
        uint256 highestIndexYesVote; // highest proposal index # on which the member voted YES
    }

    struct Proposal {
        address proposer; // the member who submitted the proposal
        address applicant; // the applicant who wishes to become a member - this key will be used for withdrawals
        uint256 sharesRequested; // the # of shares the applicant is requesting
        uint256 startingPeriod; // the period in which voting can start for this proposal
        uint256 yesVotes; // the total number of YES votes for this proposal
        uint256 noVotes; // the total number of NO votes for this proposal
        bool processed; // true only if the proposal has been processed
        bool didPass; // true only if the proposal passed
        bool aborted; // true only if applicant calls "abort" fn before end of voting period
        uint256 tokenTribute; // amount of tokens offered as tribute
        string details; // proposal details - could be IPFS hash, plaintext, or JSON
        uint256 maxTotalSharesAtYesVote; // the maximum # of total shares encountered at a yes vote on this proposal
        mapping (address => Vote) votesByMember; // the votes on this proposal by each member
    }

    mapping (address => Member) public members;
    mapping (address => address) public memberAddressByDelegateKey;
    Proposal[] public proposalQueue;

    /********
    MODIFIERS
    ********/
    modifier onlyMember {
        require(members[msg.sender].shares > 0, "Moloch::onlyMember - not a member");
        _;
    }

    modifier onlyDelegate {
        require(members[memberAddressByDelegateKey[msg.sender]].shares > 0, "Moloch::onlyDelegate - not a delegate");
        _;
    }

    /********
    FUNCTIONS
    ********/
    constructor(
        address summoner,
        address _approvedToken,
        uint256 _periodDuration,
        uint256 _votingPeriodLength,
        uint256 _gracePeriodLength,
        uint256 _abortWindow,
        uint256 _proposalDeposit,
        uint256 _dilutionBound,
        uint256 _processingReward,
        string memory _summoningStamp
    ) public {
        require(summoner != address(0), "Moloch::constructor - summoner cannot be 0");
        require(_approvedToken != address(0), "Moloch::constructor - _approvedToken cannot be 0");
        require(_periodDuration > 0, "Moloch::constructor - _periodDuration cannot be 0");
        require(_votingPeriodLength > 0, "Moloch::constructor - _votingPeriodLength cannot be 0");
        require(_votingPeriodLength <= MAX_VOTING_PERIOD_LENGTH, "Moloch::constructor - _votingPeriodLength exceeds limit");
        require(_gracePeriodLength <= MAX_GRACE_PERIOD_LENGTH, "Moloch::constructor - _gracePeriodLength exceeds limit");
        require(_abortWindow > 0, "Moloch::constructor - _abortWindow cannot be 0");
        require(_abortWindow <= _votingPeriodLength, "Moloch::constructor - _abortWindow must be smaller than or equal to _votingPeriodLength");
        require(_dilutionBound > 0, "Moloch::constructor - _dilutionBound cannot be 0");
        require(_dilutionBound <= MAX_DILUTION_BOUND, "Moloch::constructor - _dilutionBound exceeds limit");
        require(_proposalDeposit >= _processingReward, "Moloch::constructor - _proposalDeposit cannot be smaller than _processingReward");

        approvedToken = IERC20(_approvedToken);

        guildBank = new GuildBank(_approvedToken);

        periodDuration = _periodDuration;
        votingPeriodLength = _votingPeriodLength;
        gracePeriodLength = _gracePeriodLength;
        abortWindow = _abortWindow;
        proposalDeposit = _proposalDeposit;
        dilutionBound = _dilutionBound;
        processingReward = _processingReward;
        summoningStamp = _summoningStamp;

        summoningTime = now;

        members[summoner] = Member(summoner, 1, true, 0);
        memberAddressByDelegateKey[summoner] = summoner;
        totalShares = 1;

        emit SummonComplete(summoner, 1);
    }

    /*****************
    PROPOSAL FUNCTIONS
    *****************/
    function submitProposal(
        address applicant,
        uint256 tokenTribute,
        uint256 sharesRequested,
        string memory details
    )
        public
        onlyDelegate
    {
        require(applicant != address(0), "Moloch::submitProposal - applicant cannot be 0");

        // Make sure we won't run into overflows when doing calculations with shares.
        // Note that totalShares + totalSharesRequested + sharesRequested is an upper bound
        // on the number of shares that can exist until this proposal has been processed.
        require(totalShares.add(totalSharesRequested).add(sharesRequested) <= MAX_NUMBER_OF_SHARES, "Moloch::submitProposal - too many shares requested");

        totalSharesRequested = totalSharesRequested.add(sharesRequested);

        address memberAddress = memberAddressByDelegateKey[msg.sender];

        // collect proposal deposit from proposer and store it in the Moloch until the proposal is processed
        require(approvedToken.transferFrom(msg.sender, address(this), proposalDeposit), "Moloch::submitProposal - proposal deposit token transfer failed");

        // collect tribute from applicant and store it in the Moloch until the proposal is processed
        require(approvedToken.transferFrom(applicant, address(this), tokenTribute), "Moloch::submitProposal - tribute token transfer failed");

        // compute startingPeriod for proposal
        uint256 startingPeriod = max(
            getCurrentPeriod(),
            proposalQueue.length == 0 ? 0 : proposalQueue[proposalQueue.length.sub(1)].startingPeriod
        ).add(1);

        // create proposal ...
        Proposal memory proposal = Proposal({
            proposer: memberAddress,
            applicant: applicant,
            sharesRequested: sharesRequested,
            startingPeriod: startingPeriod,
            yesVotes: 0,
            noVotes: 0,
            processed: false,
            didPass: false,
            aborted: false,
            tokenTribute: tokenTribute,
            details: details,
            maxTotalSharesAtYesVote: 0
        });

        // ... and append it to the queue
        proposalQueue.push(proposal);

        uint256 proposalIndex = proposalQueue.length.sub(1);
        emit SubmitProposal(proposalIndex, msg.sender, memberAddress, applicant, tokenTribute, sharesRequested);
    }

    function submitVote(uint256 proposalIndex, uint8 uintVote) public onlyDelegate {
        address memberAddress = memberAddressByDelegateKey[msg.sender];
        Member storage member = members[memberAddress];

        require(proposalIndex < proposalQueue.length, "Moloch::submitVote - proposal does not exist");
        Proposal storage proposal = proposalQueue[proposalIndex];

        require(uintVote < 3, "Moloch::submitVote - uintVote must be less than 3");
        Vote vote = Vote(uintVote);

        require(getCurrentPeriod() >= proposal.startingPeriod, "Moloch::submitVote - voting period has not started");
        require(!hasVotingPeriodExpired(proposal.startingPeriod), "Moloch::submitVote - proposal voting period has expired");
        require(proposal.votesByMember[memberAddress] == Vote.Null, "Moloch::submitVote - member has already voted on this proposal");
        require(vote == Vote.Yes || vote == Vote.No, "Moloch::submitVote - vote must be either Yes or No");
        require(!proposal.aborted, "Moloch::submitVote - proposal has been aborted");

        // store vote
        proposal.votesByMember[memberAddress] = vote;

        // count vote
        if (vote == Vote.Yes) {
            proposal.yesVotes = proposal.yesVotes.add(member.shares);

            // set highest index (latest) yes vote - must be processed for member to ragequit
            if (proposalIndex > member.highestIndexYesVote) {
                member.highestIndexYesVote = proposalIndex;
            }

            // set maximum of total shares encountered at a yes vote - used to bound dilution for yes voters
            if (totalShares > proposal.maxTotalSharesAtYesVote) {
                proposal.maxTotalSharesAtYesVote = totalShares;
            }

        } else if (vote == Vote.No) {
            proposal.noVotes = proposal.noVotes.add(member.shares);
        }

        emit SubmitVote(proposalIndex, msg.sender, memberAddress, uintVote);
    }

    function processProposal(uint256 proposalIndex) public {
        require(proposalIndex < proposalQueue.length, "Moloch::processProposal - proposal does not exist");
        Proposal storage proposal = proposalQueue[proposalIndex];

        require(getCurrentPeriod() >= proposal.startingPeriod.add(votingPeriodLength).add(gracePeriodLength), "Moloch::processProposal - proposal is not ready to be processed");
        require(proposal.processed == false, "Moloch::processProposal - proposal has already been processed");
        require(proposalIndex == 0 || proposalQueue[proposalIndex.sub(1)].processed, "Moloch::processProposal - previous proposal must be processed");

        proposal.processed = true;
        totalSharesRequested = totalSharesRequested.sub(proposal.sharesRequested);

        bool didPass = proposal.yesVotes > proposal.noVotes;

        // Make the proposal fail if the dilutionBound is exceeded
        if (totalShares.mul(dilutionBound) < proposal.maxTotalSharesAtYesVote) {
            didPass = false;
        }

        // PROPOSAL PASSED
        if (didPass && !proposal.aborted) {

            proposal.didPass = true;

            // if the applicant is already a member, add to their existing shares
            if (members[proposal.applicant].exists) {
                members[proposal.applicant].shares = members[proposal.applicant].shares.add(proposal.sharesRequested);

            // the applicant is a new member, create a new record for them
            } else {
                // if the applicant address is already taken by a member's delegateKey, reset it to their member address
                if (members[memberAddressByDelegateKey[proposal.applicant]].exists) {
                    address memberToOverride = memberAddressByDelegateKey[proposal.applicant];
                    memberAddressByDelegateKey[memberToOverride] = memberToOverride;
                    members[memberToOverride].delegateKey = memberToOverride;
                }

                // use applicant address as delegateKey by default
                members[proposal.applicant] = Member(proposal.applicant, proposal.sharesRequested, true, 0);
                memberAddressByDelegateKey[proposal.applicant] = proposal.applicant;
            }

            // mint new shares
            totalShares = totalShares.add(proposal.sharesRequested);

            // transfer tokens to guild bank
            require(
                approvedToken.transfer(address(guildBank), proposal.tokenTribute),
                "Moloch::processProposal - token transfer to guild bank failed"
            );

        // PROPOSAL FAILED OR ABORTED
        } else {
            // return all tokens to the applicant
            require(
                approvedToken.transfer(proposal.applicant, proposal.tokenTribute),
                "Moloch::processProposal - failing vote token transfer failed"
            );
        }

        // send msg.sender the processingReward
        require(
            approvedToken.transfer(msg.sender, processingReward),
            "Moloch::processProposal - failed to send processing reward to msg.sender"
        );

        // return deposit to proposer (subtract processing reward)
        require(
            approvedToken.transfer(proposal.proposer, proposalDeposit.sub(processingReward)),
            "Moloch::processProposal - failed to return proposal deposit to proposer"
        );

        emit ProcessProposal(
            proposalIndex,
            proposal.applicant,
            proposal.proposer,
            proposal.tokenTribute,
            proposal.sharesRequested,
            didPass
        );
    }

    function ragequit(uint256 sharesToBurn) public onlyMember {
        uint256 initialTotalShares = totalShares;

        Member storage member = members[msg.sender];

        require(member.shares >= sharesToBurn, "Moloch::ragequit - insufficient shares");

        require(canRagequit(member.highestIndexYesVote), "Moloch::ragequit - cant ragequit until highest index proposal member voted YES on is processed");

        // burn shares
        member.shares = member.shares.sub(sharesToBurn);
        totalShares = totalShares.sub(sharesToBurn);

        // instruct guildBank to transfer fair share of tokens to the ragequitter
        require(
            guildBank.withdraw(msg.sender, sharesToBurn, initialTotalShares),
            "Moloch::ragequit - withdrawal of tokens from guildBank failed"
        );

        emit Ragequit(msg.sender, sharesToBurn);
    }

    function abort(uint256 proposalIndex) public {
        require(proposalIndex < proposalQueue.length, "Moloch::abort - proposal does not exist");
        Proposal storage proposal = proposalQueue[proposalIndex];

        require(msg.sender == proposal.applicant, "Moloch::abort - msg.sender must be applicant");
        require(getCurrentPeriod() < proposal.startingPeriod.add(abortWindow), "Moloch::abort - abort window must not have passed");
        require(!proposal.aborted, "Moloch::abort - proposal must not have already been aborted");

        uint256 tokensToAbort = proposal.tokenTribute;
        proposal.tokenTribute = 0;
        proposal.aborted = true;

        // return all tokens to the applicant
        require(
            approvedToken.transfer(proposal.applicant, tokensToAbort),
            "Moloch::processProposal - failed to return tribute to applicant"
        );

        emit Abort(proposalIndex, msg.sender);
    }

    function updateDelegateKey(address newDelegateKey) public onlyMember {
        require(newDelegateKey != address(0), "Moloch::updateDelegateKey - newDelegateKey cannot be 0");

        // skip checks if member is setting the delegate key to their member address
        if (newDelegateKey != msg.sender) {
            require(!members[newDelegateKey].exists, "Moloch::updateDelegateKey - cant overwrite existing members");
            require(!members[memberAddressByDelegateKey[newDelegateKey]].exists, "Moloch::updateDelegateKey - cant overwrite existing delegate keys");
        }

        Member storage member = members[msg.sender];
        memberAddressByDelegateKey[member.delegateKey] = address(0);
        memberAddressByDelegateKey[newDelegateKey] = msg.sender;
        member.delegateKey = newDelegateKey;

        emit UpdateDelegateKey(msg.sender, newDelegateKey);
    }

    /***************
    GETTER FUNCTIONS
    ***************/
    function max(uint256 x, uint256 y) internal pure returns (uint256) {
        return x >= y ? x : y;
    }

    function getCurrentPeriod() public view returns (uint256) {
        return now.sub(summoningTime).div(periodDuration);
    }

    function getProposalQueueLength() public view returns (uint256) {
        return proposalQueue.length;
    }

    // can only ragequit if the latest proposal you voted YES on has been processed
    function canRagequit(uint256 highestIndexYesVote) public view returns (bool) {
        require(highestIndexYesVote < proposalQueue.length, "Moloch::canRagequit - proposal does not exist");
        return proposalQueue[highestIndexYesVote].processed;
    }

    function hasVotingPeriodExpired(uint256 startingPeriod) public view returns (bool) {
        return getCurrentPeriod() >= startingPeriod.add(votingPeriodLength);
    }

    function getMemberProposalVote(address memberAddress, uint256 proposalIndex) public view returns (Vote) {
        require(members[memberAddress].exists, "Moloch::getMemberProposalVote - member doesn't exist");
        require(proposalIndex < proposalQueue.length, "Moloch::getMemberProposalVote - proposal doesn't exist");
        return proposalQueue[proposalIndex].votesByMember[memberAddress];
    }
}

interface IERC20 {
    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender) external view returns (uint256);

    event Transfer(address indexed from, address indexed to, uint256 value);

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

contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @return the address of the owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * @notice Renouncing to ownership will leave the contract without an owner.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract GuildBank is Ownable {
    using SafeMath for uint256;

    IERC20 public approvedToken; // approved token contract reference

    event Withdrawal(address indexed receiver, uint256 amount);

    constructor(address approvedTokenAddress) public {
        approvedToken = IERC20(approvedTokenAddress);
    }

    function withdraw(address receiver, uint256 shares, uint256 totalShares) public onlyOwner returns (bool) {
        uint256 amount = approvedToken.balanceOf(address(this)).mul(shares).div(totalShares);
        emit Withdrawal(receiver, amount);
        return approvedToken.transfer(receiver, amount);
    }
}

library SafeMath {
    /**
     * @dev Multiplies two unsigned integers, reverts on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b);

        return c;
    }

    /**
     * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Adds two unsigned integers, reverts on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);

        return c;
    }

    /**
     * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
     * reverts when dividing by zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"summoner","type":"address"},{"internalType":"address","name":"_approvedToken","type":"address"},{"internalType":"uint256","name":"_periodDuration","type":"uint256"},{"internalType":"uint256","name":"_votingPeriodLength","type":"uint256"},{"internalType":"uint256","name":"_gracePeriodLength","type":"uint256"},{"internalType":"uint256","name":"_abortWindow","type":"uint256"},{"internalType":"uint256","name":"_proposalDeposit","type":"uint256"},{"internalType":"uint256","name":"_dilutionBound","type":"uint256"},{"internalType":"uint256","name":"_processingReward","type":"uint256"},{"internalType":"string","name":"_summoningStamp","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":false,"internalType":"address","name":"applicantAddress","type":"address"}],"name":"Abort","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"applicant","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenTribute","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"indexed":false,"internalType":"bool","name":"didPass","type":"bool"}],"name":"ProcessProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"sharesToBurn","type":"uint256"}],"name":"Ragequit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":true,"internalType":"address","name":"applicant","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenTribute","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sharesRequested","type":"uint256"}],"name":"SubmitProposal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"indexed":true,"internalType":"address","name":"delegateKey","type":"address"},{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"uint8","name":"uintVote","type":"uint8"}],"name":"SubmitVote","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"summoner","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"SummonComplete","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"memberAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newDelegateKey","type":"address"}],"name":"UpdateDelegateKey","type":"event"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"abort","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"abortWindow","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"approvedToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"highestIndexYesVote","type":"uint256"}],"name":"canRagequit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dilutionBound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"memberAddress","type":"address"},{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"getMemberProposalVote","outputs":[{"internalType":"enum Moloch.Vote","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getProposalQueueLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gracePeriodLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"guildBank","outputs":[{"internalType":"contract GuildBank","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"startingPeriod","type":"uint256"}],"name":"hasVotingPeriodExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"memberAddressByDelegateKey","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"members","outputs":[{"internalType":"address","name":"delegateKey","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"uint256","name":"highestIndexYesVote","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"periodDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"}],"name":"processProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"processingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposalQueue","outputs":[{"internalType":"address","name":"proposer","type":"address"},{"internalType":"address","name":"applicant","type":"address"},{"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"internalType":"uint256","name":"startingPeriod","type":"uint256"},{"internalType":"uint256","name":"yesVotes","type":"uint256"},{"internalType":"uint256","name":"noVotes","type":"uint256"},{"internalType":"bool","name":"processed","type":"bool"},{"internalType":"bool","name":"didPass","type":"bool"},{"internalType":"bool","name":"aborted","type":"bool"},{"internalType":"uint256","name":"tokenTribute","type":"uint256"},{"internalType":"string","name":"details","type":"string"},{"internalType":"uint256","name":"maxTotalSharesAtYesVote","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"sharesToBurn","type":"uint256"}],"name":"ragequit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"applicant","type":"address"},{"internalType":"uint256","name":"tokenTribute","type":"uint256"},{"internalType":"uint256","name":"sharesRequested","type":"uint256"},{"internalType":"string","name":"details","type":"string"}],"name":"submitProposal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalIndex","type":"uint256"},{"internalType":"uint8","name":"uintVote","type":"uint8"}],"name":"submitVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"summoningStamp","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"summoningTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSharesRequested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newDelegateKey","type":"address"}],"name":"updateDelegateKey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriodLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]

0x60806040526000600b556000600c553480156200001b57600080fd5b50604051620058183803806200581883398181016040526101408110156200004257600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080516040519392919084640100000000821115620000bd57600080fd5b83820191506020820185811115620000d457600080fd5b8251866001820283011164010000000082111715620000f257600080fd5b8083526020830192505050908051906020019080838360005b83811015620001285780820151818401526020810190506200010b565b50505050905090810190601f168015620001565780820380516001836020036101000a031916815260200191505b50604052505050600073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415620001e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180620055e3602a913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614156200026d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180620057b86030913960400191505060405180910390fd5b60008811620002c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180620057876031913960400191505060405180910390fd5b6000871162000323576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180620057526035913960400191505060405180910390fd5b670de0b6b3a764000087111562000386576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806200560d6037913960400191505060405180910390fd5b670de0b6b3a7640000861115620003e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806200571c6036913960400191505060405180910390fd5b6000851162000444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180620055b5602e913960400191505060405180910390fd5b868511156200049f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526057815260200180620056c56057913960600191505060405180910390fd5b60008311620004fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180620057e86030913960400191505060405180910390fd5b670de0b6b3a76400008311156200055d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180620056936032913960400191505060405180910390fd5b81841015620005b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604f81526020018062005644604f913960600191505060405180910390fd5b88600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550886040516200060890620008cb565b808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050604051809103906000f0801580156200065b573d6000803e3d6000fd5b50600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550876000819055508660018190555085600281905550846003819055508360048190555082600581905550816006819055508060089080519060200190620006e5929190620008d9565b504260078190555060405180608001604052808b73ffffffffffffffffffffffffffffffffffffffff168152602001600181526020016001151581526020016000815250600d60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020160006101000a81548160ff0219169083151502179055506060820151816003015590505089600e60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b819055508973ffffffffffffffffffffffffffffffffffffffff167f03995a801b13c36325306deef859ef977ce61c6e15a794281bf969d20482522760016040518082815260200191505060405180910390a25050505050505050505062000988565b61089d8062004d1883390190565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200091c57805160ff19168380011785556200094d565b828001600101855582156200094d579182015b828111156200094c5782518255916020019190600101906200092f565b5b5090506200095c919062000960565b5090565b6200098591905b808211156200098157600081600090555060010162000967565b5090565b90565b61438080620009986000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80637d5b6c72116100f9578063a3dc380011610097578063b470aade11610071578063b470aade146108d6578063bab46259146108f4578063e50701f41461093e578063e63bc62d1461096c576101a9565b8063a3dc380014610828578063a42afd291461086e578063afe5475f146108b8576101a9565b80638b15a605116100d35780638b15a6051461069a5780639425a476146106b8578063962006c3146106fe57806399653fbe146107ed576101a9565b80637d5b6c72146106305780638340bbce1461064e5780638436593f1461066c576101a9565b80633a98ef39116101665780635dec26b4116101405780635dec26b41461055357806363858f2d146105d65780637896ddaf146105f4578063797daf7014610612576101a9565b80633a98ef39146103595780633b214a7414610377578063402c1794146104cf576101a9565b806303e32fa1146101ae578063044a0ca8146101cc578063086146d21461023c57806308ae4b0c1461025a5780631a396a4a146102f75780632582bf2a14610315575b600080fd5b6101b661099a565b6040518082815260200191505060405180910390f35b610218600480360360408110156101e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109a0565b6040518082600281111561022857fe5b60ff16815260200191505060405180910390f35b610244610b15565b6040518082815260200191505060405180910390f35b61029c6004803603602081101561027057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b45565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200182815260200194505050505060405180910390f35b6102ff610ba2565b6040518082815260200191505060405180910390f35b6103576004803603602081101561032b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ba8565b005b6103616110cd565b6040518082815260200191505060405180910390f35b6103a36004803603602081101561038d57600080fd5b81019080803590602001909291905050506110d3565b604051808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a815260200189815260200188815260200187151515158152602001861515151581526020018515151515815260200184815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561048957808201518184015260208101905061046e565b50505050905090810190601f1680156104b65780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b610511600480360360208110156104e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061123f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61055b611272565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561059b578082015181840152602081019050610580565b50505050905090810190601f1680156105c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105de611310565b6040518082815260200191505060405180910390f35b6105fc611316565b6040518082815260200191505060405180910390f35b61061a61131c565b6040518082815260200191505060405180910390f35b610638611329565b6040518082815260200191505060405180910390f35b61065661132f565b6040518082815260200191505060405180910390f35b6106986004803603602081101561068257600080fd5b8101908080359060200190929190505050611335565b005b6106a26116a7565b6040518082815260200191505060405180910390f35b6106e4600480360360208110156106ce57600080fd5b81019080803590602001909291905050506116ad565b604051808215151515815260200191505060405180910390f35b6107eb6004803603608081101561071457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561076557600080fd5b82018360208201111561077757600080fd5b8035906020019184600183028401116401000000008311171561079957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506116d5565b005b6108266004803603604081101561080357600080fd5b8101908080359060200190929190803560ff169060200190929190505050611f6f565b005b6108546004803603602081101561083e57600080fd5b8101908080359060200190929190505050612606565b604051808215151515815260200191505060405180910390f35b610876612698565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108c06126be565b6040518082815260200191505060405180910390f35b6108de6126c4565b6040518082815260200191505060405180910390f35b6108fc6126ca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61096a6004803603602081101561095457600080fd5b81019080803590602001909291905050506126f0565b005b6109986004803603602081101561098257600080fd5b8101908080359060200190929190505050612ae9565b005b60065481565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16610a47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806140216034913960400191505060405180910390fd5b600f805490508210610aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613de86036913960400191505060405180910390fd5b600f8281548110610ab157fe5b90600052602060002090600b0201600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000610b40600054610b32600754426139e190919063ffffffff16565b613a0190919063ffffffff16565b905090565b600d6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154905084565b600c5481565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613cc46021913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806142776036913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ea857600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615610da2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180613c89603b913960400191505060405180910390fd5b600d6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615610ea7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604181526020018061414c6041913960600191505060405180910390fd5b5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600e60008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fde7b64a369e10562cc2e71f0f1f944eaf144b75fead6ecb51fac9c4dd693488583604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25050565b600b5481565b600f81815481106110e057fe5b90600052602060002090600b02016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154908060060160009054906101000a900460ff16908060060160019054906101000a900460ff16908060060160029054906101000a900460ff1690806007015490806008018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561122f5780601f106112045761010080835404028352916020019161122f565b820191906000526020600020905b81548152906001019060200180831161121257829003601f168201915b505050505090806009015490508c565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113085780601f106112dd57610100808354040283529160200191611308565b820191906000526020600020905b8154815290600101906020018083116112eb57829003601f168201915b505050505081565b60025481565b60035481565b6000600f80549050905090565b60075481565b60015481565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154116113d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613cc46021913960400191505060405180910390fd5b6000600b5490506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508281600101541015611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061422a6026913960400191505060405180910390fd5b6114848160030154612606565b6114d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605e815260200180613f5a605e913960600191505060405180910390fd5b6114f08382600101546139e190919063ffffffff16565b816001018190555061150d83600b546139e190919063ffffffff16565b600b81905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b5c5f6723385856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050602060405180830381600087803b1580156115c457600080fd5b505af11580156115d8573d6000803e3d6000fd5b505050506040513d60208110156115ee57600080fd5b8101908080519060200190929190505050611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613ce5603d913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f667cb7a1818eacd2e3a421e734429ba9c4c7dec85e578e098b6d72cd2bfbf2f6846040518082815260200191505060405180910390a2505050565b60045481565b60006116c460015483613a2790919063ffffffff16565b6116cc610b15565b10159050919050565b6000600d6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154116117cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613d226025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613e81602e913960400191505060405180910390fd5b670de0b6b3a764000061188783611879600c54600b54613a2790919063ffffffff16565b613a2790919063ffffffff16565b11156118de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806140946032913960400191505060405180910390fd5b6118f382600c54613a2790919063ffffffff16565b600c819055506000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33306004546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a3c57600080fd5b505af1158015611a50573d6000803e3d6000fd5b505050506040513d6020811015611a6657600080fd5b8101908080519060200190929190505050611acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613bd3603f913960400191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8630876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ba957600080fd5b505af1158015611bbd573d6000803e3d6000fd5b505050506040513d6020811015611bd357600080fd5b8101908080519060200190929190505050611c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613d476036913960400191505060405180910390fd5b6000611caa6001611c9c611c4b610b15565b6000600f8054905014611c9457600f611c736001600f805490506139e190919063ffffffff16565b81548110611c7d57fe5b90600052602060002090600b020160030154611c97565b60005b613a46565b613a2790919063ffffffff16565b9050611cb4613a9a565b6040518061018001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff168152602001868152602001838152602001600081526020016000815260200160001515815260200160001515815260200160001515815260200187815260200185815260200160008152509050600f819080600181540180825580915050906001820390600052602060002090600b02016000909192909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a81548160ff0219169083151502179055506101008201518160060160026101000a81548160ff0219169083151502179055506101208201518160070155610140820151816008019080519060200190611ead929190613b2d565b5061016082015181600901555050506000611ed76001600f805490506139e190919063ffffffff16565b90508773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2d105ebbc222c190059b3979356e13469f6a29a350add74ac3bf4f22f16301d6848b8b60405180848152602001838152602001828152602001935050505060405180910390a45050505050505050565b6000600d6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411612069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613d226025913960400191505060405180910390fd5b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600f80549050841061216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613fb8602c913960400191505060405180910390fd5b6000600f858154811061217c57fe5b90600052602060002090600b0201905060038460ff16106121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806142ad6031913960400191505060405180910390fd5b60008460ff1660028111156121f957fe5b90508160030154612208610b15565b101561225f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061418d6032913960400191505060405180910390fd5b61226c82600301546116ad565b156122c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180613edc6037913960400191505060405180910390fd5b600060028111156122cf57fe5b82600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600281111561232957fe5b1461237f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e81526020018061410e603e913960400191505060405180910390fd5b6001600281111561238c57fe5b81600281111561239857fe5b14806123b957506002808111156123ab57fe5b8160028111156123b757fe5b145b61240e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180613e1e6032913960400191505060405180910390fd5b8160060160029054906101000a900460ff1615612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806141bf602e913960400191505060405180910390fd5b8082600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360028111156124d357fe5b0217905550600160028111156124e557fe5b8160028111156124f157fe5b141561254f5761251283600101548360040154613a2790919063ffffffff16565b82600401819055508260030154861115612530578583600301819055505b8160090154600b54111561254a57600b5482600901819055505b612592565b60028081111561255b57fe5b81600281111561256757fe5b14156125915761258883600101548360050154613a2790919063ffffffff16565b82600501819055505b5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16877f29bf0061f2faa9daa482f061b116195432d435536d8af4ae6b3c5dd78223679b88604051808260ff1660ff16815260200191505060405180910390a4505050505050565b6000600f805490508210612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613eaf602d913960400191505060405180910390fd5b600f828154811061267257fe5b90600052602060002090600b020160060160009054906101000a900460ff169050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b60005481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f80549050811061274d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806142506027913960400191505060405180910390fd5b6000600f828154811061275c57fe5b90600052602060002090600b020190508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613dbc602c913960400191505060405180910390fd5b61282d6003548260030154613a2790919063ffffffff16565b612835610b15565b1061288b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180613e506031913960400191505060405180910390fd5b8060060160029054906101000a900460ff16156128f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180613c4e603b913960400191505060405180910390fd5b6000816007015490506000826007018190555060018260060160026101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129f057600080fd5b505af1158015612a04573d6000803e3d6000fd5b505050506040513d6020811015612a1a57600080fd5b8101908080519060200190929190505050612a80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180614055603f913960400191505060405180910390fd5b827fa749dd3df92cae4d106b3eadf60c0dffd3698de09c67ce58ce6f5d02eb82131333604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2505050565b600f805490508110612b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061431b6031913960400191505060405180910390fd5b6000600f8281548110612b5557fe5b90600052602060002090600b02019050612b92600254612b846001548460030154613a2790919063ffffffff16565b613a2790919063ffffffff16565b612b9a610b15565b1015612bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613d7d603f913960400191505060405180910390fd5b600015158160060160009054906101000a900460ff16151514612c5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806142de603d913960400191505060405180910390fd5b6000821480612ca95750600f612c7f6001846139e190919063ffffffff16565b81548110612c8957fe5b90600052602060002090600b020160060160009054906101000a900460ff165b612cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613fe4603d913960400191505060405180910390fd5b60018160060160006101000a81548160ff021916908315150217905550612d348160020154600c546139e190919063ffffffff16565b600c819055506000816005015482600401541190508160090154612d65600554600b54613a6090919063ffffffff16565b1015612d7057600090505b808015612d8c57508160060160029054906101000a900460ff16155b156135025760018260060160016101000a81548160ff021916908315150217905550600d60008360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615612f1357612ea48260020154600d60008560010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154613a2790919063ffffffff16565b600d60008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061337f565b600d6000600e60008560010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615613174576000600e60008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b60405180608001604052808360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836002015481526020016001151581526020016000815250600d60008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020160006101000a81548160ff021916908315150217905550606082015181600301559050508160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6133988260020154600b54613a2790919063ffffffff16565b600b81905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600701546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561346d57600080fd5b505af1158015613481573d6000803e3d6000fd5b505050506040513d602081101561349757600080fd5b81019080805190602001909291905050506134fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806141ed603d913960400191505060405180910390fd5b613664565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600701546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d357600080fd5b505af11580156135e7573d6000803e3d6000fd5b505050506040513d60208110156135fd57600080fd5b8101908080519060200190929190505050613663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613c12603c913960400191505060405180910390fd5b5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336006546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561370f57600080fd5b505af1158015613723573d6000803e3d6000fd5b505050506040513d602081101561373957600080fd5b810190808051906020019092919050505061379f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260488152602001806140c66048913960600191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166138196006546004546139e190919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561388257600080fd5b505af1158015613896573d6000803e3d6000fd5b505050506040513d60208110156138ac57600080fd5b8101908080519060200190929190505050613912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526047815260200180613f136047913960600191505060405180910390fd5b8160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16847f3f6fc303a82367bb4947244ba21c569a5ed2e870610f1a693366142309d7cbea85600701548660020154866040518084815260200183815260200182151515158152602001935050505060405180910390a4505050565b6000828211156139f057600080fd5b600082840390508091505092915050565b6000808211613a0f57600080fd5b6000828481613a1a57fe5b0490508091505092915050565b600080828401905083811015613a3c57600080fd5b8091505092915050565b600081831015613a565781613a58565b825b905092915050565b600080831415613a735760009050613a94565b6000828402905082848281613a8457fe5b0414613a8f57600080fd5b809150505b92915050565b604051806101800160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581526020016000151581526020016000815260200160608152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613b6e57805160ff1916838001178555613b9c565b82800160010185558215613b9c579182015b82811115613b9b578251825591602001919060010190613b80565b5b509050613ba99190613bad565b5090565b613bcf91905b80821115613bcb576000816000905550600101613bb3565b5090565b9056fe4d6f6c6f63683a3a7375626d697450726f706f73616c202d2070726f706f73616c206465706f73697420746f6b656e207472616e73666572206661696c65644d6f6c6f63683a3a70726f6365737350726f706f73616c202d206661696c696e6720766f746520746f6b656e207472616e73666572206661696c65644d6f6c6f63683a3a61626f7274202d2070726f706f73616c206d757374206e6f74206861766520616c7265616479206265656e2061626f727465644d6f6c6f63683a3a75706461746544656c65676174654b6579202d2063616e74206f7665727772697465206578697374696e67206d656d626572734d6f6c6f63683a3a6f6e6c794d656d626572202d206e6f742061206d656d6265724d6f6c6f63683a3a7261676571756974202d207769746864726177616c206f6620746f6b656e732066726f6d206775696c6442616e6b206661696c65644d6f6c6f63683a3a6f6e6c7944656c6567617465202d206e6f7420612064656c65676174654d6f6c6f63683a3a7375626d697450726f706f73616c202d207472696275746520746f6b656e207472616e73666572206661696c65644d6f6c6f63683a3a70726f6365737350726f706f73616c202d2070726f706f73616c206973206e6f7420726561647920746f2062652070726f6365737365644d6f6c6f63683a3a61626f7274202d206d73672e73656e646572206d757374206265206170706c6963616e744d6f6c6f63683a3a6765744d656d62657250726f706f73616c566f7465202d2070726f706f73616c20646f65736e27742065786973744d6f6c6f63683a3a7375626d6974566f7465202d20766f7465206d7573742062652065697468657220596573206f72204e6f4d6f6c6f63683a3a61626f7274202d2061626f72742077696e646f77206d757374206e6f742068617665207061737365644d6f6c6f63683a3a7375626d697450726f706f73616c202d206170706c6963616e742063616e6e6f7420626520304d6f6c6f63683a3a63616e5261676571756974202d2070726f706f73616c20646f6573206e6f742065786973744d6f6c6f63683a3a7375626d6974566f7465202d2070726f706f73616c20766f74696e6720706572696f642068617320657870697265644d6f6c6f63683a3a70726f6365737350726f706f73616c202d206661696c656420746f2072657475726e2070726f706f73616c206465706f73697420746f2070726f706f7365724d6f6c6f63683a3a7261676571756974202d2063616e7420726167657175697420756e74696c206869676865737420696e6465782070726f706f73616c206d656d62657220766f74656420594553206f6e2069732070726f6365737365644d6f6c6f63683a3a7375626d6974566f7465202d2070726f706f73616c20646f6573206e6f742065786973744d6f6c6f63683a3a70726f6365737350726f706f73616c202d2070726576696f75732070726f706f73616c206d7573742062652070726f6365737365644d6f6c6f63683a3a6765744d656d62657250726f706f73616c566f7465202d206d656d62657220646f65736e27742065786973744d6f6c6f63683a3a70726f6365737350726f706f73616c202d206661696c656420746f2072657475726e207472696275746520746f206170706c6963616e744d6f6c6f63683a3a7375626d697450726f706f73616c202d20746f6f206d616e7920736861726573207265717565737465644d6f6c6f63683a3a70726f6365737350726f706f73616c202d206661696c656420746f2073656e642070726f63657373696e672072657761726420746f206d73672e73656e6465724d6f6c6f63683a3a7375626d6974566f7465202d206d656d6265722068617320616c726561647920766f746564206f6e20746869732070726f706f73616c4d6f6c6f63683a3a75706461746544656c65676174654b6579202d2063616e74206f7665727772697465206578697374696e672064656c6567617465206b6579734d6f6c6f63683a3a7375626d6974566f7465202d20766f74696e6720706572696f6420686173206e6f7420737461727465644d6f6c6f63683a3a7375626d6974566f7465202d2070726f706f73616c20686173206265656e2061626f727465644d6f6c6f63683a3a70726f6365737350726f706f73616c202d20746f6b656e207472616e7366657220746f206775696c642062616e6b206661696c65644d6f6c6f63683a3a7261676571756974202d20696e73756666696369656e74207368617265734d6f6c6f63683a3a61626f7274202d2070726f706f73616c20646f6573206e6f742065786973744d6f6c6f63683a3a75706461746544656c65676174654b6579202d206e657744656c65676174654b65792063616e6e6f7420626520304d6f6c6f63683a3a7375626d6974566f7465202d2075696e74566f7465206d757374206265206c657373207468616e20334d6f6c6f63683a3a70726f6365737350726f706f73616c202d2070726f706f73616c2068617320616c7265616479206265656e2070726f6365737365644d6f6c6f63683a3a70726f6365737350726f706f73616c202d2070726f706f73616c20646f6573206e6f74206578697374a265627a7a7231582003f63d1858fde3ff0009189deaca78f29c566fbec4c2ffdb19b4b615ecdd355864736f6c634300050d0032608060405234801561001057600080fd5b5060405161089d38038061089d8339818101604052602081101561003357600080fd5b8101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061074c806101516000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063715018a6146100675780638da5cb5b146100715780638f32d59b146100bb578063b5c5f672146100dd578063bab462591461014d578063f2fde38b14610197575b600080fd5b61006f6101db565b005b6100796102ab565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100c36102d4565b604051808215151515815260200191505060405180910390f35b610133600480360360608110156100f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919050505061032b565b604051808215151515815260200191505060405180910390f35b61015561057c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101d9600480360360208110156101ad57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105a2565b005b6101e36102d4565b6101ec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b60006103356102d4565b61033e57600080fd5b600061043e8361043086600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156103e757600080fd5b505afa1580156103fb573d6000803e3d6000fd5b505050506040513d602081101561041157600080fd5b81019080805190602001909291905050506105bf90919063ffffffff16565b6105f990919063ffffffff16565b90508473ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65826040518082815260200191505060405180910390a2600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561053757600080fd5b505af115801561054b573d6000803e3d6000fd5b505050506040513d602081101561056157600080fd5b81019080805190602001909291905050509150509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6105aa6102d4565b6105b357600080fd5b6105bc8161061f565b50565b6000808314156105d257600090506105f3565b60008284029050828482816105e357fe5b04146105ee57600080fd5b809150505b92915050565b600080821161060757600080fd5b600082848161061257fe5b0490508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561065957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505056fea265627a7a723158204de1d837959f8d6815c9abcccf9c825b8d232184a35233b4c37a70f3426e9c8164736f6c634300050d00324d6f6c6f63683a3a636f6e7374727563746f72202d205f61626f727457696e646f772063616e6e6f7420626520304d6f6c6f63683a3a636f6e7374727563746f72202d2073756d6d6f6e65722063616e6e6f7420626520304d6f6c6f63683a3a636f6e7374727563746f72202d205f766f74696e67506572696f644c656e6774682065786365656473206c696d69744d6f6c6f63683a3a636f6e7374727563746f72202d205f70726f706f73616c4465706f7369742063616e6e6f7420626520736d616c6c6572207468616e205f70726f63657373696e675265776172644d6f6c6f63683a3a636f6e7374727563746f72202d205f64696c7574696f6e426f756e642065786365656473206c696d69744d6f6c6f63683a3a636f6e7374727563746f72202d205f61626f727457696e646f77206d75737420626520736d616c6c6572207468616e206f7220657175616c20746f205f766f74696e67506572696f644c656e6774684d6f6c6f63683a3a636f6e7374727563746f72202d205f6772616365506572696f644c656e6774682065786365656473206c696d69744d6f6c6f63683a3a636f6e7374727563746f72202d205f766f74696e67506572696f644c656e6774682063616e6e6f7420626520304d6f6c6f63683a3a636f6e7374727563746f72202d205f706572696f644475726174696f6e2063616e6e6f7420626520304d6f6c6f63683a3a636f6e7374727563746f72202d205f617070726f766564546f6b656e2063616e6e6f7420626520304d6f6c6f63683a3a636f6e7374727563746f72202d205f64696c7574696f6e426f756e642063616e6e6f74206265203000000000000000000000000038a816027a111fec7db81f567f1550d98507a4ad0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f00000000000000000000000000000000000000000000000000000000000043800000000000000000000000000000000000000000000000000000000000000023000000000000000000000000000000000000000000000000000000000000002300000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000004033343966663834363630373134343035323235646639646362336530383433623565336238653261316533343561643330643466356332616661306164633532

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80637d5b6c72116100f9578063a3dc380011610097578063b470aade11610071578063b470aade146108d6578063bab46259146108f4578063e50701f41461093e578063e63bc62d1461096c576101a9565b8063a3dc380014610828578063a42afd291461086e578063afe5475f146108b8576101a9565b80638b15a605116100d35780638b15a6051461069a5780639425a476146106b8578063962006c3146106fe57806399653fbe146107ed576101a9565b80637d5b6c72146106305780638340bbce1461064e5780638436593f1461066c576101a9565b80633a98ef39116101665780635dec26b4116101405780635dec26b41461055357806363858f2d146105d65780637896ddaf146105f4578063797daf7014610612576101a9565b80633a98ef39146103595780633b214a7414610377578063402c1794146104cf576101a9565b806303e32fa1146101ae578063044a0ca8146101cc578063086146d21461023c57806308ae4b0c1461025a5780631a396a4a146102f75780632582bf2a14610315575b600080fd5b6101b661099a565b6040518082815260200191505060405180910390f35b610218600480360360408110156101e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109a0565b6040518082600281111561022857fe5b60ff16815260200191505060405180910390f35b610244610b15565b6040518082815260200191505060405180910390f35b61029c6004803603602081101561027057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b45565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018315151515815260200182815260200194505050505060405180910390f35b6102ff610ba2565b6040518082815260200191505060405180910390f35b6103576004803603602081101561032b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ba8565b005b6103616110cd565b6040518082815260200191505060405180910390f35b6103a36004803603602081101561038d57600080fd5b81019080803590602001909291905050506110d3565b604051808d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018b81526020018a815260200189815260200188815260200187151515158152602001861515151581526020018515151515815260200184815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561048957808201518184015260208101905061046e565b50505050905090810190601f1680156104b65780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390f35b610511600480360360208110156104e557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061123f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61055b611272565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561059b578082015181840152602081019050610580565b50505050905090810190601f1680156105c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105de611310565b6040518082815260200191505060405180910390f35b6105fc611316565b6040518082815260200191505060405180910390f35b61061a61131c565b6040518082815260200191505060405180910390f35b610638611329565b6040518082815260200191505060405180910390f35b61065661132f565b6040518082815260200191505060405180910390f35b6106986004803603602081101561068257600080fd5b8101908080359060200190929190505050611335565b005b6106a26116a7565b6040518082815260200191505060405180910390f35b6106e4600480360360208110156106ce57600080fd5b81019080803590602001909291905050506116ad565b604051808215151515815260200191505060405180910390f35b6107eb6004803603608081101561071457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561076557600080fd5b82018360208201111561077757600080fd5b8035906020019184600183028401116401000000008311171561079957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506116d5565b005b6108266004803603604081101561080357600080fd5b8101908080359060200190929190803560ff169060200190929190505050611f6f565b005b6108546004803603602081101561083e57600080fd5b8101908080359060200190929190505050612606565b604051808215151515815260200191505060405180910390f35b610876612698565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108c06126be565b6040518082815260200191505060405180910390f35b6108de6126c4565b6040518082815260200191505060405180910390f35b6108fc6126ca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61096a6004803603602081101561095457600080fd5b81019080803590602001909291905050506126f0565b005b6109986004803603602081101561098257600080fd5b8101908080359060200190929190505050612ae9565b005b60065481565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16610a47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001806140216034913960400191505060405180910390fd5b600f805490508210610aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613de86036913960400191505060405180910390fd5b600f8281548110610ab157fe5b90600052602060002090600b0201600a0160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000610b40600054610b32600754426139e190919063ffffffff16565b613a0190919063ffffffff16565b905090565b600d6020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff16908060030154905084565b600c5481565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613cc46021913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cc9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260368152602001806142776036913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610ea857600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615610da2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180613c89603b913960400191505060405180910390fd5b600d6000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615610ea7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604181526020018061414c6041913960600191505060405180910390fd5b5b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600e60008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff167fde7b64a369e10562cc2e71f0f1f944eaf144b75fead6ecb51fac9c4dd693488583604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25050565b600b5481565b600f81815481106110e057fe5b90600052602060002090600b02016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060020154908060030154908060040154908060050154908060060160009054906101000a900460ff16908060060160019054906101000a900460ff16908060060160029054906101000a900460ff1690806007015490806008018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561122f5780601f106112045761010080835404028352916020019161122f565b820191906000526020600020905b81548152906001019060200180831161121257829003601f168201915b505050505090806009015490508c565b600e6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60088054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113085780601f106112dd57610100808354040283529160200191611308565b820191906000526020600020905b8154815290600101906020018083116112eb57829003601f168201915b505050505081565b60025481565b60035481565b6000600f80549050905090565b60075481565b60015481565b6000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154116113d0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613cc46021913960400191505060405180910390fd5b6000600b5490506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508281600101541015611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061422a6026913960400191505060405180910390fd5b6114848160030154612606565b6114d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605e815260200180613f5a605e913960600191505060405180910390fd5b6114f08382600101546139e190919063ffffffff16565b816001018190555061150d83600b546139e190919063ffffffff16565b600b81905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b5c5f6723385856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050602060405180830381600087803b1580156115c457600080fd5b505af11580156115d8573d6000803e3d6000fd5b505050506040513d60208110156115ee57600080fd5b8101908080519060200190929190505050611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613ce5603d913960400191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f667cb7a1818eacd2e3a421e734429ba9c4c7dec85e578e098b6d72cd2bfbf2f6846040518082815260200191505060405180910390a2505050565b60045481565b60006116c460015483613a2790919063ffffffff16565b6116cc610b15565b10159050919050565b6000600d6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154116117cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613d226025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180613e81602e913960400191505060405180910390fd5b670de0b6b3a764000061188783611879600c54600b54613a2790919063ffffffff16565b613a2790919063ffffffff16565b11156118de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806140946032913960400191505060405180910390fd5b6118f382600c54613a2790919063ffffffff16565b600c819055506000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33306004546040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a3c57600080fd5b505af1158015611a50573d6000803e3d6000fd5b505050506040513d6020811015611a6657600080fd5b8101908080519060200190929190505050611acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613bd3603f913960400191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8630876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ba957600080fd5b505af1158015611bbd573d6000803e3d6000fd5b505050506040513d6020811015611bd357600080fd5b8101908080519060200190929190505050611c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613d476036913960400191505060405180910390fd5b6000611caa6001611c9c611c4b610b15565b6000600f8054905014611c9457600f611c736001600f805490506139e190919063ffffffff16565b81548110611c7d57fe5b90600052602060002090600b020160030154611c97565b60005b613a46565b613a2790919063ffffffff16565b9050611cb4613a9a565b6040518061018001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff168152602001868152602001838152602001600081526020016000815260200160001515815260200160001515815260200160001515815260200187815260200185815260200160008152509050600f819080600181540180825580915050906001820390600052602060002090600b02016000909192909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555060e08201518160060160016101000a81548160ff0219169083151502179055506101008201518160060160026101000a81548160ff0219169083151502179055506101208201518160070155610140820151816008019080519060200190611ead929190613b2d565b5061016082015181600901555050506000611ed76001600f805490506139e190919063ffffffff16565b90508773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2d105ebbc222c190059b3979356e13469f6a29a350add74ac3bf4f22f16301d6848b8b60405180848152602001838152602001828152602001935050505060405180910390a45050505050505050565b6000600d6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015411612069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613d226025913960400191505060405180910390fd5b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600f80549050841061216d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613fb8602c913960400191505060405180910390fd5b6000600f858154811061217c57fe5b90600052602060002090600b0201905060038460ff16106121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806142ad6031913960400191505060405180910390fd5b60008460ff1660028111156121f957fe5b90508160030154612208610b15565b101561225f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061418d6032913960400191505060405180910390fd5b61226c82600301546116ad565b156122c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180613edc6037913960400191505060405180910390fd5b600060028111156122cf57fe5b82600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16600281111561232957fe5b1461237f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603e81526020018061410e603e913960400191505060405180910390fd5b6001600281111561238c57fe5b81600281111561239857fe5b14806123b957506002808111156123ab57fe5b8160028111156123b757fe5b145b61240e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180613e1e6032913960400191505060405180910390fd5b8160060160029054906101000a900460ff1615612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806141bf602e913960400191505060405180910390fd5b8082600a0160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360028111156124d357fe5b0217905550600160028111156124e557fe5b8160028111156124f157fe5b141561254f5761251283600101548360040154613a2790919063ffffffff16565b82600401819055508260030154861115612530578583600301819055505b8160090154600b54111561254a57600b5482600901819055505b612592565b60028081111561255b57fe5b81600281111561256757fe5b14156125915761258883600101548360050154613a2790919063ffffffff16565b82600501819055505b5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16877f29bf0061f2faa9daa482f061b116195432d435536d8af4ae6b3c5dd78223679b88604051808260ff1660ff16815260200191505060405180910390a4505050505050565b6000600f805490508210612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180613eaf602d913960400191505060405180910390fd5b600f828154811061267257fe5b90600052602060002090600b020160060160009054906101000a900460ff169050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b60005481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f80549050811061274d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806142506027913960400191505060405180910390fd5b6000600f828154811061275c57fe5b90600052602060002090600b020190508060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613dbc602c913960400191505060405180910390fd5b61282d6003548260030154613a2790919063ffffffff16565b612835610b15565b1061288b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180613e506031913960400191505060405180910390fd5b8060060160029054906101000a900460ff16156128f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b815260200180613c4e603b913960400191505060405180910390fd5b6000816007015490506000826007018190555060018260060160026101000a81548160ff021916908315150217905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129f057600080fd5b505af1158015612a04573d6000803e3d6000fd5b505050506040513d6020811015612a1a57600080fd5b8101908080519060200190929190505050612a80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180614055603f913960400191505060405180910390fd5b827fa749dd3df92cae4d106b3eadf60c0dffd3698de09c67ce58ce6f5d02eb82131333604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a2505050565b600f805490508110612b46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018061431b6031913960400191505060405180910390fd5b6000600f8281548110612b5557fe5b90600052602060002090600b02019050612b92600254612b846001548460030154613a2790919063ffffffff16565b613a2790919063ffffffff16565b612b9a610b15565b1015612bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613d7d603f913960400191505060405180910390fd5b600015158160060160009054906101000a900460ff16151514612c5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806142de603d913960400191505060405180910390fd5b6000821480612ca95750600f612c7f6001846139e190919063ffffffff16565b81548110612c8957fe5b90600052602060002090600b020160060160009054906101000a900460ff165b612cfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613fe4603d913960400191505060405180910390fd5b60018160060160006101000a81548160ff021916908315150217905550612d348160020154600c546139e190919063ffffffff16565b600c819055506000816005015482600401541190508160090154612d65600554600b54613a6090919063ffffffff16565b1015612d7057600090505b808015612d8c57508160060160029054906101000a900460ff16155b156135025760018260060160016101000a81548160ff021916908315150217905550600d60008360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615612f1357612ea48260020154600d60008560010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154613a2790919063ffffffff16565b600d60008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555061337f565b600d6000600e60008560010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615613174576000600e60008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b60405180608001604052808360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836002015481526020016001151581526020016000815250600d60008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020160006101000a81548160ff021916908315150217905550606082015181600301559050508160010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60008460010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b6133988260020154600b54613a2790919063ffffffff16565b600b81905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600701546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561346d57600080fd5b505af1158015613481573d6000803e3d6000fd5b505050506040513d602081101561349757600080fd5b81019080805190602001909291905050506134fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806141ed603d913960400191505060405180910390fd5b613664565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600701546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d357600080fd5b505af11580156135e7573d6000803e3d6000fd5b505050506040513d60208110156135fd57600080fd5b8101908080519060200190929190505050613663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603c815260200180613c12603c913960400191505060405180910390fd5b5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb336006546040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561370f57600080fd5b505af1158015613723573d6000803e3d6000fd5b505050506040513d602081101561373957600080fd5b810190808051906020019092919050505061379f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260488152602001806140c66048913960600191505060405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166138196006546004546139e190919063ffffffff16565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561388257600080fd5b505af1158015613896573d6000803e3d6000fd5b505050506040513d60208110156138ac57600080fd5b8101908080519060200190929190505050613912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526047815260200180613f136047913960600191505060405180910390fd5b8160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16847f3f6fc303a82367bb4947244ba21c569a5ed2e870610f1a693366142309d7cbea85600701548660020154866040518084815260200183815260200182151515158152602001935050505060405180910390a4505050565b6000828211156139f057600080fd5b600082840390508091505092915050565b6000808211613a0f57600080fd5b6000828481613a1a57fe5b0490508091505092915050565b600080828401905083811015613a3c57600080fd5b8091505092915050565b600081831015613a565781613a58565b825b905092915050565b600080831415613a735760009050613a94565b6000828402905082848281613a8457fe5b0414613a8f57600080fd5b809150505b92915050565b604051806101800160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581526020016000151581526020016000815260200160608152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613b6e57805160ff1916838001178555613b9c565b82800160010185558215613b9c579182015b82811115613b9b578251825591602001919060010190613b80565b5b509050613ba99190613bad565b5090565b613bcf91905b80821115613bcb576000816000905550600101613bb3565b5090565b9056fe4d6f6c6f63683a3a7375626d697450726f706f73616c202d2070726f706f73616c206465706f73697420746f6b656e207472616e73666572206661696c65644d6f6c6f63683a3a70726f6365737350726f706f73616c202d206661696c696e6720766f746520746f6b656e207472616e73666572206661696c65644d6f6c6f63683a3a61626f7274202d2070726f706f73616c206d757374206e6f74206861766520616c7265616479206265656e2061626f727465644d6f6c6f63683a3a75706461746544656c65676174654b6579202d2063616e74206f7665727772697465206578697374696e67206d656d626572734d6f6c6f63683a3a6f6e6c794d656d626572202d206e6f742061206d656d6265724d6f6c6f63683a3a7261676571756974202d207769746864726177616c206f6620746f6b656e732066726f6d206775696c6442616e6b206661696c65644d6f6c6f63683a3a6f6e6c7944656c6567617465202d206e6f7420612064656c65676174654d6f6c6f63683a3a7375626d697450726f706f73616c202d207472696275746520746f6b656e207472616e73666572206661696c65644d6f6c6f63683a3a70726f6365737350726f706f73616c202d2070726f706f73616c206973206e6f7420726561647920746f2062652070726f6365737365644d6f6c6f63683a3a61626f7274202d206d73672e73656e646572206d757374206265206170706c6963616e744d6f6c6f63683a3a6765744d656d62657250726f706f73616c566f7465202d2070726f706f73616c20646f65736e27742065786973744d6f6c6f63683a3a7375626d6974566f7465202d20766f7465206d7573742062652065697468657220596573206f72204e6f4d6f6c6f63683a3a61626f7274202d2061626f72742077696e646f77206d757374206e6f742068617665207061737365644d6f6c6f63683a3a7375626d697450726f706f73616c202d206170706c6963616e742063616e6e6f7420626520304d6f6c6f63683a3a63616e5261676571756974202d2070726f706f73616c20646f6573206e6f742065786973744d6f6c6f63683a3a7375626d6974566f7465202d2070726f706f73616c20766f74696e6720706572696f642068617320657870697265644d6f6c6f63683a3a70726f6365737350726f706f73616c202d206661696c656420746f2072657475726e2070726f706f73616c206465706f73697420746f2070726f706f7365724d6f6c6f63683a3a7261676571756974202d2063616e7420726167657175697420756e74696c206869676865737420696e6465782070726f706f73616c206d656d62657220766f74656420594553206f6e2069732070726f6365737365644d6f6c6f63683a3a7375626d6974566f7465202d2070726f706f73616c20646f6573206e6f742065786973744d6f6c6f63683a3a70726f6365737350726f706f73616c202d2070726576696f75732070726f706f73616c206d7573742062652070726f6365737365644d6f6c6f63683a3a6765744d656d62657250726f706f73616c566f7465202d206d656d62657220646f65736e27742065786973744d6f6c6f63683a3a70726f6365737350726f706f73616c202d206661696c656420746f2072657475726e207472696275746520746f206170706c6963616e744d6f6c6f63683a3a7375626d697450726f706f73616c202d20746f6f206d616e7920736861726573207265717565737465644d6f6c6f63683a3a70726f6365737350726f706f73616c202d206661696c656420746f2073656e642070726f63657373696e672072657761726420746f206d73672e73656e6465724d6f6c6f63683a3a7375626d6974566f7465202d206d656d6265722068617320616c726561647920766f746564206f6e20746869732070726f706f73616c4d6f6c6f63683a3a75706461746544656c65676174654b6579202d2063616e74206f7665727772697465206578697374696e672064656c6567617465206b6579734d6f6c6f63683a3a7375626d6974566f7465202d20766f74696e6720706572696f6420686173206e6f7420737461727465644d6f6c6f63683a3a7375626d6974566f7465202d2070726f706f73616c20686173206265656e2061626f727465644d6f6c6f63683a3a70726f6365737350726f706f73616c202d20746f6b656e207472616e7366657220746f206775696c642062616e6b206661696c65644d6f6c6f63683a3a7261676571756974202d20696e73756666696369656e74207368617265734d6f6c6f63683a3a61626f7274202d2070726f706f73616c20646f6573206e6f742065786973744d6f6c6f63683a3a75706461746544656c65676174654b6579202d206e657744656c65676174654b65792063616e6e6f7420626520304d6f6c6f63683a3a7375626d6974566f7465202d2075696e74566f7465206d757374206265206c657373207468616e20334d6f6c6f63683a3a70726f6365737350726f706f73616c202d2070726f706f73616c2068617320616c7265616479206265656e2070726f6365737365644d6f6c6f63683a3a70726f6365737350726f706f73616c202d2070726f706f73616c20646f6573206e6f74206578697374a265627a7a7231582003f63d1858fde3ff0009189deaca78f29c566fbec4c2ffdb19b4b615ecdd355864736f6c634300050d0032

Deployed Bytecode Sourcemap

27:19644:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27:19644:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;694:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19262:406;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19262:406:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18482:126;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4458:42;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4458:42:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2706:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17395:898;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17395:898:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;2634:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4576:31;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4576:31:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4576:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4507:62;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4507:62:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;882:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;882:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;322:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;394:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18616:110;;;:::i;:::-;;;;;;;;;;;;;;;;;;;805:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;249:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15530:886;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15530:886:0;;;;;;;;;;;;;;;;;:::i;:::-;;458:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19085:169;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19085:169:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7354:2415;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7354:2415:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7354:2415:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7354:2415:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;7354:2415:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;7354:2415:0;;;;;;;;;;;;;;;:::i;:::-;;9777:1999;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9777:1999:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18819:258;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18819:258:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1061:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;561:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;151:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;974:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16424:963;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16424:963:0;;;;;;;;;;;;;;;;;:::i;:::-;;11784:3738;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11784:3738:0;;;;;;;;;;;;;;;;;:::i;:::-;;694:31;;;;:::o;19262:406::-;19360:4;19385:7;:22;19393:13;19385:22;;;;;;;;;;;;;;;:29;;;;;;;;;;;;19377:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19506:13;:20;;;;19490:13;:36;19482:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19603:13;19617;19603:28;;;;;;;;;;;;;;;;;;:42;;:57;19646:13;19603:57;;;;;;;;;;;;;;;;;;;;;;;;;19596:64;;19262:406;;;;:::o;18482:126::-;18531:7;18558:42;18585:14;;18558:22;18566:13;;18558:3;:7;;:22;;;;:::i;:::-;:26;;:42;;;;:::i;:::-;18551:49;;18482:126;:::o;4458:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2706:39::-;;;;:::o;17395:898::-;4729:1;4700:7;:19;4708:10;4700:19;;;;;;;;;;;;;;;:26;;;:30;4692:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17509:1;17483:28;;:14;:28;;;;17475:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17691:10;17673:28;;:14;:28;;;17669:316;;17727:7;:23;17735:14;17727:23;;;;;;;;;;;;;;;:30;;;;;;;;;;;;17726:31;17718:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17845:7;:51;17853:26;:42;17880:14;17853:42;;;;;;;;;;;;;;;;;;;;;;;;;17845:51;;;;;;;;;;;;;;;:58;;;;;;;;;;;;17844:59;17836:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17669:316;17997:21;18021:7;:19;18029:10;18021:19;;;;;;;;;;;;;;;17997:43;;18108:1;18051:26;:46;18078:6;:18;;;;;;;;;;;;18051:46;;;;;;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;;18166:10;18121:26;:42;18148:14;18121:42;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;18208:14;18187:6;:18;;;:35;;;;;;;;;;;;;;;;;;18258:10;18240:45;;;18270:14;18240:45;;;;;;;;;;;;;;;;;;;;;;4779:1;17395:898;:::o;2634:30::-;;;;:::o;4576:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4507:62::-;;;;;;;;;;;;;;;;;;;;;;:::o;882:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;322:32::-;;;;:::o;394:26::-;;;;:::o;18616:110::-;18671:7;18698:13;:20;;;;18691:27;;18616:110;:::o;805:28::-;;;;:::o;249:33::-;;;;:::o;15530:886::-;4729:1;4700:7;:19;4708:10;4700:19;;;;;;;;;;;;;;;:26;;;:30;4692:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15599:26;15628:11;;15599:40;;15652:21;15676:7;:19;15684:10;15676:19;;;;;;;;;;;;;;;15652:43;;15733:12;15716:6;:13;;;:29;;15708:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15809:39;15821:6;:26;;;15809:11;:39::i;:::-;15801:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16000:31;16018:12;16000:6;:13;;;:17;;:31;;;;:::i;:::-;15984:6;:13;;:47;;;;16056:29;16072:12;16056:11;;:15;;:29;;;;:::i;:::-;16042:11;:43;;;;16203:9;;;;;;;;;;;:18;;;16222:10;16234:12;16248:18;16203:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16203:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16203:64:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16203:64:0;;;;;;;;;;;;;;;;16181:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16383:10;16374:34;;;16395:12;16374:34;;;;;;;;;;;;;;;;;;4779:1;;15530:886;:::o;458:30::-;;;;:::o;19085:169::-;19162:4;19208:38;19227:18;;19208:14;:18;;:38;;;;:::i;:::-;19186:18;:16;:18::i;:::-;:60;;19179:67;;19085:169;;;:::o;7354:2415::-;4894:1;4837:7;:47;4845:26;:38;4872:10;4845:38;;;;;;;;;;;;;;;;;;;;;;;;;4837:47;;;;;;;;;;;;;;;:54;;;:58;4829:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7593:1;7572:23;;:9;:23;;;;7564:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1644:6;7938:58;7980:15;7938:37;7954:20;;7938:11;;:15;;:37;;;;:::i;:::-;:41;;:58;;;;:::i;:::-;:82;;7930:145;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8111:41;8136:15;8111:20;;:24;;:41;;;;:::i;:::-;8088:20;:64;;;;8165:21;8189:26;:38;8216:10;8189:38;;;;;;;;;;;;;;;;;;;;;;;;;8165:62;;8358:13;;;;;;;;;;;:26;;;8385:10;8405:4;8412:15;;8358:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8358:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8358:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8358:70:0;;;;;;;;;;;;;;;;8350:146;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8619:13;;;;;;;;;;;:26;;;8646:9;8665:4;8672:12;8619:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8619:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8619:66:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8619:66:0;;;;;;;;;;;;;;;;8611:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8805:22;8830:158;8986:1;8830:151;8848:18;:16;:18::i;:::-;8905:1;8881:13;:20;;;;:25;:89;;8913:13;8927:27;8952:1;8927:13;:20;;;;:24;;:27;;;;:::i;:::-;8913:42;;;;;;;;;;;;;;;;;;:57;;;8881:89;;;8909:1;8881:89;8830:3;:151::i;:::-;:155;;:158;;;;:::i;:::-;8805:183;;9033:24;;:::i;:::-;9060:439;;;;;;;;9094:13;9060:439;;;;;;9133:9;9060:439;;;;;;9174:15;9060:439;;;;9220:14;9060:439;;;;9259:1;9060:439;;;;9284:1;9060:439;;;;9311:5;9060:439;;;;;;9340:5;9060:439;;;;;;9369:5;9060:439;;;;;;9403:12;9060:439;;;;9439:7;9060:439;;;;9486:1;9060:439;;;9033:466;;9555:13;9574:8;9555:28;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;9555:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9596:21;9620:27;9645:1;9620:13;:20;;;;:24;;:27;;;;:::i;:::-;9596:51;;9720:9;9663:98;;9705:13;9663:98;;9693:10;9663:98;;;9678:13;9731:12;9745:15;9663:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4948:1;;;;7354:2415;;;;:::o;9777:1999::-;4894:1;4837:7;:47;4845:26;:38;4872:10;4845:38;;;;;;;;;;;;;;;;;;;;;;;;;4837:47;;;;;;;;;;;;;;;:54;;;:58;4829:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9867:21;9891:26;:38;9918:10;9891:38;;;;;;;;;;;;;;;;;;;;;;;;;9867:62;;9940:21;9964:7;:22;9972:13;9964:22;;;;;;;;;;;;;;;9940:46;;10023:13;:20;;;;10007:13;:36;9999:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10103:25;10131:13;10145;10131:28;;;;;;;;;;;;;;;;;;10103:56;;10191:1;10180:8;:12;;;10172:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10257:9;10274:8;10269:14;;;;;;;;;;10257:26;;10326:8;:23;;;10304:18;:16;:18::i;:::-;:45;;10296:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10424:47;10447:8;:23;;;10424:22;:47::i;:::-;10423:48;10415:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10591:9;10550:50;;;;;;;;:8;:22;;:37;10573:13;10550:37;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;;;;;10542:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10694:8;10686:16;;;;;;;;:4;:16;;;;;;;;;:35;;;;10714:7;10706:15;;;;;;;;:4;:15;;;;;;;;;10686:35;10678:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10796:8;:16;;;;;;;;;;;;10795:17;10787:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10939:4;10899:8;:22;;:37;10922:13;10899:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;;;;;;;10991:8;10983:16;;;;;;;;:4;:16;;;;;;;;;10979:710;;;11036:36;11058:6;:13;;;11036:8;:17;;;:21;;:36;;;;:::i;:::-;11016:8;:17;;:56;;;;11204:6;:26;;;11188:13;:42;11184:125;;;11280:13;11251:6;:26;;:42;;;;11184:125;11453:8;:32;;;11439:11;;:46;11435:133;;;11541:11;;11506:8;:32;;:46;;;;11435:133;10979:710;;;11599:7;11591:15;;;;;;;;:4;:15;;;;;;;;;11587:102;;;11642:35;11663:6;:13;;;11642:8;:16;;;:20;;:35;;;;:::i;:::-;11623:8;:16;;:54;;;;11587:102;10979:710;11744:13;11706:62;;11732:10;11706:62;;11717:13;11706:62;11759:8;11706:62;;;;;;;;;;;;;;;;;;;;;;4948:1;;;;9777:1999;;:::o;18819:258::-;18890:4;18937:13;:20;;;;18915:19;:42;18907:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19025:13;19039:19;19025:34;;;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;19018:51;;18819:258;;;:::o;1061:26::-;;;;;;;;;;;;;:::o;561:28::-;;;;:::o;151:29::-;;;;:::o;974:27::-;;;;;;;;;;;;;:::o;16424:963::-;16504:13;:20;;;;16488:13;:36;16480:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16579:25;16607:13;16621;16607:28;;;;;;;;;;;;;;;;;;16579:56;;16670:8;:18;;;;;;;;;;;;16656:32;;:10;:32;;;16648:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16777:40;16805:11;;16777:8;:23;;;:27;;:40;;;;:::i;:::-;16756:18;:16;:18::i;:::-;:61;16748:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16891:8;:16;;;;;;;;;;;;16890:17;16882:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16984:21;17008:8;:21;;;16984:45;;17064:1;17040:8;:21;;:25;;;;17095:4;17076:8;:16;;;:23;;;;;;;;;;;;;;;;;;17181:13;;;;;;;;;;;:22;;;17204:8;:18;;;;;;;;;;;;17224:13;17181:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17181:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17181:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17181:57:0;;;;;;;;;;;;;;;;17159:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17353:13;17347:32;17368:10;17347:32;;;;;;;;;;;;;;;;;;;;;;16424:963;;;:::o;11784:3738::-;11874:13;:20;;;;11858:13;:36;11850:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11959:25;11987:13;12001;11987:28;;;;;;;;;;;;;;;;;;11959:56;;12058:70;12110:17;;12058:47;12086:18;;12058:8;:23;;;:27;;:47;;;;:::i;:::-;:51;;:70;;;;:::i;:::-;12036:18;:16;:18::i;:::-;:92;;12028:168;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12237:5;12215:27;;:8;:18;;;;;;;;;;;;:27;;;12207:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12344:1;12327:13;:18;:67;;;;12349:13;12363:20;12381:1;12363:13;:17;;:20;;;;:::i;:::-;12349:35;;;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;12327:67;12319:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12494:4;12473:8;:18;;;:25;;;;;;;;;;;;;;;;;;12532:50;12557:8;:24;;;12532:20;;:24;;:50;;;;:::i;:::-;12509:20;:73;;;;12595:12;12630:8;:16;;;12610:8;:17;;;:36;12595:51;;12764:8;:32;;;12731:30;12747:13;;12731:11;;:15;;:30;;;;:::i;:::-;:65;12727:113;;;12823:5;12813:15;;12727:113;12884:7;:28;;;;;12896:8;:16;;;;;;;;;;;;12895:17;12884:28;12880:1883;;;12950:4;12931:8;:16;;;:23;;;;;;;;;;;;;;;;;;13058:7;:27;13066:8;:18;;;;;;;;;;;;13058:27;;;;;;;;;;;;;;;:34;;;;;;;;;;;;13054:1031;;;13150:64;13189:8;:24;;;13150:7;:27;13158:8;:18;;;;;;;;;;;;13150:27;;;;;;;;;;;;;;;:34;;;:38;;:64;;;;:::i;:::-;13113:7;:27;13121:8;:18;;;;;;;;;;;;13113:27;;;;;;;;;;;;;;;:34;;:101;;;;13054:1031;;;13459:7;:55;13467:26;:46;13494:8;:18;;;;;;;;;;;;13467:46;;;;;;;;;;;;;;;;;;;;;;;;;13459:55;;;;;;;;;;;;;;;:62;;;;;;;;;;;;13455:349;;;13546:24;13573:26;:46;13600:8;:18;;;;;;;;;;;;13573:46;;;;;;;;;;;;;;;;;;;;;;;;;13546:73;;13689:16;13642:26;:44;13669:16;13642:44;;;;;;;;;;;;;;;;:63;;;;;;;;;;;;;;;;;;13768:16;13728:7;:25;13736:16;13728:25;;;;;;;;;;;;;;;:37;;;:56;;;;;;;;;;;;;;;;;;13455:349;;13922:61;;;;;;;;13929:8;:18;;;;;;;;;;;;13922:61;;;;;;13949:8;:24;;;13922:61;;;;13975:4;13922:61;;;;;;13981:1;13922:61;;;13892:7;:27;13900:8;:18;;;;;;;;;;;;13892:27;;;;;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14051:8;:18;;;;;;;;;;;;14002:26;:46;14029:8;:18;;;;;;;;;;;;14002:46;;;;;;;;;;;;;;;;:67;;;;;;;;;;;;;;;;;;13054:1031;14147:41;14163:8;:24;;;14147:11;;:15;;:41;;;;:::i;:::-;14133:11;:55;;;;14277:13;;;;;;;;;;;:22;;;14308:9;;;;;;;;;;;14320:8;:21;;;14277:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14277:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14277:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14277:65:0;;;;;;;;;;;;;;;;14251:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12880:1883;;;14590:13;;;;;;;;;;;:22;;;14613:8;:18;;;;;;;;;;;;14633:8;:21;;;14590:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14590:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14590:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14590:65:0;;;;;;;;;;;;;;;;14564:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12880:1883;14846:13;;;;;;;;;;;:22;;;14869:10;14881:16;;14846:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14846:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14846:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14846:52:0;;;;;;;;;;;;;;;;14824:174;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15101:13;;;;;;;;;;;:22;;;15124:8;:17;;;;;;;;;;;;15143:37;15163:16;;15143:15;;:19;;:37;;;;:::i;:::-;15101:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15101:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15101:80:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15101:80:0;;;;;;;;;;;;;;;;15079:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15389:8;:17;;;;;;;;;;;;15298:216;;15356:8;:18;;;;;;;;;;;;15298:216;;15328:13;15298:216;15421:8;:21;;;15457:8;:24;;;15496:7;15298:216;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11784:3738;;;:::o;24055:150::-;24113:7;24146:1;24141;:6;;24133:15;;;;;;24159:9;24175:1;24171;:5;24159:17;;24196:1;24189:8;;;24055:150;;;;:::o;23614:303::-;23672:7;23771:1;23767;:5;23759:14;;;;;;23784:9;23800:1;23796;:5;;;;;;23784:17;;23908:1;23901:8;;;23614:303;;;;:::o;24293:150::-;24351:7;24371:9;24387:1;24383;:5;24371:17;;24412:1;24407;:6;;24399:15;;;;;;24434:1;24427:8;;;24293:150;;;;:::o;18367:107::-;18425:7;18457:1;18452;:6;;:14;;18465:1;18452:14;;;18461:1;18452:14;18445:21;;18367:107;;;;:::o;23046:433::-;23104:7;23353:1;23348;:6;23344:47;;;23378:1;23371:8;;;;23344:47;23403:9;23419:1;23415;:5;23403:17;;23448:1;23443;23439;:5;;;;;;:10;23431:19;;;;;;23470:1;23463:8;;;23046:433;;;;;:::o;27:19644::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://4de1d837959f8d6815c9abcccf9c825b8d232184a35233b4c37a70f3426e9c81

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.