ETH Price: $3,529.63 (-4.98%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Get Current Vote...210309862024-10-23 21:29:2375 days ago1729718963IN
0x2DA25383...742934aeA
0 ETH0.000651499.31643585
Execute193770722024-03-06 15:37:11306 days ago1709739431IN
0x2DA25383...742934aeA
0 ETH0.0271710892.57262891
Queue193409052024-03-01 14:25:23312 days ago1709303123IN
0x2DA25383...742934aeA
0 ETH0.0157538961.33882537
Cast Vote193238552024-02-28 5:09:11314 days ago1709096951IN
0x2DA25383...742934aeA
0 ETH0.0045128332.68656758
Cast Vote193228872024-02-28 1:54:11314 days ago1709085251IN
0x2DA25383...742934aeA
0 ETH0.0049540531.9278866
Cast Vote193228852024-02-28 1:53:47314 days ago1709085227IN
0x2DA25383...742934aeA
0 ETH0.0036295232.75446882
Propose193228352024-02-28 1:43:47314 days ago1709084627IN
0x2DA25383...742934aeA
0 ETH0.0308512830.00843919
Cast Vote184482192023-10-28 10:51:59437 days ago1698490319IN
0x2DA25383...742934aeA
0 ETH0.0012635611.89509955
Cast Vote184452822023-10-28 1:00:11437 days ago1698454811IN
0x2DA25383...742934aeA
0 ETH0.0011640910.95868298
Cast Vote184449252023-10-27 23:48:35437 days ago1698450515IN
0x2DA25383...742934aeA
0 ETH0.0014686111
Cast Vote184415552023-10-27 12:30:35438 days ago1698409835IN
0x2DA25383...742934aeA
0 ETH0.0020277615.18812104
Cast Vote184392822023-10-27 4:52:59438 days ago1698382379IN
0x2DA25383...742934aeA
0 ETH0.0019428912.90016743
Propose184379892023-10-27 0:32:47438 days ago1698366767IN
0x2DA25383...742934aeA
0 ETH0.0161054513
Execute173854232023-06-01 10:39:59586 days ago1685615999IN
0x2DA25383...742934aeA
0 ETH0.0099198223.79300245
Queue173459152023-05-26 21:22:59591 days ago1685136179IN
0x2DA25383...742934aeA
0 ETH0.0060866724.6602852
Cast Vote173326862023-05-25 0:45:23593 days ago1684975523IN
0x2DA25383...742934aeA
0 ETH0.0033058924.76140565
Cast Vote173325332023-05-25 0:14:35593 days ago1684973675IN
0x2DA25383...742934aeA
0 ETH0.0042946427.67811324
Propose173325002023-05-25 0:07:47593 days ago1684973267IN
0x2DA25383...742934aeA
0 ETH0.0367545529.75884529
Cast Vote172766992023-05-17 3:28:35601 days ago1684294115IN
0x2DA25383...742934aeA
0 ETH0.0075749154.86522915
Cast Vote172684752023-05-15 23:37:35602 days ago1684193855IN
0x2DA25383...742934aeA
0 ETH0.0062127940.04015493
Propose172684612023-05-15 23:34:47602 days ago1684193687IN
0x2DA25383...742934aeA
0 ETH0.0218990740.16733562
Cast Vote172518592023-05-13 15:12:11605 days ago1683990731IN
0x2DA25383...742934aeA
0 ETH0.0053720840.23729529
Cast Vote172517112023-05-13 14:42:11605 days ago1683988931IN
0x2DA25383...742934aeA
0 ETH0.0063611240.99611549
Propose172472102023-05-12 23:27:11605 days ago1683934031IN
0x2DA25383...742934aeA
0 ETH0.0177211338.70240808
Execute168491802023-03-17 18:02:35661 days ago1679076155IN
0x2DA25383...742934aeA
0 ETH0.022734117.99069717
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
YamGovernorAlpha

Compiler Version
v0.5.15+commit.6a57276f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-02
*/

pragma solidity ^0.5.15;
pragma experimental ABIEncoderV2;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot 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-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/* Copyright 2020 Compound Labs, Inc.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */

// Original work from Compound: https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/GovernorAlpha.sol
// Modified to work in the YAM system


contract YamGovernorAlpha {
    /// @notice The name of this contract
    string public constant name = "YAM Governor Alpha";

    /// @notice The number of votes in support of a proposal required in order for a quorum to be reached and for a vote to succeed
    function quorumVotes() public view returns (uint256) { return 200000 * 10**24; } // 4% of YAM

    /// @notice The number of votes required in order for a voter to become a proposer
    function proposalThreshold() public view returns (uint256) { return 50000 * 10**24; } // 1% of YAM

    /// @notice The maximum number of actions that can be included in a proposal
    function proposalMaxOperations() public pure returns (uint256) { return 10; } // 10 actions

    /// @notice The delay before voting on a proposal may take place, once proposed
    function votingDelay() public pure returns (uint256) { return 1; } // 1 block

    /// @notice The duration of voting on a proposal, in blocks
    function votingPeriod() public pure returns (uint256) { return 12345; } // ~2 days in blocks (assuming 14s blocks)

    /// @notice The address of the Compound Protocol Timelock
    TimelockInterface public timelock;

    /// @notice The address of the Compound governance token
    YAMInterface public yam;

    /// @notice The address of the Governor Guardian
    address public guardian;

    /// @notice The total number of proposals
    uint256 public proposalCount;

    /// @notice Addresses of LP Staking Contracts
    address[] public incentivizers;

    struct Proposal {
        // Unique id for looking up a proposal
        uint256 id;

        // Creator of the proposal
        address proposer;

        // The timestamp that the proposal will be available for execution, set once the vote succeeds
        uint256 eta;

        // the ordered list of target addresses for calls to be made
        address[] targets;

        // The ordered list of values (i.e. msg.value) to be passed to the calls to be made
        uint[] values;

        // The ordered list of function signatures to be called
        string[] signatures;

        // The ordered list of calldata to be passed to each call
        bytes[] calldatas;

        // The block at which voting begins: holders must delegate their votes prior to this block
        uint256 startBlock;

        // The block at which voting ends: votes must be cast prior to this block
        uint256 endBlock;

        // Current number of votes in favor of this proposal
        uint256 forVotes;

        // Current number of votes in opposition to this proposal
        uint256 againstVotes;

        // Flag marking whether the proposal has been canceled
        bool canceled;

        // Flag marking whether the proposal has been executed
        bool executed;

        // Receipts of ballots for the entire set of voters
        mapping (address => Receipt) receipts;
    }

    // Ballot receipt record for a voter
    struct Receipt {
        // Whether or not a vote has been cast
        bool hasVoted;

        // Whether or not the voter supports the proposal
        bool support;

        // The number of votes the voter had, which were cast
        uint256 votes;
    }

    // Possible states that a proposal may be in
    enum ProposalState {
        Pending,
        Active,
        Canceled,
        Defeated,
        Succeeded,
        Queued,
        Expired,
        Executed
    }

    /// @notice The official record of all proposals ever proposed
    mapping (uint256 => Proposal) public proposals;

    /// @notice The latest proposal for each proposer
    mapping (address => uint256) public latestProposalIds;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the ballot struct used by the contract
    bytes32 public constant BALLOT_TYPEHASH = keccak256("Ballot(uint256 proposalId,bool support)");

    /// @notice An event emitted when a new proposal is created
    event ProposalCreated(uint256 id, address proposer, address[] targets, uint[] values, string[] signatures, bytes[] calldatas, uint256 startBlock, uint256 endBlock, string description);

    /// @notice An event emitted when a vote has been cast on a proposal
    event VoteCast(address voter, uint256 proposalId, bool support, uint256 votes);

    /// @notice An event emitted when a proposal has been canceled
    event ProposalCanceled(uint256 id);

    /// @notice An event emitted when a proposal has been queued in the Timelock
    event ProposalQueued(uint256 id, uint256 eta);

    /// @notice An event emitted when a proposal has been executed in the Timelock
    event ProposalExecuted(uint256 id);

    constructor(address timelock_, address yam_, address[] memory incentivizers_) public {
        timelock = TimelockInterface(timelock_);
        yam = YAMInterface(yam_);
        incentivizers = incentivizers_;
        guardian = 0xFF3B0A88054f08B91E0c89eEc9a38817501F599A;
    }

    function getIncentivizers()
        public
        view
        returns (address[] memory)
    {
        address[] memory incs = incentivizers;
        return incs;
    }

    function addIncentivizer(address incentivizer)
        public
    {
        // as a sanity check, make sure it has the function and there is no error
        // otherwise could brick governance
        Incentivizer(incentivizer).getPriorVotes(guardian, block.number - 1);

        for (uint256 i = 0; i < incentivizers.length; i++) {
            require(incentivizers[i] != incentivizer, "already added");
        }

        require(msg.sender == address(timelock), "GovernorAlpha::!timelock");
        incentivizers.push(incentivizer);
    }

    function removeIncentivizer(uint256 index)
        public
    {
        require(msg.sender == address(timelock), "GovernorAlpha::!timelock");
        if (index >= incentivizers.length) return;

        if (index != incentivizers.length-1) {
          incentivizers[index] = incentivizers[incentivizers.length - 1];
        }

        incentivizers.length--;
    }

    function getPriorVotes(address account, uint256 blockNumber)
        public
        returns (uint256)
    {
        // -- get prior votes for yam
        require(blockNumber < block.number, "Gov::getPriorVotes: not yet determined");

        uint256 votes = yam.getPriorVotes(account, blockNumber);
        for (uint256 i = 0; i < incentivizers.length; i++) {
            // get prior votes for staking (stakers get full pool power)
            votes = SafeMath.add(votes, Incentivizer(incentivizers[i]).getPriorVotes(account, blockNumber));
        }
        return votes;
    }

    function getCurrentVotes(address account)
        public
        returns (uint256)
    {
        uint256 votes = yam.getCurrentVotes(account);
        for (uint256 i = 0; i < incentivizers.length; i++) {
            // get prior votes for staking (stakers get full pool power)
            votes = SafeMath.add(votes, Incentivizer(incentivizers[i]).getCurrentVotes(account));
        }
        return votes;
    }

    function propose(
        address[] memory targets,
        uint[] memory values,
        string[] memory signatures,
        bytes[] memory calldatas,
        string memory description
    )
        public
        returns (uint256)
    {
        require(getPriorVotes(msg.sender, sub256(block.number, 1)) >= proposalThreshold(), "GovernorAlpha::propose: proposer votes below proposal threshold");
        require(targets.length == values.length && targets.length == signatures.length && targets.length == calldatas.length, "GovernorAlpha::propose: proposal function information arity mismatch");
        require(targets.length != 0, "GovernorAlpha::propose: must provide actions");
        require(targets.length <= proposalMaxOperations(), "GovernorAlpha::propose: too many actions");

        uint256 latestProposalId = latestProposalIds[msg.sender];
        if (latestProposalId != 0) {
          ProposalState proposersLatestProposalState = state(latestProposalId);
          require(proposersLatestProposalState != ProposalState.Active, "GovernorAlpha::propose: one live proposal per proposer, found an already active proposal");
          require(proposersLatestProposalState != ProposalState.Pending, "GovernorAlpha::propose: one live proposal per proposer, found an already pending proposal");
        }

        uint256 startBlock = add256(block.number, votingDelay());
        uint256 endBlock = add256(startBlock, votingPeriod());

        proposalCount++;
        Proposal memory newProposal = Proposal({
            id: proposalCount,
            proposer: msg.sender,
            eta: 0,
            targets: targets,
            values: values,
            signatures: signatures,
            calldatas: calldatas,
            startBlock: startBlock,
            endBlock: endBlock,
            forVotes: 0,
            againstVotes: 0,
            canceled: false,
            executed: false
        });

        proposals[newProposal.id] = newProposal;
        latestProposalIds[newProposal.proposer] = newProposal.id;

        emit ProposalCreated(
            newProposal.id,
            msg.sender,
            targets,
            values,
            signatures,
            calldatas,
            startBlock,
            endBlock,
            description
        );
        return newProposal.id;
    }

    function queue(uint256 proposalId)
        public
    {
        require(state(proposalId) == ProposalState.Succeeded, "GovernorAlpha::queue: proposal can only be queued if it is succeeded");
        Proposal storage proposal = proposals[proposalId];
        uint256 eta = add256(block.timestamp, timelock.delay());
        for (uint256 i = 0; i < proposal.targets.length; i++) {
            _queueOrRevert(
                proposal.targets[i],
                proposal.values[i],
                proposal.signatures[i],
                proposal.calldatas[i],
                eta
            );
        }
        proposal.eta = eta;
        emit ProposalQueued(proposalId, eta);
    }

    function _queueOrRevert(
        address target,
        uint256 value,
        string memory signature,
        bytes memory data,
        uint256 eta
    )
        internal
    {
        require(!timelock.queuedTransactions(
              keccak256(
                  abi.encode(
                      target,
                      value,
                      signature,
                      data,
                      eta
                  )
              )
          ),
          "GovernorAlpha::_queueOrRevert: proposal action already queued at eta"
        );

        timelock.queueTransaction(target, value, signature, data, eta);
    }

    function execute(uint256 proposalId)
        public
        payable
    {
        require(state(proposalId) == ProposalState.Queued, "GovernorAlpha::execute: proposal can only be executed if it is queued");
        Proposal storage proposal = proposals[proposalId];
        proposal.executed = true;
        for (uint256 i = 0; i < proposal.targets.length; i++) {
            timelock.executeTransaction.value(proposal.values[i])(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta);
        }
        emit ProposalExecuted(proposalId);
    }

    function cancel(uint256 proposalId)
        public
    {
        ProposalState state = state(proposalId);
        require(state != ProposalState.Executed, "GovernorAlpha::cancel: cannot cancel executed proposal");

        Proposal storage proposal = proposals[proposalId];
        require(msg.sender == guardian || getPriorVotes(proposal.proposer, sub256(block.number, 1)) < proposalThreshold(), "GovernorAlpha::cancel: proposer above threshold");

        proposal.canceled = true;
        for (uint256 i = 0; i < proposal.targets.length; i++) {
            timelock.cancelTransaction(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta);
        }

        emit ProposalCanceled(proposalId);
    }

    function getActions(uint256 proposalId)
        public
        view
        returns (
            address[] memory targets,
            uint[] memory values,
            string[] memory signatures,
            bytes[] memory calldatas
        )
    {
        Proposal storage p = proposals[proposalId];
        return (p.targets, p.values, p.signatures, p.calldatas);
    }

    function getReceipt(uint256 proposalId, address voter)
        public
        view
        returns (Receipt memory)
    {
        return proposals[proposalId].receipts[voter];
    }

    function state(uint256 proposalId)
        public
        view
        returns (ProposalState)
    {
        require(proposalCount >= proposalId && proposalId > 0, "GovernorAlpha::state: invalid proposal id");
        Proposal storage proposal = proposals[proposalId];
        if (proposal.canceled) {
            return ProposalState.Canceled;
        } else if (block.number <= proposal.startBlock) {
            return ProposalState.Pending;
        } else if (block.number <= proposal.endBlock) {
            return ProposalState.Active;
        } else if (proposal.forVotes <= proposal.againstVotes || proposal.forVotes < quorumVotes()) {
            return ProposalState.Defeated;
        } else if (proposal.eta == 0) {
            return ProposalState.Succeeded;
        } else if (proposal.executed) {
            return ProposalState.Executed;
        } else if (block.timestamp >= add256(proposal.eta, timelock.GRACE_PERIOD())) {
            return ProposalState.Expired;
        } else {
            return ProposalState.Queued;
        }
    }

    function castVote(uint256 proposalId, bool support)
        public
    {
        return _castVote(msg.sender, proposalId, support);
    }

    function castVoteBySig(
        uint256 proposalId,
        bool support,
        uint8 v,
        bytes32 r,
        bytes32 s
    )
        public
    {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name)),
                getChainId(),
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                BALLOT_TYPEHASH,
                proposalId,
                support
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                domainSeparator,
                structHash
            )
        );

        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "GovernorAlpha::castVoteBySig: invalid signature");
        return _castVote(signatory, proposalId, support);
    }

    function _castVote(
        address voter,
        uint256 proposalId,
        bool support
    )
        internal
    {
        require(state(proposalId) == ProposalState.Active, "GovernorAlpha::_castVote: voting is closed");
        Proposal storage proposal = proposals[proposalId];
        Receipt storage receipt = proposal.receipts[voter];
        require(receipt.hasVoted == false, "GovernorAlpha::_castVote: voter already voted");
        uint256 votes = getPriorVotes(voter, proposal.startBlock);

        if (support) {
            proposal.forVotes = add256(proposal.forVotes, votes);
        } else {
            proposal.againstVotes = add256(proposal.againstVotes, votes);
        }

        receipt.hasVoted = true;
        receipt.support = support;
        receipt.votes = votes;

        emit VoteCast(voter, proposalId, support, votes);
    }

    function __acceptAdmin()
        public
    {
        require(msg.sender == guardian, "GovernorAlpha::__acceptAdmin: sender must be gov guardian");
        timelock.acceptAdmin();
    }

    function __abdicate()
        public
    {
        require(msg.sender == guardian, "GovernorAlpha::__abdicate: sender must be gov guardian");
        guardian = address(0);
    }

    function add256(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "addition overflow");
        return c;
    }

    function sub256(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "subtraction underflow");
        return a - b;
    }

    function getChainId() internal pure returns (uint256) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

interface TimelockInterface {
    function delay() external view returns (uint256);
    function GRACE_PERIOD() external view returns (uint256);
    function acceptAdmin() external;
    function queuedTransactions(bytes32 hash) external view returns (bool);
    function queueTransaction(address target, uint256 value, string calldata signature, bytes calldata data, uint256 eta) external returns (bytes32);
    function cancelTransaction(address target, uint256 value, string calldata signature, bytes calldata data, uint256 eta) external;
    function executeTransaction(address target, uint256 value, string calldata signature, bytes calldata data, uint256 eta) external payable returns (bytes memory);
}

interface YAMInterface {
    function getPriorVotes(address account, uint256 blockNumber) external view returns (uint256);
    function getCurrentVotes(address account) external view returns (uint256);
    function _acceptGov() external;
}

interface Incentivizer {
    function getPriorVotes(address account, uint256 blockNumber) external view returns (uint256);
    function getCurrentVotes(address account) external view returns (uint256);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"timelock_","type":"address"},{"internalType":"address","name":"yam_","type":"address"},{"internalType":"address[]","name":"incentivizers_","type":"address[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"signatures","type":"string[]"},{"indexed":false,"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"startBlock","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"},{"indexed":false,"internalType":"string","name":"description","type":"string"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ProposalQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"support","type":"bool"},{"indexed":false,"internalType":"uint256","name":"votes","type":"uint256"}],"name":"VoteCast","type":"event"},{"constant":true,"inputs":[],"name":"BALLOT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"__abdicate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"__acceptAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"incentivizer","type":"address"}],"name":"addIncentivizer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"}],"name":"castVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"castVoteBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getActions","outputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getIncentivizers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"name":"getReceipt","outputs":[{"components":[{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"bool","name":"support","type":"bool"},{"internalType":"uint256","name":"votes","type":"uint256"}],"internalType":"struct YamGovernorAlpha.Receipt","name":"","type":"tuple"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"guardian","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"incentivizers","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestProposalIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"proposalMaxOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"queue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"quorumVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeIncentivizer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum YamGovernorAlpha.ProposalState","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"timelock","outputs":[{"internalType":"contract TimelockInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"yam","outputs":[{"internalType":"contract YAMInterface","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162003c9238038062003c928339810160408190526200003491620001da565b600080546001600160a01b038086166001600160a01b0319928316179092556001805492851692909116919091179055805162000079906004906020840190620000aa565b5050600280546001600160a01b03191673ff3b0a88054f08b91e0c89eec9a38817501f599a17905550620002ba9050565b82805482825590600052602060002090810192821562000102579160200282015b828111156200010257825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620000cb565b506200011092915062000114565b5090565b6200013b91905b80821115620001105780546001600160a01b03191681556001016200011b565b90565b80516200014b81620002a0565b92915050565b600082601f8301126200016357600080fd5b81516200017a62000174826200026d565b62000246565b91508181835260208401935060208101905083856020840282011115620001a057600080fd5b60005b83811015620001d05781620001b988826200013e565b8452506020928301929190910190600101620001a3565b5050505092915050565b600080600060608486031215620001f057600080fd5b6000620001fe86866200013e565b935050602062000211868287016200013e565b92505060408401516001600160401b038111156200022e57600080fd5b6200023c8682870162000151565b9150509250925092565b6040518181016001600160401b03811182821017156200026557600080fd5b604052919050565b60006001600160401b038211156200028457600080fd5b5060209081020190565b60006001600160a01b0382166200014b565b620002ab816200028e565b8114620002b757600080fd5b50565b6139c880620002ca6000396000f3fe6080604052600436106101d85760003560e01c80634634c61f11610102578063d33219b411610095578063deaaa7cc11610064578063deaaa7cc14610521578063e23a9a5214610536578063fcc92b0914610563578063fe0d94c114610583576101d8565b8063d33219b4146104b7578063da35c664146104cc578063da95691a146104e1578063ddf0b00914610501576101d8565b80639d628fb8116100d15780639d628fb81461044d578063b4b5ea571461046d578063b58131b01461048d578063b9a61961146104a2576101d8565b80634634c61f146103e3578063760fbc1314610403578063782d6fe1146104185780637bdbe4d014610438576101d8565b806320606b701161017a5780633932abb1116101495780633932abb11461036c5780633e4f49e61461038157806340e58ee5146103ae578063452a9320146103ce576101d8565b806320606b70146102f057806324bc1a64146103055780632c2b24501461031a578063328dd9821461033c576101d8565b806306fdde03116101b657806306fdde031461026a578063071c03321461028c57806315373e3d146102ae57806317977c61146102d0576101d8565b8063013cf08b146101dd57806302a251a31461021b5780630387d7e61461023d575b600080fd5b3480156101e957600080fd5b506101fd6101f83660046126e7565b610596565b6040516102129998979695949392919061379e565b60405180910390f35b34801561022757600080fd5b506102306105ef565b60405161021291906134b8565b34801561024957600080fd5b5061025d6102583660046126e7565b6105f6565b6040516102129190613361565b34801561027657600080fd5b5061027f61061d565b6040516102129190613567565b34801561029857600080fd5b506102a161064b565b604051610212919061354b565b3480156102ba57600080fd5b506102ce6102c9366004612735565b61065a565b005b3480156102dc57600080fd5b506102306102eb36600461252a565b610669565b3480156102fc57600080fd5b5061023061067b565b34801561031157600080fd5b50610230610692565b34801561032657600080fd5b5061032f6106a3565b604051610212919061345a565b34801561034857600080fd5b5061035c6103573660046126e7565b610708565b604051610212949392919061346b565b34801561037857600080fd5b50610230610997565b34801561038d57600080fd5b506103a161039c3660046126e7565b61099c565b6040516102129190613559565b3480156103ba57600080fd5b506102ce6103c93660046126e7565b610b27565b3480156103da57600080fd5b5061025d610d12565b3480156103ef57600080fd5b506102ce6103fe366004612765565b610d21565b34801561040f57600080fd5b506102ce610eb3565b34801561042457600080fd5b50610230610433366004612550565b610eef565b34801561044457600080fd5b50610230611057565b34801561045957600080fd5b506102ce61046836600461252a565b61105c565b34801561047957600080fd5b5061023061048836600461252a565b6111c1565b34801561049957600080fd5b506102306112b0565b3480156104ae57600080fd5b506102ce6112c0565b3480156104c357600080fd5b506102a1611345565b3480156104d857600080fd5b50610230611354565b3480156104ed57600080fd5b506102306104fc36600461258a565b61135a565b34801561050d57600080fd5b506102ce61051c3660046126e7565b6116f5565b34801561052d57600080fd5b50610230611963565b34801561054257600080fd5b50610556610551366004612705565b61196f565b60405161021291906136e8565b34801561056f57600080fd5b506102ce61057e3660046126e7565b6119d0565b6102ce6105913660046126e7565b611a92565b6005602052600090815260409020805460018201546002830154600784015460088501546009860154600a870154600b9097015495966001600160a01b0390951695939492939192909160ff8082169161010090041689565b6130395b90565b6004818154811061060357fe5b6000918252602090912001546001600160a01b0316905081565b6040518060400160405280601281526020017159414d20476f7665726e6f7220416c70686160701b81525081565b6001546001600160a01b031681565b610665338383611c57565b5050565b60066020526000908152604090205481565b6040516106879061334b565b604051809103902081565b6c02863c1f5cdae42f954000000090565b60608060048054806020026020016040519081016040528092919081815260200182805480156106fc57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106de575b50939550505050505090565b6060806060806000600560008781526020019081526020016000209050806003018160040182600501836006018380548060200260200160405190810160405280929190818152602001828054801561078a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161076c575b50505050509350828054806020026020016040519081016040528092919081815260200182805480156107dc57602002820191906000526020600020905b8154815260200190600101908083116107c8575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b828210156108af5760008481526020908190208301805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561089b5780601f106108705761010080835404028352916020019161089b565b820191906000526020600020905b81548152906001019060200180831161087e57829003601f168201915b505050505081526020019060010190610804565b50505050915080805480602002602001604051908101604052809291908181526020016000905b828210156109815760008481526020908190208301805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561096d5780601f106109425761010080835404028352916020019161096d565b820191906000526020600020905b81548152906001019060200180831161095057829003601f168201915b5050505050815260200190600101906108d6565b5050505090509450945094509450509193509193565b600190565b600081600354101580156109b05750600082115b6109d55760405162461bcd60e51b81526004016109cc906135c8565b60405180910390fd5b6000828152600560205260409020600b81015460ff16156109fa576002915050610b22565b80600701544311610a0f576000915050610b22565b80600801544311610a24576001915050610b22565b80600a01548160090154111580610a455750610a3e610692565b8160090154105b15610a54576003915050610b22565b6002810154610a67576004915050610b22565b600b810154610100900460ff1615610a83576007915050610b22565b6002810154600054604080516360d143f160e11b81529051610b0c93926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b158015610acf57600080fd5b505afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b079190810190612694565b611d7d565b4210610b1c576006915050610b22565b60059150505b919050565b6000610b328261099c565b90506007816007811115610b4257fe5b1415610b605760405162461bcd60e51b81526004016109cc906136a8565b60008281526005602052604090206002546001600160a01b0316331480610bad5750610b8a6112b0565b600180830154610bab916001600160a01b0390911690610433904390611da9565b105b610bc95760405162461bcd60e51b81526004016109cc90613648565b600b8101805460ff1916600117905560005b6003820154811015610cd5576000546003830180546001600160a01b039092169163591fcdfe919084908110610c0d57fe5b6000918252602090912001546004850180546001600160a01b039092169185908110610c3557fe5b9060005260206000200154856005018581548110610c4f57fe5b90600052602060002001866006018681548110610c6857fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401610c97959493929190613419565b600060405180830381600087803b158015610cb157600080fd5b505af1158015610cc5573d6000803e3d6000fd5b505060019092019150610bdb9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610d0591906134b8565b60405180910390a1505050565b6002546001600160a01b031681565b6000604051610d2f9061334b565b60408051918290038220828201909152601282527159414d20476f7665726e6f7220416c70686160701b6020909201919091527f63e44b07eb663d132f3b867c12624d91b2a07d728ab5358df3bb5d0d12341eb9610d8b611dd1565b30604051602001610d9f94939291906134c6565b6040516020818303038152906040528051906020012090506000604051610dc590613356565b604051908190038120610dde91899089906020016134fb565b60405160208183030381529060405280519060200120905060008282604051602001610e0b92919061331a565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610e489493929190613523565b6020604051602081039080840390855afa158015610e6a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e9d5760405162461bcd60e51b81526004016109cc90613688565b610ea8818a8a611c57565b505050505050505050565b6002546001600160a01b03163314610edd5760405162461bcd60e51b81526004016109cc906136d8565b600280546001600160a01b0319169055565b6000438210610f105760405162461bcd60e51b81526004016109cc90613588565b60015460405163782d6fe160e01b81526000916001600160a01b03169063782d6fe190610f43908790879060040161336f565b60206040518083038186803b158015610f5b57600080fd5b505afa158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f939190810190612694565b905060005b60045481101561104d576110438260048381548110610fb357fe5b60009182526020909120015460405163782d6fe160e01b81526001600160a01b039091169063782d6fe190610fee908a908a9060040161336f565b60206040518083038186803b15801561100657600080fd5b505afa15801561101a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061103e9190810190612694565b611dd5565b9150600101610f98565b5090505b92915050565b600a90565b60025460405163782d6fe160e01b81526001600160a01b038381169263782d6fe192611094929091169043600019019060040161336f565b60206040518083038186803b1580156110ac57600080fd5b505afa1580156110c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110e49190810190612694565b5060005b60045481101561114457816001600160a01b03166004828154811061110957fe5b6000918252602090912001546001600160a01b0316141561113c5760405162461bcd60e51b81526004016109cc906135e8565b6001016110e8565b506000546001600160a01b0316331461116f5760405162461bcd60e51b81526004016109cc906135f8565b600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60015460405163b4b5ea5760e01b815260009182916001600160a01b039091169063b4b5ea57906111f6908690600401613361565b60206040518083038186803b15801561120e57600080fd5b505afa158015611222573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112469190810190612694565b905060005b6004548110156112a95761129f826004838154811061126657fe5b60009182526020909120015460405163b4b5ea5760e01b81526001600160a01b039091169063b4b5ea5790610fee908990600401613361565b915060010161124b565b5092915050565b6ba18f07d736b90be55000000090565b6002546001600160a01b031633146112ea5760405162461bcd60e51b81526004016109cc90613578565b6000805460408051630e18b68160e01b815290516001600160a01b0390921692630e18b6819260048084019382900301818387803b15801561132b57600080fd5b505af115801561133f573d6000803e3d6000fd5b50505050565b6000546001600160a01b031681565b60035481565b60006113646112b0565b61137333610433436001611da9565b10156113915760405162461bcd60e51b81526004016109cc90613678565b845186511480156113a3575083518651145b80156113b0575082518651145b6113cc5760405162461bcd60e51b81526004016109cc90613638565b85516113ea5760405162461bcd60e51b81526004016109cc90613668565b6113f2611057565b865111156114125760405162461bcd60e51b81526004016109cc90613618565b33600090815260066020526040902054801561148f5760006114338261099c565b9050600181600781111561144357fe5b14156114615760405162461bcd60e51b81526004016109cc90613698565b600081600781111561146f57fe5b141561148d5760405162461bcd60e51b81526004016109cc90613608565b505b600061149d43610b07610997565b905060006114ad82610b076105ef565b60038054600101905590506114c0611f59565b604051806101a001604052806003548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000151581526020016000151581525090508060056000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015560608201518160030190805190602001906115a3929190611fce565b50608082015180516115bf916004840191602090910190612033565b5060a082015180516115db91600584019160209091019061207a565b5060c082015180516115f79160068401916020909101906120d3565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b0160006101000a81548160ff02191690831515021790555061018082015181600b0160016101000a81548160ff02191690831515021790555090505080600001516006600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e6040516116dd999897969594939291906136f6565b60405180910390a15193505050505b95945050505050565b60046117008261099c565b600781111561170b57fe5b146117285760405162461bcd60e51b81526004016109cc90613598565b600081815260056020908152604080832083548251630d48571f60e31b815292519194936117819342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b158015610acf57600080fd5b905060005b6003830154811015611929576119218360030182815481106117a457fe5b6000918252602090912001546004850180546001600160a01b0390921691849081106117cc57fe5b90600052602060002001548560050184815481106117e657fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156118745780601f1061184957610100808354040283529160200191611874565b820191906000526020600020905b81548152906001019060200180831161185757829003601f168201915b505050505086600601858154811061188857fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156119165780601f106118eb57610100808354040283529160200191611916565b820191906000526020600020905b8154815290600101906020018083116118f957829003601f168201915b505050505086611dfa565b600101611786565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290610d059085908490613824565b60405161068790613356565b61197761212c565b5060009182526005602090815260408084206001600160a01b03939093168452600c9092018152918190208151606081018352815460ff8082161515835261010090910416151593810193909352600101549082015290565b6000546001600160a01b031633146119fa5760405162461bcd60e51b81526004016109cc906135f8565b6004548110611a0857611a8f565b600454600019018114611a7c57600480546000198101908110611a2757fe5b600091825260209091200154600480546001600160a01b039092169183908110611a4d57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b600480549061066590600019830161214c565b50565b6005611a9d8261099c565b6007811115611aa857fe5b14611ac55760405162461bcd60e51b81526004016109cc906135a8565b6000818152600560205260408120600b8101805461ff001916610100179055905b6003820154811015611c1b576000546004830180546001600160a01b0390921691630825f38f919084908110611b1857fe5b9060005260206000200154846003018481548110611b3257fe5b6000918252602090912001546004860180546001600160a01b039092169186908110611b5a57fe5b9060005260206000200154866005018681548110611b7457fe5b90600052602060002001876006018781548110611b8d57fe5b9060005260206000200188600201546040518763ffffffff1660e01b8152600401611bbc959493929190613419565b6000604051808303818588803b158015611bd557600080fd5b505af1158015611be9573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c1291908101906126b2565b50600101611ae6565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051611c4b91906134b8565b60405180910390a15050565b6001611c628361099c565b6007811115611c6d57fe5b14611c8a5760405162461bcd60e51b81526004016109cc906136b8565b60008281526005602090815260408083206001600160a01b0387168452600c8101909252909120805460ff1615611cd35760405162461bcd60e51b81526004016109cc906135d8565b6000611ce3868460070154610eef565b90508315611d0357611cf9836009015482611d7d565b6009840155611d17565b611d1183600a015482611d7d565b600a8401555b8154600160ff19909116811761ff0019166101008615150217835582018190556040517f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4690611d6d90889088908890869061338a565b60405180910390a1505050505050565b600082820183811015611da25760405162461bcd60e51b81526004016109cc90613628565b9392505050565b600082821115611dcb5760405162461bcd60e51b81526004016109cc906136c8565b50900390565b4690565b600082820183811015611da25760405162461bcd60e51b81526004016109cc906135b8565b6000546040516001600160a01b039091169063f2b0653790611e2890889088908890889088906020016133bf565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611e5a91906134b8565b60206040518083038186803b158015611e7257600080fd5b505afa158015611e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611eaa9190810190612676565b15611ec75760405162461bcd60e51b81526004016109cc90613658565b600054604051633a66f90160e01b81526001600160a01b0390911690633a66f90190611eff90889088908890889088906004016133bf565b602060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611f519190810190612694565b505050505050565b604051806101a001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215612023579160200282015b8281111561202357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611fee565b5061202f929150612175565b5090565b82805482825590600052602060002090810192821561206e579160200282015b8281111561206e578251825591602001919060010190612053565b5061202f929150612199565b8280548282559060005260206000209081019282156120c7579160200282015b828111156120c757825180516120b79184916020909101906121b3565b509160200191906001019061209a565b5061202f929150612220565b828054828255906000526020600020908101928215612120579160200282015b8281111561212057825180516121109184916020909101906121b3565b50916020019190600101906120f3565b5061202f929150612243565b604080516060810182526000808252602082018190529181019190915290565b81548183558181111561217057600083815260209020612170918101908301612199565b505050565b6105f391905b8082111561202f5780546001600160a01b031916815560010161217b565b6105f391905b8082111561202f576000815560010161219f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106121f457805160ff191683800117855561206e565b8280016001018555821561206e579182018281111561206e578251825591602001919060010190612053565b6105f391905b8082111561202f57600061223a8282612266565b50600101612226565b6105f391905b8082111561202f57600061225d8282612266565b50600101612249565b50805460018160011615610100020316600290046000825580601f1061228c5750611a8f565b601f016020900490600052602060002090810190611a8f9190612199565b803561105181613956565b600082601f8301126122c657600080fd5b81356122d96122d482613859565b613832565b915081818352602084019350602081019050838560208402820111156122fe57600080fd5b60005b8381101561232a578161231488826122aa565b8452506020928301929190910190600101612301565b5050505092915050565b600082601f83011261234557600080fd5b81356123536122d482613859565b81815260209384019390925082018360005b8381101561232a578135860161237b888261248a565b8452506020928301929190910190600101612365565b600082601f8301126123a257600080fd5b81356123b06122d482613859565b81815260209384019390925082018360005b8381101561232a57813586016123d8888261248a565b84525060209283019291909101906001016123c2565b600082601f8301126123ff57600080fd5b813561240d6122d482613859565b9150818183526020840193506020810190508385602084028201111561243257600080fd5b60005b8381101561232a57816124488882612474565b8452506020928301929190910190600101612435565b80356110518161396a565b80516110518161396a565b803561105181613973565b805161105181613973565b600082601f83011261249b57600080fd5b81356124a96122d48261387a565b915080825260208301602083018583830111156124c557600080fd5b6124d083828461390a565b50505092915050565b600082601f8301126124ea57600080fd5b81516124f86122d48261387a565b9150808252602083016020830185838301111561251457600080fd5b6124d0838284613916565b80356110518161397c565b60006020828403121561253c57600080fd5b600061254884846122aa565b949350505050565b6000806040838503121561256357600080fd5b600061256f85856122aa565b925050602061258085828601612474565b9150509250929050565b600080600080600060a086880312156125a257600080fd5b853567ffffffffffffffff8111156125b957600080fd5b6125c5888289016122b5565b955050602086013567ffffffffffffffff8111156125e257600080fd5b6125ee888289016123ee565b945050604086013567ffffffffffffffff81111561260b57600080fd5b61261788828901612391565b935050606086013567ffffffffffffffff81111561263457600080fd5b61264088828901612334565b925050608086013567ffffffffffffffff81111561265d57600080fd5b6126698882890161248a565b9150509295509295909350565b60006020828403121561268857600080fd5b60006125488484612469565b6000602082840312156126a657600080fd5b6000612548848461247f565b6000602082840312156126c457600080fd5b815167ffffffffffffffff8111156126db57600080fd5b612548848285016124d9565b6000602082840312156126f957600080fd5b60006125488484612474565b6000806040838503121561271857600080fd5b60006127248585612474565b9250506020612580858286016122aa565b6000806040838503121561274857600080fd5b60006127548585612474565b92505060206125808582860161245e565b600080600080600060a0868803121561277d57600080fd5b60006127898888612474565b955050602061279a8882890161245e565b94505060406127ab8882890161251f565b93505060606127bc88828901612474565b925050608061266988828901612474565b60006127d98383612808565b505060200190565b6000611da283836129aa565b60006127d98383612990565b612802816138ed565b82525050565b612802816138c1565b600061281c826138b4565b61282681856138b8565b9350612831836138a2565b8060005b8381101561285f57815161284988826127cd565b9750612854836138a2565b925050600101612835565b509495945050505050565b6000612875826138b4565b61287f81856138b8565b935083602082028501612891856138a2565b8060005b858110156128cb57848403895281516128ae85826127e1565b94506128b9836138a2565b60209a909a0199925050600101612895565b5091979650505050505050565b60006128e3826138b4565b6128ed81856138b8565b9350836020820285016128ff856138a2565b8060005b858110156128cb578484038952815161291c85826127e1565b9450612927836138a2565b60209a909a0199925050600101612903565b6000612944826138b4565b61294e81856138b8565b9350612959836138a2565b8060005b8381101561285f57815161297188826127ed565b975061297c836138a2565b92505060010161295d565b612802816138cc565b612802816105f3565b6128026129a5826105f3565b6105f3565b60006129b5826138b4565b6129bf81856138b8565b93506129cf818560208601613916565b6129d881613942565b9093019392505050565b6000815460018116600081146129ff5760018114612a2557612a64565b607f6002830416612a1081876138b8565b60ff1984168152955050602085019250612a64565b60028204612a3381876138b8565b9550612a3e856138a8565b60005b82811015612a5d57815488820152600190910190602001612a41565b8701945050505b505092915050565b612802816138f4565b612802816138ff565b6000612a8b6039836138b8565b7f476f7665726e6f72416c7068613a3a5f5f61636365707441646d696e3a20736581527f6e646572206d75737420626520676f7620677561726469616e00000000000000602082015260400192915050565b6000612aea6026836138b8565b7f476f763a3a6765745072696f72566f7465733a206e6f742079657420646574658152651c9b5a5b995960d21b602082015260400192915050565b6000612b326044836138b8565b7f476f7665726e6f72416c7068613a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b6000612b9e6045836138b8565b7f476f7665726e6f72416c7068613a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b6000612c0b600283610b22565b61190160f01b815260020192915050565b6000612c29601b836138b8565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000612c626029836138b8565b7f476f7665726e6f72416c7068613a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000612cad602d836138b8565b7f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f7465722081526c185b1c9958591e481d9bdd1959609a1b602082015260400192915050565b6000612cfc600d836138b8565b6c185b1c9958591e481859191959609a1b815260200192915050565b6000612d256018836138b8565b7f476f7665726e6f72416c7068613a3a2174696d656c6f636b0000000000000000815260200192915050565b6000612d5e6059836138b8565b7f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b6000612de36028836138b8565b7f476f7665726e6f72416c7068613a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b6000612e2d6011836138b8565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b6000612e5a604383610b22565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000612ec5602783610b22565b7f42616c6c6f742875696e743235362070726f706f73616c49642c626f6f6c20738152667570706f72742960c81b602082015260270192915050565b6000612f0e6044836138b8565b7f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b6000612f7a602f836138b8565b7f476f7665726e6f72416c7068613a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b6000612fcb6044836138b8565b7f476f7665726e6f72416c7068613a3a5f71756575654f725265766572743a207081527f726f706f73616c20616374696f6e20616c7265616479207175657565642061746020820152632065746160e01b604082015260600192915050565b6000613037602c836138b8565b7f476f7665726e6f72416c7068613a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b6000613085603f836138b8565b7f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b60006130e4602f836138b8565b7f476f7665726e6f72416c7068613a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b60006131356058836138b8565b7f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b60006131ba6036836138b8565b7f476f7665726e6f72416c7068613a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b6000613212602a836138b8565b7f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f74696e67815269081a5cc818db1bdcd95960b21b602082015260400192915050565b600061325e6015836138b8565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b600061328f6036836138b8565b7f476f7665726e6f72416c7068613a3a5f5f61626469636174653a2073656e6465815275391036bab9ba1031329033b7bb1033bab0b93234b0b760511b602082015260400192915050565b805160608301906132eb8482612987565b5060208201516132fe6020850182612987565b50604082015161133f6040850182612990565b612802816138e7565b600061332582612bfe565b91506133318285612999565b6020820191506133418284612999565b5060200192915050565b600061105182612e4d565b600061105182612eb8565b602081016110518284612808565b6040810161337d8285612808565b611da26020830184612990565b608081016133988287612808565b6133a56020830186612990565b6133b26040830185612987565b6116ec6060830184612990565b60a081016133cd8288612808565b6133da6020830187612990565b81810360408301526133ec81866129aa565b9050818103606083015261340081856129aa565b905061340f6080830184612990565b9695505050505050565b60a081016134278288612808565b6134346020830187612990565b818103604083015261344681866129e2565b9050818103606083015261340081856129e2565b60208082528101611da28184612811565b6080808252810161347c8187612811565b905081810360208301526134908186612939565b905081810360408301526134a481856128d8565b9050818103606083015261340f818461286a565b602081016110518284612990565b608081016134d48287612990565b6134e16020830186612990565b6134ee6040830185612990565b6116ec6060830184612808565b606081016135098286612990565b6135166020830185612990565b6125486040830184612987565b608081016135318287612990565b61353e6020830186613311565b6133b26040830185612990565b602081016110518284612a6c565b602081016110518284612a75565b60208082528101611da281846129aa565b6020808252810161105181612a7e565b6020808252810161105181612add565b6020808252810161105181612b25565b6020808252810161105181612b91565b6020808252810161105181612c1c565b6020808252810161105181612c55565b6020808252810161105181612ca0565b6020808252810161105181612cef565b6020808252810161105181612d18565b6020808252810161105181612d51565b6020808252810161105181612dd6565b6020808252810161105181612e20565b6020808252810161105181612f01565b6020808252810161105181612f6d565b6020808252810161105181612fbe565b602080825281016110518161302a565b6020808252810161105181613078565b60208082528101611051816130d7565b6020808252810161105181613128565b60208082528101611051816131ad565b6020808252810161105181613205565b6020808252810161105181613251565b6020808252810161105181613282565b6060810161105182846132da565b6101208101613705828c612990565b613712602083018b6127f9565b8181036040830152613724818a612811565b905081810360608301526137388189612939565b9050818103608083015261374c81886128d8565b905081810360a0830152613760818761286a565b905061376f60c0830186612990565b61377c60e0830185612990565b81810361010083015261378f81846129aa565b9b9a5050505050505050505050565b61012081016137ad828c612990565b6137ba602083018b612808565b6137c7604083018a612990565b6137d46060830189612990565b6137e16080830188612990565b6137ee60a0830187612990565b6137fb60c0830186612990565b61380860e0830185612987565b613816610100830184612987565b9a9950505050505050505050565b6040810161337d8285612990565b60405181810167ffffffffffffffff8111828210171561385157600080fd5b604052919050565b600067ffffffffffffffff82111561387057600080fd5b5060209081020190565b600067ffffffffffffffff82111561389157600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611051826138db565b151590565b80610b228161394c565b6001600160a01b031690565b60ff1690565b6000611051825b6000611051826138c1565b6000611051826138d1565b82818337506000910152565b60005b83811015613931578181015183820152602001613919565b8381111561133f5750506000910152565b601f01601f191690565b60088110611a8f57fe5b61395f816138c1565b8114611a8f57600080fd5b61395f816138cc565b61395f816105f3565b61395f816138e756fea365627a7a7231582089c5d8fff2ed81d2d8ef6c4a7f52b83068fbcffbaa43d9ec235f1ab15aebd0986c6578706572696d656e74616cf564736f6c634300050f00400000000000000000000000008b4f1616751117c38a0f84f9a146cca191ea3ec50000000000000000000000000aacfbec6a24756c20d41914f2caba817c0d852100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d67c05523d8ec1c60760fd017ef006b9f6e496d0

Deployed Bytecode

0x6080604052600436106101d85760003560e01c80634634c61f11610102578063d33219b411610095578063deaaa7cc11610064578063deaaa7cc14610521578063e23a9a5214610536578063fcc92b0914610563578063fe0d94c114610583576101d8565b8063d33219b4146104b7578063da35c664146104cc578063da95691a146104e1578063ddf0b00914610501576101d8565b80639d628fb8116100d15780639d628fb81461044d578063b4b5ea571461046d578063b58131b01461048d578063b9a61961146104a2576101d8565b80634634c61f146103e3578063760fbc1314610403578063782d6fe1146104185780637bdbe4d014610438576101d8565b806320606b701161017a5780633932abb1116101495780633932abb11461036c5780633e4f49e61461038157806340e58ee5146103ae578063452a9320146103ce576101d8565b806320606b70146102f057806324bc1a64146103055780632c2b24501461031a578063328dd9821461033c576101d8565b806306fdde03116101b657806306fdde031461026a578063071c03321461028c57806315373e3d146102ae57806317977c61146102d0576101d8565b8063013cf08b146101dd57806302a251a31461021b5780630387d7e61461023d575b600080fd5b3480156101e957600080fd5b506101fd6101f83660046126e7565b610596565b6040516102129998979695949392919061379e565b60405180910390f35b34801561022757600080fd5b506102306105ef565b60405161021291906134b8565b34801561024957600080fd5b5061025d6102583660046126e7565b6105f6565b6040516102129190613361565b34801561027657600080fd5b5061027f61061d565b6040516102129190613567565b34801561029857600080fd5b506102a161064b565b604051610212919061354b565b3480156102ba57600080fd5b506102ce6102c9366004612735565b61065a565b005b3480156102dc57600080fd5b506102306102eb36600461252a565b610669565b3480156102fc57600080fd5b5061023061067b565b34801561031157600080fd5b50610230610692565b34801561032657600080fd5b5061032f6106a3565b604051610212919061345a565b34801561034857600080fd5b5061035c6103573660046126e7565b610708565b604051610212949392919061346b565b34801561037857600080fd5b50610230610997565b34801561038d57600080fd5b506103a161039c3660046126e7565b61099c565b6040516102129190613559565b3480156103ba57600080fd5b506102ce6103c93660046126e7565b610b27565b3480156103da57600080fd5b5061025d610d12565b3480156103ef57600080fd5b506102ce6103fe366004612765565b610d21565b34801561040f57600080fd5b506102ce610eb3565b34801561042457600080fd5b50610230610433366004612550565b610eef565b34801561044457600080fd5b50610230611057565b34801561045957600080fd5b506102ce61046836600461252a565b61105c565b34801561047957600080fd5b5061023061048836600461252a565b6111c1565b34801561049957600080fd5b506102306112b0565b3480156104ae57600080fd5b506102ce6112c0565b3480156104c357600080fd5b506102a1611345565b3480156104d857600080fd5b50610230611354565b3480156104ed57600080fd5b506102306104fc36600461258a565b61135a565b34801561050d57600080fd5b506102ce61051c3660046126e7565b6116f5565b34801561052d57600080fd5b50610230611963565b34801561054257600080fd5b50610556610551366004612705565b61196f565b60405161021291906136e8565b34801561056f57600080fd5b506102ce61057e3660046126e7565b6119d0565b6102ce6105913660046126e7565b611a92565b6005602052600090815260409020805460018201546002830154600784015460088501546009860154600a870154600b9097015495966001600160a01b0390951695939492939192909160ff8082169161010090041689565b6130395b90565b6004818154811061060357fe5b6000918252602090912001546001600160a01b0316905081565b6040518060400160405280601281526020017159414d20476f7665726e6f7220416c70686160701b81525081565b6001546001600160a01b031681565b610665338383611c57565b5050565b60066020526000908152604090205481565b6040516106879061334b565b604051809103902081565b6c02863c1f5cdae42f954000000090565b60608060048054806020026020016040519081016040528092919081815260200182805480156106fc57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106de575b50939550505050505090565b6060806060806000600560008781526020019081526020016000209050806003018160040182600501836006018380548060200260200160405190810160405280929190818152602001828054801561078a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161076c575b50505050509350828054806020026020016040519081016040528092919081815260200182805480156107dc57602002820191906000526020600020905b8154815260200190600101908083116107c8575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b828210156108af5760008481526020908190208301805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561089b5780601f106108705761010080835404028352916020019161089b565b820191906000526020600020905b81548152906001019060200180831161087e57829003601f168201915b505050505081526020019060010190610804565b50505050915080805480602002602001604051908101604052809291908181526020016000905b828210156109815760008481526020908190208301805460408051601f600260001961010060018716150201909416939093049283018590048502810185019091528181529283018282801561096d5780601f106109425761010080835404028352916020019161096d565b820191906000526020600020905b81548152906001019060200180831161095057829003601f168201915b5050505050815260200190600101906108d6565b5050505090509450945094509450509193509193565b600190565b600081600354101580156109b05750600082115b6109d55760405162461bcd60e51b81526004016109cc906135c8565b60405180910390fd5b6000828152600560205260409020600b81015460ff16156109fa576002915050610b22565b80600701544311610a0f576000915050610b22565b80600801544311610a24576001915050610b22565b80600a01548160090154111580610a455750610a3e610692565b8160090154105b15610a54576003915050610b22565b6002810154610a67576004915050610b22565b600b810154610100900460ff1615610a83576007915050610b22565b6002810154600054604080516360d143f160e11b81529051610b0c93926001600160a01b03169163c1a287e2916004808301926020929190829003018186803b158015610acf57600080fd5b505afa158015610ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b079190810190612694565b611d7d565b4210610b1c576006915050610b22565b60059150505b919050565b6000610b328261099c565b90506007816007811115610b4257fe5b1415610b605760405162461bcd60e51b81526004016109cc906136a8565b60008281526005602052604090206002546001600160a01b0316331480610bad5750610b8a6112b0565b600180830154610bab916001600160a01b0390911690610433904390611da9565b105b610bc95760405162461bcd60e51b81526004016109cc90613648565b600b8101805460ff1916600117905560005b6003820154811015610cd5576000546003830180546001600160a01b039092169163591fcdfe919084908110610c0d57fe5b6000918252602090912001546004850180546001600160a01b039092169185908110610c3557fe5b9060005260206000200154856005018581548110610c4f57fe5b90600052602060002001866006018681548110610c6857fe5b9060005260206000200187600201546040518663ffffffff1660e01b8152600401610c97959493929190613419565b600060405180830381600087803b158015610cb157600080fd5b505af1158015610cc5573d6000803e3d6000fd5b505060019092019150610bdb9050565b507f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c83604051610d0591906134b8565b60405180910390a1505050565b6002546001600160a01b031681565b6000604051610d2f9061334b565b60408051918290038220828201909152601282527159414d20476f7665726e6f7220416c70686160701b6020909201919091527f63e44b07eb663d132f3b867c12624d91b2a07d728ab5358df3bb5d0d12341eb9610d8b611dd1565b30604051602001610d9f94939291906134c6565b6040516020818303038152906040528051906020012090506000604051610dc590613356565b604051908190038120610dde91899089906020016134fb565b60405160208183030381529060405280519060200120905060008282604051602001610e0b92919061331a565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610e489493929190613523565b6020604051602081039080840390855afa158015610e6a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e9d5760405162461bcd60e51b81526004016109cc90613688565b610ea8818a8a611c57565b505050505050505050565b6002546001600160a01b03163314610edd5760405162461bcd60e51b81526004016109cc906136d8565b600280546001600160a01b0319169055565b6000438210610f105760405162461bcd60e51b81526004016109cc90613588565b60015460405163782d6fe160e01b81526000916001600160a01b03169063782d6fe190610f43908790879060040161336f565b60206040518083038186803b158015610f5b57600080fd5b505afa158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f939190810190612694565b905060005b60045481101561104d576110438260048381548110610fb357fe5b60009182526020909120015460405163782d6fe160e01b81526001600160a01b039091169063782d6fe190610fee908a908a9060040161336f565b60206040518083038186803b15801561100657600080fd5b505afa15801561101a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061103e9190810190612694565b611dd5565b9150600101610f98565b5090505b92915050565b600a90565b60025460405163782d6fe160e01b81526001600160a01b038381169263782d6fe192611094929091169043600019019060040161336f565b60206040518083038186803b1580156110ac57600080fd5b505afa1580156110c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506110e49190810190612694565b5060005b60045481101561114457816001600160a01b03166004828154811061110957fe5b6000918252602090912001546001600160a01b0316141561113c5760405162461bcd60e51b81526004016109cc906135e8565b6001016110e8565b506000546001600160a01b0316331461116f5760405162461bcd60e51b81526004016109cc906135f8565b600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60015460405163b4b5ea5760e01b815260009182916001600160a01b039091169063b4b5ea57906111f6908690600401613361565b60206040518083038186803b15801561120e57600080fd5b505afa158015611222573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112469190810190612694565b905060005b6004548110156112a95761129f826004838154811061126657fe5b60009182526020909120015460405163b4b5ea5760e01b81526001600160a01b039091169063b4b5ea5790610fee908990600401613361565b915060010161124b565b5092915050565b6ba18f07d736b90be55000000090565b6002546001600160a01b031633146112ea5760405162461bcd60e51b81526004016109cc90613578565b6000805460408051630e18b68160e01b815290516001600160a01b0390921692630e18b6819260048084019382900301818387803b15801561132b57600080fd5b505af115801561133f573d6000803e3d6000fd5b50505050565b6000546001600160a01b031681565b60035481565b60006113646112b0565b61137333610433436001611da9565b10156113915760405162461bcd60e51b81526004016109cc90613678565b845186511480156113a3575083518651145b80156113b0575082518651145b6113cc5760405162461bcd60e51b81526004016109cc90613638565b85516113ea5760405162461bcd60e51b81526004016109cc90613668565b6113f2611057565b865111156114125760405162461bcd60e51b81526004016109cc90613618565b33600090815260066020526040902054801561148f5760006114338261099c565b9050600181600781111561144357fe5b14156114615760405162461bcd60e51b81526004016109cc90613698565b600081600781111561146f57fe5b141561148d5760405162461bcd60e51b81526004016109cc90613608565b505b600061149d43610b07610997565b905060006114ad82610b076105ef565b60038054600101905590506114c0611f59565b604051806101a001604052806003548152602001336001600160a01b03168152602001600081526020018b81526020018a815260200189815260200188815260200184815260200183815260200160008152602001600081526020016000151581526020016000151581525090508060056000836000015181526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015560608201518160030190805190602001906115a3929190611fce565b50608082015180516115bf916004840191602090910190612033565b5060a082015180516115db91600584019160209091019061207a565b5060c082015180516115f79160068401916020909101906120d3565b5060e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b0160006101000a81548160ff02191690831515021790555061018082015181600b0160016101000a81548160ff02191690831515021790555090505080600001516006600083602001516001600160a01b03166001600160a01b03168152602001908152602001600020819055507f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e08160000151338c8c8c8c89898e6040516116dd999897969594939291906136f6565b60405180910390a15193505050505b95945050505050565b60046117008261099c565b600781111561170b57fe5b146117285760405162461bcd60e51b81526004016109cc90613598565b600081815260056020908152604080832083548251630d48571f60e31b815292519194936117819342936001600160a01b0390931692636a42b8f892600480840193919291829003018186803b158015610acf57600080fd5b905060005b6003830154811015611929576119218360030182815481106117a457fe5b6000918252602090912001546004850180546001600160a01b0390921691849081106117cc57fe5b90600052602060002001548560050184815481106117e657fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156118745780601f1061184957610100808354040283529160200191611874565b820191906000526020600020905b81548152906001019060200180831161185757829003601f168201915b505050505086600601858154811061188857fe5b600091825260209182902001805460408051601f60026000196101006001871615020190941693909304928301859004850281018501909152818152928301828280156119165780601f106118eb57610100808354040283529160200191611916565b820191906000526020600020905b8154815290600101906020018083116118f957829003601f168201915b505050505086611dfa565b600101611786565b50600282018190556040517f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289290610d059085908490613824565b60405161068790613356565b61197761212c565b5060009182526005602090815260408084206001600160a01b03939093168452600c9092018152918190208151606081018352815460ff8082161515835261010090910416151593810193909352600101549082015290565b6000546001600160a01b031633146119fa5760405162461bcd60e51b81526004016109cc906135f8565b6004548110611a0857611a8f565b600454600019018114611a7c57600480546000198101908110611a2757fe5b600091825260209091200154600480546001600160a01b039092169183908110611a4d57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b600480549061066590600019830161214c565b50565b6005611a9d8261099c565b6007811115611aa857fe5b14611ac55760405162461bcd60e51b81526004016109cc906135a8565b6000818152600560205260408120600b8101805461ff001916610100179055905b6003820154811015611c1b576000546004830180546001600160a01b0390921691630825f38f919084908110611b1857fe5b9060005260206000200154846003018481548110611b3257fe5b6000918252602090912001546004860180546001600160a01b039092169186908110611b5a57fe5b9060005260206000200154866005018681548110611b7457fe5b90600052602060002001876006018781548110611b8d57fe5b9060005260206000200188600201546040518763ffffffff1660e01b8152600401611bbc959493929190613419565b6000604051808303818588803b158015611bd557600080fd5b505af1158015611be9573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611c1291908101906126b2565b50600101611ae6565b507f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f82604051611c4b91906134b8565b60405180910390a15050565b6001611c628361099c565b6007811115611c6d57fe5b14611c8a5760405162461bcd60e51b81526004016109cc906136b8565b60008281526005602090815260408083206001600160a01b0387168452600c8101909252909120805460ff1615611cd35760405162461bcd60e51b81526004016109cc906135d8565b6000611ce3868460070154610eef565b90508315611d0357611cf9836009015482611d7d565b6009840155611d17565b611d1183600a015482611d7d565b600a8401555b8154600160ff19909116811761ff0019166101008615150217835582018190556040517f877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c4690611d6d90889088908890869061338a565b60405180910390a1505050505050565b600082820183811015611da25760405162461bcd60e51b81526004016109cc90613628565b9392505050565b600082821115611dcb5760405162461bcd60e51b81526004016109cc906136c8565b50900390565b4690565b600082820183811015611da25760405162461bcd60e51b81526004016109cc906135b8565b6000546040516001600160a01b039091169063f2b0653790611e2890889088908890889088906020016133bf565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611e5a91906134b8565b60206040518083038186803b158015611e7257600080fd5b505afa158015611e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611eaa9190810190612676565b15611ec75760405162461bcd60e51b81526004016109cc90613658565b600054604051633a66f90160e01b81526001600160a01b0390911690633a66f90190611eff90889088908890889088906004016133bf565b602060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611f519190810190612694565b505050505050565b604051806101a001604052806000815260200160006001600160a01b031681526020016000815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b828054828255906000526020600020908101928215612023579160200282015b8281111561202357825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611fee565b5061202f929150612175565b5090565b82805482825590600052602060002090810192821561206e579160200282015b8281111561206e578251825591602001919060010190612053565b5061202f929150612199565b8280548282559060005260206000209081019282156120c7579160200282015b828111156120c757825180516120b79184916020909101906121b3565b509160200191906001019061209a565b5061202f929150612220565b828054828255906000526020600020908101928215612120579160200282015b8281111561212057825180516121109184916020909101906121b3565b50916020019190600101906120f3565b5061202f929150612243565b604080516060810182526000808252602082018190529181019190915290565b81548183558181111561217057600083815260209020612170918101908301612199565b505050565b6105f391905b8082111561202f5780546001600160a01b031916815560010161217b565b6105f391905b8082111561202f576000815560010161219f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106121f457805160ff191683800117855561206e565b8280016001018555821561206e579182018281111561206e578251825591602001919060010190612053565b6105f391905b8082111561202f57600061223a8282612266565b50600101612226565b6105f391905b8082111561202f57600061225d8282612266565b50600101612249565b50805460018160011615610100020316600290046000825580601f1061228c5750611a8f565b601f016020900490600052602060002090810190611a8f9190612199565b803561105181613956565b600082601f8301126122c657600080fd5b81356122d96122d482613859565b613832565b915081818352602084019350602081019050838560208402820111156122fe57600080fd5b60005b8381101561232a578161231488826122aa565b8452506020928301929190910190600101612301565b5050505092915050565b600082601f83011261234557600080fd5b81356123536122d482613859565b81815260209384019390925082018360005b8381101561232a578135860161237b888261248a565b8452506020928301929190910190600101612365565b600082601f8301126123a257600080fd5b81356123b06122d482613859565b81815260209384019390925082018360005b8381101561232a57813586016123d8888261248a565b84525060209283019291909101906001016123c2565b600082601f8301126123ff57600080fd5b813561240d6122d482613859565b9150818183526020840193506020810190508385602084028201111561243257600080fd5b60005b8381101561232a57816124488882612474565b8452506020928301929190910190600101612435565b80356110518161396a565b80516110518161396a565b803561105181613973565b805161105181613973565b600082601f83011261249b57600080fd5b81356124a96122d48261387a565b915080825260208301602083018583830111156124c557600080fd5b6124d083828461390a565b50505092915050565b600082601f8301126124ea57600080fd5b81516124f86122d48261387a565b9150808252602083016020830185838301111561251457600080fd5b6124d0838284613916565b80356110518161397c565b60006020828403121561253c57600080fd5b600061254884846122aa565b949350505050565b6000806040838503121561256357600080fd5b600061256f85856122aa565b925050602061258085828601612474565b9150509250929050565b600080600080600060a086880312156125a257600080fd5b853567ffffffffffffffff8111156125b957600080fd5b6125c5888289016122b5565b955050602086013567ffffffffffffffff8111156125e257600080fd5b6125ee888289016123ee565b945050604086013567ffffffffffffffff81111561260b57600080fd5b61261788828901612391565b935050606086013567ffffffffffffffff81111561263457600080fd5b61264088828901612334565b925050608086013567ffffffffffffffff81111561265d57600080fd5b6126698882890161248a565b9150509295509295909350565b60006020828403121561268857600080fd5b60006125488484612469565b6000602082840312156126a657600080fd5b6000612548848461247f565b6000602082840312156126c457600080fd5b815167ffffffffffffffff8111156126db57600080fd5b612548848285016124d9565b6000602082840312156126f957600080fd5b60006125488484612474565b6000806040838503121561271857600080fd5b60006127248585612474565b9250506020612580858286016122aa565b6000806040838503121561274857600080fd5b60006127548585612474565b92505060206125808582860161245e565b600080600080600060a0868803121561277d57600080fd5b60006127898888612474565b955050602061279a8882890161245e565b94505060406127ab8882890161251f565b93505060606127bc88828901612474565b925050608061266988828901612474565b60006127d98383612808565b505060200190565b6000611da283836129aa565b60006127d98383612990565b612802816138ed565b82525050565b612802816138c1565b600061281c826138b4565b61282681856138b8565b9350612831836138a2565b8060005b8381101561285f57815161284988826127cd565b9750612854836138a2565b925050600101612835565b509495945050505050565b6000612875826138b4565b61287f81856138b8565b935083602082028501612891856138a2565b8060005b858110156128cb57848403895281516128ae85826127e1565b94506128b9836138a2565b60209a909a0199925050600101612895565b5091979650505050505050565b60006128e3826138b4565b6128ed81856138b8565b9350836020820285016128ff856138a2565b8060005b858110156128cb578484038952815161291c85826127e1565b9450612927836138a2565b60209a909a0199925050600101612903565b6000612944826138b4565b61294e81856138b8565b9350612959836138a2565b8060005b8381101561285f57815161297188826127ed565b975061297c836138a2565b92505060010161295d565b612802816138cc565b612802816105f3565b6128026129a5826105f3565b6105f3565b60006129b5826138b4565b6129bf81856138b8565b93506129cf818560208601613916565b6129d881613942565b9093019392505050565b6000815460018116600081146129ff5760018114612a2557612a64565b607f6002830416612a1081876138b8565b60ff1984168152955050602085019250612a64565b60028204612a3381876138b8565b9550612a3e856138a8565b60005b82811015612a5d57815488820152600190910190602001612a41565b8701945050505b505092915050565b612802816138f4565b612802816138ff565b6000612a8b6039836138b8565b7f476f7665726e6f72416c7068613a3a5f5f61636365707441646d696e3a20736581527f6e646572206d75737420626520676f7620677561726469616e00000000000000602082015260400192915050565b6000612aea6026836138b8565b7f476f763a3a6765745072696f72566f7465733a206e6f742079657420646574658152651c9b5a5b995960d21b602082015260400192915050565b6000612b326044836138b8565b7f476f7665726e6f72416c7068613a3a71756575653a2070726f706f73616c206381527f616e206f6e6c79206265207175657565642069662069742069732073756363656020820152631959195960e21b604082015260600192915050565b6000612b9e6045836138b8565b7f476f7665726e6f72416c7068613a3a657865637574653a2070726f706f73616c81527f2063616e206f6e6c7920626520657865637574656420696620697420697320716020820152641d595d595960da1b604082015260600192915050565b6000612c0b600283610b22565b61190160f01b815260020192915050565b6000612c29601b836138b8565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000612c626029836138b8565b7f476f7665726e6f72416c7068613a3a73746174653a20696e76616c69642070728152681bdc1bdcd85b081a5960ba1b602082015260400192915050565b6000612cad602d836138b8565b7f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f7465722081526c185b1c9958591e481d9bdd1959609a1b602082015260400192915050565b6000612cfc600d836138b8565b6c185b1c9958591e481859191959609a1b815260200192915050565b6000612d256018836138b8565b7f476f7665726e6f72416c7068613a3a2174696d656c6f636b0000000000000000815260200192915050565b6000612d5e6059836138b8565b7f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c72656164792070656e64696e672070726f706f73616c00000000000000604082015260600192915050565b6000612de36028836138b8565b7f476f7665726e6f72416c7068613a3a70726f706f73653a20746f6f206d616e7981526720616374696f6e7360c01b602082015260400192915050565b6000612e2d6011836138b8565b706164646974696f6e206f766572666c6f7760781b815260200192915050565b6000612e5a604383610b22565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000612ec5602783610b22565b7f42616c6c6f742875696e743235362070726f706f73616c49642c626f6f6c20738152667570706f72742960c81b602082015260270192915050565b6000612f0e6044836138b8565b7f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73616c81527f2066756e6374696f6e20696e666f726d6174696f6e206172697479206d69736d6020820152630c2e8c6d60e31b604082015260600192915050565b6000612f7a602f836138b8565b7f476f7665726e6f72416c7068613a3a63616e63656c3a2070726f706f7365722081526e18589bdd99481d1a1c995cda1bdb19608a1b602082015260400192915050565b6000612fcb6044836138b8565b7f476f7665726e6f72416c7068613a3a5f71756575654f725265766572743a207081527f726f706f73616c20616374696f6e20616c7265616479207175657565642061746020820152632065746160e01b604082015260600192915050565b6000613037602c836138b8565b7f476f7665726e6f72416c7068613a3a70726f706f73653a206d7573742070726f81526b7669646520616374696f6e7360a01b602082015260400192915050565b6000613085603f836138b8565b7f476f7665726e6f72416c7068613a3a70726f706f73653a2070726f706f73657281527f20766f7465732062656c6f772070726f706f73616c207468726573686f6c6400602082015260400192915050565b60006130e4602f836138b8565b7f476f7665726e6f72416c7068613a3a63617374566f746542795369673a20696e81526e76616c6964207369676e617475726560881b602082015260400192915050565b60006131356058836138b8565b7f476f7665726e6f72416c7068613a3a70726f706f73653a206f6e65206c69766581527f2070726f706f73616c207065722070726f706f7365722c20666f756e6420616e60208201527f20616c7265616479206163746976652070726f706f73616c0000000000000000604082015260600192915050565b60006131ba6036836138b8565b7f476f7665726e6f72416c7068613a3a63616e63656c3a2063616e6e6f742063618152751b98d95b08195e1958dd5d1959081c1c9bdc1bdcd85b60521b602082015260400192915050565b6000613212602a836138b8565b7f476f7665726e6f72416c7068613a3a5f63617374566f74653a20766f74696e67815269081a5cc818db1bdcd95960b21b602082015260400192915050565b600061325e6015836138b8565b747375627472616374696f6e20756e646572666c6f7760581b815260200192915050565b600061328f6036836138b8565b7f476f7665726e6f72416c7068613a3a5f5f61626469636174653a2073656e6465815275391036bab9ba1031329033b7bb1033bab0b93234b0b760511b602082015260400192915050565b805160608301906132eb8482612987565b5060208201516132fe6020850182612987565b50604082015161133f6040850182612990565b612802816138e7565b600061332582612bfe565b91506133318285612999565b6020820191506133418284612999565b5060200192915050565b600061105182612e4d565b600061105182612eb8565b602081016110518284612808565b6040810161337d8285612808565b611da26020830184612990565b608081016133988287612808565b6133a56020830186612990565b6133b26040830185612987565b6116ec6060830184612990565b60a081016133cd8288612808565b6133da6020830187612990565b81810360408301526133ec81866129aa565b9050818103606083015261340081856129aa565b905061340f6080830184612990565b9695505050505050565b60a081016134278288612808565b6134346020830187612990565b818103604083015261344681866129e2565b9050818103606083015261340081856129e2565b60208082528101611da28184612811565b6080808252810161347c8187612811565b905081810360208301526134908186612939565b905081810360408301526134a481856128d8565b9050818103606083015261340f818461286a565b602081016110518284612990565b608081016134d48287612990565b6134e16020830186612990565b6134ee6040830185612990565b6116ec6060830184612808565b606081016135098286612990565b6135166020830185612990565b6125486040830184612987565b608081016135318287612990565b61353e6020830186613311565b6133b26040830185612990565b602081016110518284612a6c565b602081016110518284612a75565b60208082528101611da281846129aa565b6020808252810161105181612a7e565b6020808252810161105181612add565b6020808252810161105181612b25565b6020808252810161105181612b91565b6020808252810161105181612c1c565b6020808252810161105181612c55565b6020808252810161105181612ca0565b6020808252810161105181612cef565b6020808252810161105181612d18565b6020808252810161105181612d51565b6020808252810161105181612dd6565b6020808252810161105181612e20565b6020808252810161105181612f01565b6020808252810161105181612f6d565b6020808252810161105181612fbe565b602080825281016110518161302a565b6020808252810161105181613078565b60208082528101611051816130d7565b6020808252810161105181613128565b60208082528101611051816131ad565b6020808252810161105181613205565b6020808252810161105181613251565b6020808252810161105181613282565b6060810161105182846132da565b6101208101613705828c612990565b613712602083018b6127f9565b8181036040830152613724818a612811565b905081810360608301526137388189612939565b9050818103608083015261374c81886128d8565b905081810360a0830152613760818761286a565b905061376f60c0830186612990565b61377c60e0830185612990565b81810361010083015261378f81846129aa565b9b9a5050505050505050505050565b61012081016137ad828c612990565b6137ba602083018b612808565b6137c7604083018a612990565b6137d46060830189612990565b6137e16080830188612990565b6137ee60a0830187612990565b6137fb60c0830186612990565b61380860e0830185612987565b613816610100830184612987565b9a9950505050505050505050565b6040810161337d8285612990565b60405181810167ffffffffffffffff8111828210171561385157600080fd5b604052919050565b600067ffffffffffffffff82111561387057600080fd5b5060209081020190565b600067ffffffffffffffff82111561389157600080fd5b506020601f91909101601f19160190565b60200190565b60009081526020902090565b5190565b90815260200190565b6000611051826138db565b151590565b80610b228161394c565b6001600160a01b031690565b60ff1690565b6000611051825b6000611051826138c1565b6000611051826138d1565b82818337506000910152565b60005b83811015613931578181015183820152602001613919565b8381111561133f5750506000910152565b601f01601f191690565b60088110611a8f57fe5b61395f816138c1565b8114611a8f57600080fd5b61395f816138cc565b61395f816105f3565b61395f816138e756fea365627a7a7231582089c5d8fff2ed81d2d8ef6c4a7f52b83068fbcffbaa43d9ec235f1ab15aebd0986c6578706572696d656e74616cf564736f6c634300050f0040

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000008b4f1616751117c38a0f84f9a146cca191ea3ec50000000000000000000000000aacfbec6a24756c20d41914f2caba817c0d852100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d67c05523d8ec1c60760fd017ef006b9f6e496d0

-----Decoded View---------------
Arg [0] : timelock_ (address): 0x8b4f1616751117C38a0f84F9A146cca191ea3EC5
Arg [1] : yam_ (address): 0x0AaCfbeC6a24756c20D41914F2caba817C0d8521
Arg [2] : incentivizers_ (address[]): 0xD67c05523D8ec1c60760Fd017Ef006b9F6e496D0

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000008b4f1616751117c38a0f84f9a146cca191ea3ec5
Arg [1] : 0000000000000000000000000aacfbec6a24756c20d41914f2caba817c0d8521
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 000000000000000000000000d67c05523d8ec1c60760fd017ef006b9f6e496d0


Deployed Bytecode Sourcemap

7027:17164:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10636:46;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10636:46:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;8006:71;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8006:71:0;;;:::i;:::-;;;;;;;;8548:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8548:30:0;;;;;;;;:::i;:::-;;;;;;;;7103:50;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7103:50:0;;;:::i;:::-;;;;;;;;8295:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8295:23:0;;;:::i;:::-;;;;;;;;21266:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21266:141:0;;;;;;;;:::i;:::-;;10746:53;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10746:53:0;;;;;;;;:::i;10872:122::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10872:122:0;;;:::i;7295:80::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7295:80:0;;;:::i;12270:177::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12270:177:0;;;:::i;:::-;;;;;;;;19590:385;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19590:385:0;;;;;;;;:::i;:::-;;;;;;;;;;;7856:66;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7856:66:0;;;:::i;20178:1080::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20178:1080:0;;;;;;;;:::i;:::-;;;;;;;;18818:764;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18818:764:0;;;;;;;;:::i;8381:23::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8381:23:0;;;:::i;21415:987::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;21415:987:0;;;;;;;;:::i;23501:183::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23501:183:0;;;:::i;13400:592::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13400:592:0;;;;;;;;:::i;7672:77::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7672:77:0;;;:::i;12455:555::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12455:555:0;;;;;;;;:::i;14000:422::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14000:422:0;;;;;;;;:::i;7484:85::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7484:85:0;;;:::i;23303:190::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23303:190:0;;;:::i;8191:33::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8191:33:0;;;:::i;8460:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8460:28:0;;;:::i;14430:2383::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14430:2383:0;;;;;;;;:::i;16821:700::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;16821:700:0;;;;;;;;:::i;11084:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11084:94:0;;;:::i;19983:187::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;19983:187:0;;;;;;;;:::i;:::-;;;;;;;;13018:374;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13018:374:0;;;;;;;;:::i;18208:602::-;;;;;;;;;:::i;10636:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10636:46:0;;;;;;;;;;;;;;;;;;;;;;:::o;8006:71::-;8069:5;8006:71;;:::o;8548:30::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8548:30:0;;-1:-1:-1;8548:30:0;:::o;7103:50::-;;;;;;;;;;;;;;-1:-1:-1;;;7103:50:0;;;;:::o;8295:23::-;;;-1:-1:-1;;;;;8295:23:0;;:::o;21266:141::-;21357:42;21367:10;21379;21391:7;21357:9;:42::i;:::-;21266:141;;:::o;10746:53::-;;;;;;;;;;;;;:::o;10872:122::-;10914:80;;;;;;;;;;;;;;10872:122;:::o;7295:80::-;7357:15;7295:80;:::o;12270:177::-;12346:16;12380:21;12404:13;12380:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12380:37:0;;;;;;;;;;;;;;;;-1:-1:-1;12380:37:0;;-1:-1:-1;;;;;;12270:177:0;:::o;19590:385::-;19692:24;19731:20;19766:26;19807:24;19859:18;19880:9;:21;19890:10;19880:21;;;;;;;;;;;19859:42;;19920:1;:9;;19931:1;:8;;19941:1;:12;;19955:1;:11;;19912:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19912:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19912:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19912:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19590:385;;;;;:::o;7856:66::-;7918:1;7856:66;:::o;20178:1080::-;20261:13;20317:10;20300:13;;:27;;:45;;;;;20344:1;20331:10;:14;20300:45;20292:99;;;;-1:-1:-1;;;20292:99:0;;;;;;;;;;;;;;;;;20402:25;20430:21;;;:9;:21;;;;;20466:17;;;;;;20462:789;;;20507:22;20500:29;;;;;20462:789;20567:8;:19;;;20551:12;:35;20547:704;;20610:21;20603:28;;;;;20547:704;20669:8;:17;;;20653:12;:33;20649:602;;20710:20;20703:27;;;;;20649:602;20773:8;:21;;;20752:8;:17;;;:42;;:79;;;;20818:13;:11;:13::i;:::-;20798:8;:17;;;:33;20752:79;20748:503;;;20855:22;20848:29;;;;;20748:503;20899:12;;;;20895:356;;20940:23;20933:30;;;;;20895:356;20985:17;;;;;;;;;20981:270;;;21026:22;21019:29;;;;;20981:270;21096:12;;;;21110:8;;:23;;;-1:-1:-1;;;21110:23:0;;;;21089:45;;21096:12;-1:-1:-1;;;;;21110:8:0;;:21;;:23;;;;;;;;;;;;;;:8;:23;;;5:2:-1;;;;30:1;27;20:12;5:2;21110:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21110:23:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;21110:23:0;;;;;;;;;21089:6;:45::i;:::-;21070:15;:64;21066:185;;21158:21;21151:28;;;;;21066:185;21219:20;21212:27;;;20178:1080;;;;:::o;18818:764::-;18886:19;18908:17;18914:10;18908:5;:17::i;:::-;18886:39;-1:-1:-1;18953:22:0;18944:5;:31;;;;;;;;;;18936:98;;;;-1:-1:-1;;;18936:98:0;;;;;;;;;19047:25;19075:21;;;:9;:21;;;;;19129:8;;-1:-1:-1;;;;;19129:8:0;19115:10;:22;;:105;;;19201:19;:17;:19::i;:::-;19155:17;;;;;19141:57;;-1:-1:-1;;;;;19155:17:0;;;;19174:23;;19181:12;;19174:6;:23::i;19141:57::-;:79;19115:105;19107:165;;;;-1:-1:-1;;;19107:165:0;;;;;;;;;19285:17;;;:24;;-1:-1:-1;;19285:24:0;19305:4;19285:24;;;:17;19320:209;19344:16;;;:23;19340:27;;19320:209;;;19389:8;;19416:16;;;:19;;-1:-1:-1;;;;;19389:8:0;;;;:26;;19416:16;19433:1;;19416:19;;;;;;;;;;;;;;;;19437:15;;;:18;;-1:-1:-1;;;;;19416:19:0;;;;19453:1;;19437:18;;;;;;;;;;;;;;19457:8;:19;;19477:1;19457:22;;;;;;;;;;;;;;;19481:8;:18;;19500:1;19481:21;;;;;;;;;;;;;;;19504:8;:12;;;19389:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19389:128:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19369:3:0;;;;;-1:-1:-1;19320:209:0;;-1:-1:-1;19320:209:0;;;19546:28;19563:10;19546:28;;;;;;;;;;;;;;;18818:764;;;:::o;8381:23::-;;;-1:-1:-1;;;;;8381:23:0;;:::o;21415:987::-;21587:23;10914:80;;;;;;;;;;;;;;;;21716:4;;;;;;;;;-1:-1:-1;;;21716:4:0;;;;;;;;21700:22;21741:12;:10;:12::i;:::-;21780:4;21637:163;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21637:163:0;;;21613:198;;;;;;21587:224;;21824:18;11126:52;;;;;;;;;;;;;;;21869:114;;21932:10;;21961:7;;21869:114;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21869:114:0;;;21845:149;;;;;;21824:170;;22007:14;22112:15;22146:10;22048:123;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;22048:123:0;;;22024:158;;;;;;22007:175;;22195:17;22215:26;22225:6;22233:1;22236;22239;22215:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;22215:26:0;;-1:-1:-1;;22215:26:0;;;-1:-1:-1;;;;;;;22260:23:0;;22252:83;;;;-1:-1:-1;;;22252:83:0;;;;;;;;;22353:41;22363:9;22374:10;22386:7;22353:9;:41::i;:::-;22346:48;;;;21415:987;;;;;:::o;23501:183::-;23577:8;;-1:-1:-1;;;;;23577:8:0;23563:10;:22;23555:89;;;;-1:-1:-1;;;23555:89:0;;;;;;;;;23655:8;:21;;-1:-1:-1;;;;;;23655:21:0;;;23501:183::o;13400:592::-;13495:7;13581:12;13567:11;:26;13559:77;;;;-1:-1:-1;;;13559:77:0;;;;;;;;;13665:3;;:39;;-1:-1:-1;;;13665:39:0;;13649:13;;-1:-1:-1;;;;;13665:3:0;;:17;;:39;;13683:7;;13692:11;;13665:39;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13665:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13665:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13665:39:0;;;;;;;;;13649:55;-1:-1:-1;13720:9:0;13715:247;13739:13;:20;13735:24;;13715:247;;;13863:87;13876:5;13896:13;13910:1;13896:16;;;;;;;;;;;;;;;;;;13883:66;;-1:-1:-1;;;13883:66:0;;-1:-1:-1;;;;;13896:16:0;;;;13883:44;;:66;;13928:7;;13937:11;;13883:66;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13883:66:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13883:66:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13883:66:0;;;;;;;;;13863:12;:87::i;:::-;13855:95;-1:-1:-1;13761:3:0;;13715:247;;;-1:-1:-1;13979:5:0;-1:-1:-1;13400:592:0;;;;;:::o;7672:77::-;7744:2;7672:77;:::o;12455:555::-;12703:8;;12662:68;;-1:-1:-1;;;12662:68:0;;-1:-1:-1;;;;;12662:40:0;;;;;;:68;;12703:8;;;;12713:12;-1:-1:-1;;12713:16:0;;12662:68;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12662:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12662:68:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;12662:68:0;;;;;;;;;-1:-1:-1;12748:9:0;12743:136;12767:13;:20;12763:24;;12743:136;;;12837:12;-1:-1:-1;;;;;12817:32:0;:13;12831:1;12817:16;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12817:16:0;:32;;12809:58;;;;-1:-1:-1;;;12809:58:0;;;;;;;;;12789:3;;12743:136;;;-1:-1:-1;12921:8:0;;-1:-1:-1;;;;;12921:8:0;12899:10;:31;12891:68;;;;-1:-1:-1;;;12891:68:0;;;;;;;;;12970:13;27:10:-1;;39:1;23:18;;45:23;;-1:-1;12970:32:0;;;;;;;;-1:-1:-1;;;;;;12970:32:0;-1:-1:-1;;;;;12970:32:0;;;;;;;;;;12455:555::o;14000:422::-;14117:3;;:28;;-1:-1:-1;;;14117:28:0;;14076:7;;;;-1:-1:-1;;;;;14117:3:0;;;;:19;;:28;;14137:7;;14117:28;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14117:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14117:28:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14117:28:0;;;;;;;;;14101:44;-1:-1:-1;14161:9:0;14156:236;14180:13;:20;14176:24;;14156:236;;;14304:76;14317:5;14337:13;14351:1;14337:16;;;;;;;;;;;;;;;;;;14324:55;;-1:-1:-1;;;14324:55:0;;-1:-1:-1;;;;;14337:16:0;;;;14324:46;;:55;;14371:7;;14324:55;;;;14304:76;14296:84;-1:-1:-1;14202:3:0;;14156:236;;;-1:-1:-1;14409:5:0;14000:422;-1:-1:-1;;14000:422:0:o;7484:85::-;7552:14;7484:85;:::o;23303:190::-;23382:8;;-1:-1:-1;;;;;23382:8:0;23368:10;:22;23360:92;;;;-1:-1:-1;;;23360:92:0;;;;;;;;;23463:8;;;:22;;;-1:-1:-1;;;23463:22:0;;;;-1:-1:-1;;;;;23463:8:0;;;;:20;;:22;;;;;;;;;;:8;;:22;;;5:2:-1;;;;30:1;27;20:12;5:2;23463:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23463:22:0;;;;23303:190::o;8191:33::-;;;-1:-1:-1;;;;;8191:33:0;;:::o;8460:28::-;;;;:::o;14430:2383::-;14662:7;14749:19;:17;:19::i;:::-;14695:50;14709:10;14721:23;14728:12;14742:1;14721:6;:23::i;14695:50::-;:73;;14687:149;;;;-1:-1:-1;;;14687:149:0;;;;;;;;;14873:6;:13;14855:7;:14;:31;:70;;;;;14908:10;:17;14890:7;:14;:35;14855:70;:108;;;;;14947:9;:16;14929:7;:14;:34;14855:108;14847:189;;;;-1:-1:-1;;;14847:189:0;;;;;;;;;15055:14;;15047:76;;;;-1:-1:-1;;;15047:76:0;;;;;;;;;15160:23;:21;:23::i;:::-;15142:7;:14;:41;;15134:94;;;;-1:-1:-1;;;15134:94:0;;;;;;;;;15286:10;15241:24;15268:29;;;:17;:29;;;;;;15312:21;;15308:454;;15348:42;15393:23;15399:16;15393:5;:23::i;:::-;15348:68;-1:-1:-1;15469:20:0;15437:28;:52;;;;;;;;;;15429:153;;;;-1:-1:-1;;;15429:153:0;;;;;;;;;15635:21;15603:28;:53;;;;;;;;;;15595:155;;;;-1:-1:-1;;;15595:155:0;;;;;;;;;15308:454;;15774:18;15795:35;15802:12;15816:13;:11;:13::i;15795:35::-;15774:56;;15841:16;15860:34;15867:10;15879:14;:12;:14::i;15860:34::-;15907:13;:15;;;;;;15841:53;-1:-1:-1;15933:27:0;;:::i;:::-;15963:427;;;;;;;;15991:13;;15963:427;;;;16029:10;-1:-1:-1;;;;;15963:427:0;;;;;16059:1;15963:427;;;;16084:7;15963:427;;;;16114:6;15963:427;;;;16147:10;15963:427;;;;16183:9;15963:427;;;;16219:10;15963:427;;;;16254:8;15963:427;;;;16287:1;15963:427;;;;16317:1;15963:427;;;;16343:5;15963:427;;;;;;16373:5;15963:427;;;;;15933:457;;16431:11;16403:9;:25;16413:11;:14;;;16403:25;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16403:39:0;;;;;-1:-1:-1;;;;;16403:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16403:39:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16403:39:0;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16403:39:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16495:11;:14;;;16453:17;:39;16471:11;:20;;;-1:-1:-1;;;;;16453:39:0;-1:-1:-1;;;;;16453:39:0;;;;;;;;;;;;:56;;;;16527:246;16557:11;:14;;;16586:10;16611:7;16633:6;16654:10;16679:9;16703:10;16728:8;16751:11;16527:246;;;;;;;;;;;;;;;;;;;;;;;16791:14;;-1:-1:-1;;;;14430:2383:0;;;;;;;;:::o;16821:700::-;16917:23;16896:17;16902:10;16896:5;:17::i;:::-;:44;;;;;;;;;16888:125;;;;-1:-1:-1;;;16888:125:0;;;;;;;;;17024:25;17052:21;;;:9;:21;;;;;;;;17122:8;;:16;;-1:-1:-1;;;17122:16:0;;;;17052:21;;17024:25;17098:41;;17105:15;;-1:-1:-1;;;;;17122:8:0;;;;:14;;:16;;;;;17052:21;;17122:16;;;;;;:8;:16;;;5:2:-1;;;;30:1;27;20:12;17098:41:0;17084:55;-1:-1:-1;17155:9:0;17150:288;17174:16;;;:23;17170:27;;17150:288;;;17219:207;17252:8;:16;;17269:1;17252:19;;;;;;;;;;;;;;;;;;17290:15;;;:18;;-1:-1:-1;;;;;17252:19:0;;;;17306:1;;17290:18;;;;;;;;;;;;;;17327:8;:19;;17347:1;17327:22;;;;;;;;;;;;;;;;;;17219:207;;;;;;;-1:-1:-1;;17219:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17327:22;17219:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17368:8;:18;;17387:1;17368:21;;;;;;;;;;;;;;;;;;17219:207;;;;;;;-1:-1:-1;;17219:207:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17368:21;17219:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17408:3;17219:14;:207::i;:::-;17199:3;;17150:288;;;-1:-1:-1;17448:12:0;;;:18;;;17482:31;;;;;;17497:10;;17463:3;;17482:31;;11084:94;11126:52;;;;;;19983:187;20086:14;;:::i;:::-;-1:-1:-1;20125:21:0;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;20125:37:0;;;;;;:30;;;;:37;;;;;;20118:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19983:187::o;13018:374::-;13123:8;;-1:-1:-1;;;;;13123:8:0;13101:10;:31;13093:68;;;;-1:-1:-1;;;13093:68:0;;;;;;;;;13185:13;:20;13176:29;;13172:42;;13207:7;;13172:42;13239:13;:20;-1:-1:-1;;13239:22:0;13230:31;;13226:124;;13299:13;13313:20;;-1:-1:-1;;13313:24:0;;;13299:39;;;;;;;;;;;;;;;;13276:13;:20;;-1:-1:-1;;;;;13299:39:0;;;;13290:5;;13276:20;;;;;;;;;;;;;;:62;;;;;-1:-1:-1;;;;;13276:62:0;;;;;-1:-1:-1;;;;;13276:62:0;;;;;;13226:124;13362:13;:22;;;;;-1:-1:-1;;13362:22:0;;;:::i;13018:374::-;;:::o;18208:602::-;18323:20;18302:17;18308:10;18302:5;:17::i;:::-;:41;;;;;;;;;18294:123;;;;-1:-1:-1;;;18294:123:0;;;;;;;;;18428:25;18456:21;;;:9;:21;;;;;18488:17;;;:24;;-1:-1:-1;;18488:24:0;;;;;18456:21;18523:236;18547:16;;;:23;18543:27;;18523:236;;;18592:8;;18626:15;;;:18;;-1:-1:-1;;;;;18592:8:0;;;;:27;;18626:15;18642:1;;18626:18;;;;;;;;;;;;;;18646:8;:16;;18663:1;18646:19;;;;;;;;;;;;;;;;;;18667:15;;;:18;;-1:-1:-1;;;;;18646:19:0;;;;18683:1;;18667:18;;;;;;;;;;;;;;18687:8;:19;;18707:1;18687:22;;;;;;;;;;;;;;;18711:8;:18;;18730:1;18711:21;;;;;;;;;;;;;;;18734:8;:12;;;18592:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18592:155:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18592:155:0;;;;;;;39:16:-1;36:1;17:17;2:54;101:4;18592:155:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;18592:155:0;;;;;;;;;-1:-1:-1;18572:3:0;;18523:236;;;;18774:28;18791:10;18774:28;;;;;;;;;;;;;;;18208:602;;:::o;22410:885::-;22575:20;22554:17;22560:10;22554:5;:17::i;:::-;:41;;;;;;;;;22546:96;;;;-1:-1:-1;;;22546:96:0;;;;;;;;;22653:25;22681:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;22739:24:0;;;;:17;;;:24;;;;;;22782:16;;;;:25;22774:83;;;;-1:-1:-1;;;22774:83:0;;;;;;;;;22868:13;22884:41;22898:5;22905:8;:19;;;22884:13;:41::i;:::-;22868:57;;22942:7;22938:185;;;22986:32;22993:8;:17;;;23012:5;22986:6;:32::i;:::-;22966:17;;;:52;22938:185;;;23075:36;23082:8;:21;;;23105:5;23075:6;:36::i;:::-;23051:21;;;:60;22938:185;23135:23;;23154:4;-1:-1:-1;;23135:23:0;;;;;-1:-1:-1;;23169:25:0;23135:23;23169:25;;;;;;;23205:13;;:21;;;23244:43;;;;;;23253:5;;23260:10;;23169:25;;23205:21;;23244:43;;;;;;;;;;22410:885;;;;;;:::o;23692:172::-;23753:7;23785:5;;;23809:6;;;;23801:36;;;;-1:-1:-1;;;23801:36:0;;;;;;;;;23855:1;23692:172;-1:-1:-1;;;23692:172:0:o;23872:152::-;23933:7;23966:1;23961;:6;;23953:40;;;;-1:-1:-1;;;23953:40:0;;;;;;;;;-1:-1:-1;24011:5:0;;;23872:152::o;24032:156::-;24145:9;24032:156;:::o;903:181::-;961:7;993:5;;;1017:6;;;;1009:46;;;;-1:-1:-1;;;1009:46:0;;;;;;;;17529:671;17736:8;;17810:183;;-1:-1:-1;;;;;17736:8:0;;;;:27;;17810:183;;17845:6;;17876:5;;17906:9;;17940:4;;17969:3;;17810:183;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;17810:183:0;;;17780:230;;;;;;17736:287;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17736:287:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17736:287:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17736:287:0;;;;;;;;;17735:288;17727:390;;;;-1:-1:-1;;;17727:390:0;;;;;;;;;18130:8;;:62;;-1:-1:-1;;;18130:62:0;;-1:-1:-1;;;;;18130:8:0;;;;:25;;:62;;18156:6;;18164:5;;18171:9;;18182:4;;18188:3;;18130:62;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18130:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18130:62:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18130:62:0;;;;;;;;;;17529:671;;;;;:::o;7027:17164::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;7027:17164:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7027:17164:0;-1:-1:-1;;;;;7027:17164:0;;;;;;;;;;;-1:-1:-1;7027:17164:0;;;;;;;-1:-1:-1;7027:17164:0;;;-1:-1:-1;7027:17164:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7027:17164:0;;;-1:-1:-1;7027:17164:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;7027:17164:0;;;-1:-1:-1;7027:17164:0;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;7027:17164:0;;;-1:-1:-1;7027:17164:0;:::i;:::-;;;;;;;;;-1:-1:-1;7027:17164:0;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;;7027:17164:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5:130:-1:-;72:20;;97:33;72:20;97:33;;160:707;;277:3;270:4;262:6;258:17;254:27;244:2;;295:1;292;285:12;244:2;332:6;319:20;354:80;369:64;426:6;369:64;;;354:80;;;345:89;;451:5;476:6;469:5;462:21;506:4;498:6;494:17;484:27;;528:4;523:3;519:14;512:21;;581:6;628:3;620:4;612:6;608:17;603:3;599:27;596:36;593:2;;;645:1;642;635:12;593:2;670:1;655:206;680:6;677:1;674:13;655:206;;;738:3;760:37;793:3;781:10;760:37;;;748:50;;-1:-1;821:4;812:14;;;;840;;;;;702:1;695:9;655:206;;;659:14;237:630;;;;;;;;891:693;;1013:3;1006:4;998:6;994:17;990:27;980:2;;1031:1;1028;1021:12;980:2;1068:6;1055:20;1090:85;1105:69;1167:6;1105:69;;1090:85;1203:21;;;1247:4;1235:17;;;;1081:94;;-1:-1;1260:14;;1235:17;1355:1;1340:238;1365:6;1362:1;1359:13;1340:238;;;1448:3;1435:17;1427:6;1423:30;1472:42;1510:3;1498:10;1472:42;;;1460:55;;-1:-1;1538:4;1529:14;;;;1557;;;;;1387:1;1380:9;1340:238;;1609:696;;1732:3;1725:4;1717:6;1713:17;1709:27;1699:2;;1750:1;1747;1740:12;1699:2;1787:6;1774:20;1809:86;1824:70;1887:6;1824:70;;1809:86;1923:21;;;1967:4;1955:17;;;;1800:95;;-1:-1;1980:14;;1955:17;2075:1;2060:239;2085:6;2082:1;2079:13;2060:239;;;2168:3;2155:17;2147:6;2143:30;2192:43;2231:3;2219:10;2192:43;;;2180:56;;-1:-1;2259:4;2250:14;;;;2278;;;;;2107:1;2100:9;2060:239;;2331:707;;2448:3;2441:4;2433:6;2429:17;2425:27;2415:2;;2466:1;2463;2456:12;2415:2;2503:6;2490:20;2525:80;2540:64;2597:6;2540:64;;2525:80;2516:89;;2622:5;2647:6;2640:5;2633:21;2677:4;2669:6;2665:17;2655:27;;2699:4;2694:3;2690:14;2683:21;;2752:6;2799:3;2791:4;2783:6;2779:17;2774:3;2770:27;2767:36;2764:2;;;2816:1;2813;2806:12;2764:2;2841:1;2826:206;2851:6;2848:1;2845:13;2826:206;;;2909:3;2931:37;2964:3;2952:10;2931:37;;;2919:50;;-1:-1;2992:4;2983:14;;;;3011;;;;;2873:1;2866:9;2826:206;;3046:124;3110:20;;3135:30;3110:20;3135:30;;3177:128;3252:13;;3270:30;3252:13;3270:30;;3312:130;3379:20;;3404:33;3379:20;3404:33;;3449:134;3527:13;;3545:33;3527:13;3545:33;;3591:432;;3688:3;3681:4;3673:6;3669:17;3665:27;3655:2;;3706:1;3703;3696:12;3655:2;3743:6;3730:20;3765:60;3780:44;3817:6;3780:44;;3765:60;3756:69;;3845:6;3838:5;3831:21;3881:4;3873:6;3869:17;3914:4;3907:5;3903:16;3949:3;3940:6;3935:3;3931:16;3928:25;3925:2;;;3966:1;3963;3956:12;3925:2;3976:41;4010:6;4005:3;4000;3976:41;;;3648:375;;;;;;;;4032:442;;4144:3;4137:4;4129:6;4125:17;4121:27;4111:2;;4162:1;4159;4152:12;4111:2;4192:6;4186:13;4214:64;4229:48;4270:6;4229:48;;4214:64;4205:73;;4298:6;4291:5;4284:21;4334:4;4326:6;4322:17;4367:4;4360:5;4356:16;4402:3;4393:6;4388:3;4384:16;4381:25;4378:2;;;4419:1;4416;4409:12;4378:2;4429:39;4461:6;4456:3;4451;4429:39;;5654:126;5719:20;;5744:31;5719:20;5744:31;;5787:241;;5891:2;5879:9;5870:7;5866:23;5862:32;5859:2;;;5907:1;5904;5897:12;5859:2;5942:1;5959:53;6004:7;5984:9;5959:53;;;5949:63;5853:175;-1:-1;;;;5853:175;6035:366;;;6156:2;6144:9;6135:7;6131:23;6127:32;6124:2;;;6172:1;6169;6162:12;6124:2;6207:1;6224:53;6269:7;6249:9;6224:53;;;6214:63;;6186:97;6314:2;6332:53;6377:7;6368:6;6357:9;6353:22;6332:53;;;6322:63;;6293:98;6118:283;;;;;;6408:1415;;;;;;6701:3;6689:9;6680:7;6676:23;6672:33;6669:2;;;6718:1;6715;6708:12;6669:2;6753:31;;6804:18;6793:30;;6790:2;;;6836:1;6833;6826:12;6790:2;6856:78;6926:7;6917:6;6906:9;6902:22;6856:78;;;6846:88;;6732:208;6999:2;6988:9;6984:18;6971:32;7023:18;7015:6;7012:30;7009:2;;;7055:1;7052;7045:12;7009:2;7075:78;7145:7;7136:6;7125:9;7121:22;7075:78;;;7065:88;;6950:209;7218:2;7207:9;7203:18;7190:32;7242:18;7234:6;7231:30;7228:2;;;7274:1;7271;7264:12;7228:2;7294:84;7370:7;7361:6;7350:9;7346:22;7294:84;;;7284:94;;7169:215;7443:2;7432:9;7428:18;7415:32;7467:18;7459:6;7456:30;7453:2;;;7499:1;7496;7489:12;7453:2;7519:83;7594:7;7585:6;7574:9;7570:22;7519:83;;;7509:93;;7394:214;7667:3;7656:9;7652:19;7639:33;7692:18;7684:6;7681:30;7678:2;;;7724:1;7721;7714:12;7678:2;7744:63;7799:7;7790:6;7779:9;7775:22;7744:63;;;7734:73;;7618:195;6663:1160;;;;;;;;;7830:257;;7942:2;7930:9;7921:7;7917:23;7913:32;7910:2;;;7958:1;7955;7948:12;7910:2;7993:1;8010:61;8063:7;8043:9;8010:61;;8094:263;;8209:2;8197:9;8188:7;8184:23;8180:32;8177:2;;;8225:1;8222;8215:12;8177:2;8260:1;8277:64;8333:7;8313:9;8277:64;;8364:360;;8488:2;8476:9;8467:7;8463:23;8459:32;8456:2;;;8504:1;8501;8494:12;8456:2;8539:24;;8583:18;8572:30;;8569:2;;;8615:1;8612;8605:12;8569:2;8635:73;8700:7;8691:6;8680:9;8676:22;8635:73;;8731:241;;8835:2;8823:9;8814:7;8810:23;8806:32;8803:2;;;8851:1;8848;8841:12;8803:2;8886:1;8903:53;8948:7;8928:9;8903:53;;9249:366;;;9370:2;9358:9;9349:7;9345:23;9341:32;9338:2;;;9386:1;9383;9376:12;9338:2;9421:1;9438:53;9483:7;9463:9;9438:53;;;9428:63;;9400:97;9528:2;9546:53;9591:7;9582:6;9571:9;9567:22;9546:53;;9622:360;;;9740:2;9728:9;9719:7;9715:23;9711:32;9708:2;;;9756:1;9753;9746:12;9708:2;9791:1;9808:53;9853:7;9833:9;9808:53;;;9798:63;;9770:97;9898:2;9916:50;9958:7;9949:6;9938:9;9934:22;9916:50;;9989:733;;;;;;10156:3;10144:9;10135:7;10131:23;10127:33;10124:2;;;10173:1;10170;10163:12;10124:2;10208:1;10225:53;10270:7;10250:9;10225:53;;;10215:63;;10187:97;10315:2;10333:50;10375:7;10366:6;10355:9;10351:22;10333:50;;;10323:60;;10294:95;10420:2;10438:51;10481:7;10472:6;10461:9;10457:22;10438:51;;;10428:61;;10399:96;10526:2;10544:53;10589:7;10580:6;10569:9;10565:22;10544:53;;;10534:63;;10505:98;10634:3;10653:53;10698:7;10689:6;10678:9;10674:22;10653:53;;10730:173;;10817:46;10859:3;10851:6;10817:46;;;-1:-1;;10892:4;10883:14;;10810:93;10912:177;;11023:60;11079:3;11071:6;11023:60;;11288:173;;11375:46;11417:3;11409:6;11375:46;;11469:142;11560:45;11599:5;11560:45;;;11555:3;11548:58;11542:69;;;11618:103;11691:24;11709:5;11691:24;;11879:690;;12024:54;12072:5;12024:54;;;12091:86;12170:6;12165:3;12091:86;;;12084:93;;12198:56;12248:5;12198:56;;;12274:7;12302:1;12287:260;12312:6;12309:1;12306:13;12287:260;;;12379:6;12373:13;12400:63;12459:3;12444:13;12400:63;;;12393:70;;12480:60;12533:6;12480:60;;;12470:70;-1:-1;;12334:1;12327:9;12287:260;;;-1:-1;12560:3;;12003:566;-1:-1;;;;;12003:566;12604:888;;12759:59;12812:5;12759:59;;;12831:91;12915:6;12910:3;12831:91;;;12824:98;;12945:3;12987:4;12979:6;12975:17;12970:3;12966:27;13014:61;13069:5;13014:61;;;13095:7;13123:1;13108:345;13133:6;13130:1;13127:13;13108:345;;;13195:9;13189:4;13185:20;13180:3;13173:33;13240:6;13234:13;13262:74;13331:4;13316:13;13262:74;;;13254:82;;13353:65;13411:6;13353:65;;;13441:4;13432:14;;;;;13343:75;-1:-1;;13155:1;13148:9;13108:345;;;-1:-1;13466:4;;12738:754;-1:-1;;;;;;;12738:754;13529:896;;13686:60;13740:5;13686:60;;;13759:92;13844:6;13839:3;13759:92;;;13752:99;;13874:3;13916:4;13908:6;13904:17;13899:3;13895:27;13943:62;13999:5;13943:62;;;14025:7;14053:1;14038:348;14063:6;14060:1;14057:13;14038:348;;;14125:9;14119:4;14115:20;14110:3;14103:33;14170:6;14164:13;14192:76;14263:4;14248:13;14192:76;;;14184:84;;14285:66;14344:6;14285:66;;;14374:4;14365:14;;;;;14275:76;-1:-1;;14085:1;14078:9;14038:348;;14464:690;;14609:54;14657:5;14609:54;;;14676:86;14755:6;14750:3;14676:86;;;14669:93;;14783:56;14833:5;14783:56;;;14859:7;14887:1;14872:260;14897:6;14894:1;14891:13;14872:260;;;14964:6;14958:13;14985:63;15044:3;15029:13;14985:63;;;14978:70;;15065:60;15118:6;15065:60;;;15055:70;-1:-1;;14919:1;14912:9;14872:260;;15162:94;15229:21;15244:5;15229:21;;15374:113;15457:24;15475:5;15457:24;;15494:152;15595:45;15615:24;15633:5;15615:24;;;15595:45;;15653:343;;15763:38;15795:5;15763:38;;;15813:70;15876:6;15871:3;15813:70;;;15806:77;;15888:52;15933:6;15928:3;15921:4;15914:5;15910:16;15888:52;;;15961:29;15983:6;15961:29;;;15952:39;;;;15743:253;-1:-1;;;15743:253;16348:818;;16465:5;16459:12;16499:1;16488:9;16484:17;16512:1;16507:247;;;;16765:1;16760:400;;;;16477:683;;16507:247;16585:4;16581:1;16570:9;16566:17;16562:28;16604:70;16667:6;16662:3;16604:70;;;-1:-1;;16693:25;;16681:38;;16597:77;-1:-1;;16742:4;16733:14;;;-1:-1;16507:247;;16760:400;16829:1;16818:9;16814:17;16845:70;16908:6;16903:3;16845:70;;;16838:77;;16937:37;16968:5;16937:37;;;16990:1;16998:130;17012:6;17009:1;17006:13;16998:130;;;17071:14;;17058:11;;;17051:35;17118:1;17105:15;;;;17034:4;17027:12;16998:130;;;17142:11;;;-1:-1;;;16477:683;;16435:731;;;;;;17174:178;17283:63;17340:5;17283:63;;17534:156;17632:52;17678:5;17632:52;;19580:394;;19740:67;19804:2;19799:3;19740:67;;;19840:34;19820:55;;19909:27;19904:2;19895:12;;19888:49;19965:2;19956:12;;19726:248;-1:-1;;19726:248;19983:375;;20143:67;20207:2;20202:3;20143:67;;;20243:34;20223:55;;-1:-1;;;20307:2;20298:12;;20291:30;20349:2;20340:12;;20129:229;-1:-1;;20129:229;20367:442;;20527:67;20591:2;20586:3;20527:67;;;20627:34;20607:55;;20696:34;20691:2;20682:12;;20675:56;-1:-1;;;20760:2;20751:12;;20744:28;20800:2;20791:12;;20513:296;-1:-1;;20513:296;20818:443;;20978:67;21042:2;21037:3;20978:67;;;21078:34;21058:55;;21147:34;21142:2;21133:12;;21126:56;-1:-1;;;21211:2;21202:12;;21195:29;21252:2;21243:12;;20964:297;-1:-1;;20964:297;21270:398;;21448:84;21530:1;21525:3;21448:84;;;-1:-1;;;21545:87;;21660:1;21651:11;;21434:234;-1:-1;;21434:234;21677:327;;21837:67;21901:2;21896:3;21837:67;;;21937:29;21917:50;;21995:2;21986:12;;21823:181;-1:-1;;21823:181;22013:378;;22173:67;22237:2;22232:3;22173:67;;;22273:34;22253:55;;-1:-1;;;22337:2;22328:12;;22321:33;22382:2;22373:12;;22159:232;-1:-1;;22159:232;22400:382;;22560:67;22624:2;22619:3;22560:67;;;22660:34;22640:55;;-1:-1;;;22724:2;22715:12;;22708:37;22773:2;22764:12;;22546:236;-1:-1;;22546:236;22791:313;;22951:67;23015:2;23010:3;22951:67;;;-1:-1;;;23031:36;;23095:2;23086:12;;22937:167;-1:-1;;22937:167;23113:324;;23273:67;23337:2;23332:3;23273:67;;;23373:26;23353:47;;23428:2;23419:12;;23259:178;-1:-1;;23259:178;23446:463;;23606:67;23670:2;23665:3;23606:67;;;23706:34;23686:55;;23775:34;23770:2;23761:12;;23754:56;23844:27;23839:2;23830:12;;23823:49;23900:2;23891:12;;23592:317;-1:-1;;23592:317;23918:377;;24078:67;24142:2;24137:3;24078:67;;;24178:34;24158:55;;-1:-1;;;24242:2;24233:12;;24226:32;24286:2;24277:12;;24064:231;-1:-1;;24064:231;24304:317;;24464:67;24528:2;24523:3;24464:67;;;-1:-1;;;24544:40;;24612:2;24603:12;;24450:171;-1:-1;;24450:171;24630:477;;24808:85;24890:2;24885:3;24808:85;;;24926:34;24906:55;;24995:34;24990:2;24981:12;;24974:56;-1:-1;;;25059:2;25050:12;;25043:27;25098:2;25089:12;;24794:313;-1:-1;;24794:313;25116:412;;25294:85;25376:2;25371:3;25294:85;;;25412:34;25392:55;;-1:-1;;;25476:2;25467:12;;25460:31;25519:2;25510:12;;25280:248;-1:-1;;25280:248;25537:442;;25697:67;25761:2;25756:3;25697:67;;;25797:34;25777:55;;25866:34;25861:2;25852:12;;25845:56;-1:-1;;;25930:2;25921:12;;25914:28;25970:2;25961:12;;25683:296;-1:-1;;25683:296;25988:384;;26148:67;26212:2;26207:3;26148:67;;;26248:34;26228:55;;-1:-1;;;26312:2;26303:12;;26296:39;26363:2;26354:12;;26134:238;-1:-1;;26134:238;26381:442;;26541:67;26605:2;26600:3;26541:67;;;26641:34;26621:55;;26710:34;26705:2;26696:12;;26689:56;-1:-1;;;26774:2;26765:12;;26758:28;26814:2;26805:12;;26527:296;-1:-1;;26527:296;26832:381;;26992:67;27056:2;27051:3;26992:67;;;27092:34;27072:55;;-1:-1;;;27156:2;27147:12;;27140:36;27204:2;27195:12;;26978:235;-1:-1;;26978:235;27222:400;;27382:67;27446:2;27441:3;27382:67;;;27482:34;27462:55;;27551:33;27546:2;27537:12;;27530:55;27613:2;27604:12;;27368:254;-1:-1;;27368:254;27631:384;;27791:67;27855:2;27850:3;27791:67;;;27891:34;27871:55;;-1:-1;;;27955:2;27946:12;;27939:39;28006:2;27997:12;;27777:238;-1:-1;;27777:238;28024:462;;28184:67;28248:2;28243:3;28184:67;;;28284:34;28264:55;;28353:34;28348:2;28339:12;;28332:56;28422:26;28417:2;28408:12;;28401:48;28477:2;28468:12;;28170:316;-1:-1;;28170:316;28495:391;;28655:67;28719:2;28714:3;28655:67;;;28755:34;28735:55;;-1:-1;;;28819:2;28810:12;;28803:46;28877:2;28868:12;;28641:245;-1:-1;;28641:245;28895:379;;29055:67;29119:2;29114:3;29055:67;;;29155:34;29135:55;;-1:-1;;;29219:2;29210:12;;29203:34;29265:2;29256:12;;29041:233;-1:-1;;29041:233;29283:321;;29443:67;29507:2;29502:3;29443:67;;;-1:-1;;;29523:44;;29595:2;29586:12;;29429:175;-1:-1;;29429:175;29613:391;;29773:67;29837:2;29832:3;29773:67;;;29873:34;29853:55;;-1:-1;;;29937:2;29928:12;;29921:46;29995:2;29986:12;;29759:245;-1:-1;;29759:245;30085:624;30296:23;;30226:4;30217:14;;;30325:57;30221:3;30296:23;30325:57;;;30246:142;30464:4;30457:5;30453:16;30447:23;30476:57;30527:4;30522:3;30518:14;30504:12;30476:57;;;30398:141;30613:4;30606:5;30602:16;30596:23;30625:63;30682:4;30677:3;30673:14;30659:12;30625:63;;30946:107;31025:22;31041:5;31025:22;;31060:650;;31315:148;31459:3;31315:148;;;31308:155;;31474:75;31545:3;31536:6;31474:75;;;31571:2;31566:3;31562:12;31555:19;;31585:75;31656:3;31647:6;31585:75;;;-1:-1;31682:2;31673:12;;31296:414;-1:-1;;31296:414;31717:372;;31916:148;32060:3;31916:148;;32096:372;;32295:148;32439:3;32295:148;;32475:213;32593:2;32578:18;;32607:71;32582:9;32651:6;32607:71;;32695:324;32841:2;32826:18;;32855:71;32830:9;32899:6;32855:71;;;32937:72;33005:2;32994:9;32990:18;32981:6;32937:72;;33026:535;33222:3;33207:19;;33237:71;33211:9;33281:6;33237:71;;;33319:72;33387:2;33376:9;33372:18;33363:6;33319:72;;;33402:66;33464:2;33453:9;33449:18;33440:6;33402:66;;;33479:72;33547:2;33536:9;33532:18;33523:6;33479:72;;33568:831;33836:3;33821:19;;33851:71;33825:9;33895:6;33851:71;;;33933:72;34001:2;33990:9;33986:18;33977:6;33933:72;;;34053:9;34047:4;34043:20;34038:2;34027:9;34023:18;34016:48;34078:78;34151:4;34142:6;34078:78;;;34070:86;;34204:9;34198:4;34194:20;34189:2;34178:9;34174:18;34167:48;34229:76;34300:4;34291:6;34229:76;;;34221:84;;34316:73;34384:3;34373:9;34369:19;34360:6;34316:73;;;33807:592;;;;;;;;;34406:819;34668:3;34653:19;;34683:71;34657:9;34727:6;34683:71;;;34765:72;34833:2;34822:9;34818:18;34809:6;34765:72;;;34885:9;34879:4;34875:20;34870:2;34859:9;34855:18;34848:48;34910:75;34980:4;34971:6;34910:75;;;34902:83;;35033:9;35027:4;35023:20;35018:2;35007:9;35003:18;34996:48;35058:73;35126:4;35117:6;35058:73;;35232:361;35400:2;35414:47;;;35385:18;;35475:108;35385:18;35569:6;35475:108;;35600:1183;36024:3;36039:47;;;36009:19;;36100:108;36009:19;36194:6;36100:108;;;36092:116;;36256:9;36250:4;36246:20;36241:2;36230:9;36226:18;36219:48;36281:108;36384:4;36375:6;36281:108;;;36273:116;;36437:9;36431:4;36427:20;36422:2;36411:9;36407:18;36400:48;36462:120;36577:4;36568:6;36462:120;;;36454:128;;36630:9;36624:4;36620:20;36615:2;36604:9;36600:18;36593:48;36655:118;36768:4;36759:6;36655:118;;36790:213;36908:2;36893:18;;36922:71;36897:9;36966:6;36922:71;;37010:547;37212:3;37197:19;;37227:71;37201:9;37271:6;37227:71;;;37309:72;37377:2;37366:9;37362:18;37353:6;37309:72;;;37392;37460:2;37449:9;37445:18;37436:6;37392:72;;;37475;37543:2;37532:9;37528:18;37519:6;37475:72;;37564:423;37732:2;37717:18;;37746:71;37721:9;37790:6;37746:71;;;37828:72;37896:2;37885:9;37881:18;37872:6;37828:72;;;37911:66;37973:2;37962:9;37958:18;37949:6;37911:66;;37994:539;38192:3;38177:19;;38207:71;38181:9;38251:6;38207:71;;;38289:68;38353:2;38342:9;38338:18;38329:6;38289:68;;;38368:72;38436:2;38425:9;38421:18;38412:6;38368:72;;38540:265;38684:2;38669:18;;38698:97;38673:9;38768:6;38698:97;;39074:243;39207:2;39192:18;;39221:86;39196:9;39280:6;39221:86;;39324:293;39458:2;39472:47;;;39443:18;;39533:74;39443:18;39593:6;39533:74;;39624:407;39815:2;39829:47;;;39800:18;;39890:131;39800:18;39890:131;;40038:407;40229:2;40243:47;;;40214:18;;40304:131;40214:18;40304:131;;40452:407;40643:2;40657:47;;;40628:18;;40718:131;40628:18;40718:131;;40866:407;41057:2;41071:47;;;41042:18;;41132:131;41042:18;41132:131;;41280:407;41471:2;41485:47;;;41456:18;;41546:131;41456:18;41546:131;;41694:407;41885:2;41899:47;;;41870:18;;41960:131;41870:18;41960:131;;42108:407;42299:2;42313:47;;;42284:18;;42374:131;42284:18;42374:131;;42522:407;42713:2;42727:47;;;42698:18;;42788:131;42698:18;42788:131;;42936:407;43127:2;43141:47;;;43112:18;;43202:131;43112:18;43202:131;;43350:407;43541:2;43555:47;;;43526:18;;43616:131;43526:18;43616:131;;43764:407;43955:2;43969:47;;;43940:18;;44030:131;43940:18;44030:131;;44178:407;44369:2;44383:47;;;44354:18;;44444:131;44354:18;44444:131;;44592:407;44783:2;44797:47;;;44768:18;;44858:131;44768:18;44858:131;;45006:407;45197:2;45211:47;;;45182:18;;45272:131;45182:18;45272:131;;45420:407;45611:2;45625:47;;;45596:18;;45686:131;45596:18;45686:131;;45834:407;46025:2;46039:47;;;46010:18;;46100:131;46010:18;46100:131;;46248:407;46439:2;46453:47;;;46424:18;;46514:131;46424:18;46514:131;;46662:407;46853:2;46867:47;;;46838:18;;46928:131;46838:18;46928:131;;47076:407;47267:2;47281:47;;;47252:18;;47342:131;47252:18;47342:131;;47490:407;47681:2;47695:47;;;47666:18;;47756:131;47666:18;47756:131;;47904:407;48095:2;48109:47;;;48080:18;;48170:131;48080:18;48170:131;;48318:407;48509:2;48523:47;;;48494:18;;48584:131;48494:18;48584:131;;48732:407;48923:2;48937:47;;;48908:18;;48998:131;48908:18;48998:131;;49146:309;49312:2;49297:18;;49326:119;49301:9;49418:6;49326:119;;49682:1847;50274:3;50259:19;;50289:71;50263:9;50333:6;50289:71;;;50371:80;50447:2;50436:9;50432:18;50423:6;50371:80;;;50499:9;50493:4;50489:20;50484:2;50473:9;50469:18;50462:48;50524:108;50627:4;50618:6;50524:108;;;50516:116;;50680:9;50674:4;50670:20;50665:2;50654:9;50650:18;50643:48;50705:108;50808:4;50799:6;50705:108;;;50697:116;;50862:9;50856:4;50852:20;50846:3;50835:9;50831:19;50824:49;50887:120;51002:4;50993:6;50887:120;;;50879:128;;51056:9;51050:4;51046:20;51040:3;51029:9;51025:19;51018:49;51081:118;51194:4;51185:6;51081:118;;;51073:126;;51210:73;51278:3;51267:9;51263:19;51254:6;51210:73;;;51294;51362:3;51351:9;51347:19;51338:6;51294:73;;;51416:9;51410:4;51406:20;51400:3;51389:9;51385:19;51378:49;51441:78;51514:4;51505:6;51441:78;;;51433:86;50245:1284;-1:-1;;;;;;;;;;;50245:1284;51536:1083;51866:3;51851:19;;51881:71;51855:9;51925:6;51881:71;;;51963:72;52031:2;52020:9;52016:18;52007:6;51963:72;;;52046;52114:2;52103:9;52099:18;52090:6;52046:72;;;52129;52197:2;52186:9;52182:18;52173:6;52129:72;;;52212:73;52280:3;52269:9;52265:19;52256:6;52212:73;;;52296;52364:3;52353:9;52349:19;52340:6;52296:73;;;52380;52448:3;52437:9;52433:19;52424:6;52380:73;;;52464:67;52526:3;52515:9;52511:19;52502:6;52464:67;;;52542;52604:3;52593:9;52589:19;52580:6;52542:67;;;51837:782;;;;;;;;;;;;;52626:324;52772:2;52757:18;;52786:71;52761:9;52830:6;52786:71;;52957:256;53019:2;53013:9;53045:17;;;53120:18;53105:34;;53141:22;;;53102:62;53099:2;;;53177:1;53174;53167:12;53099:2;53193;53186:22;52997:216;;-1:-1;52997:216;53220:304;;53379:18;53371:6;53368:30;53365:2;;;53411:1;53408;53401:12;53365:2;-1:-1;53446:4;53434:17;;;53499:15;;53302:222;54475:317;;54614:18;54606:6;54603:30;54600:2;;;54646:1;54643;54636:12;54600:2;-1:-1;54777:4;54713;54690:17;;;;-1:-1;;54686:33;54767:15;;54537:255;55781:151;55905:4;55896:14;;55853:79;56424:157;;56518:14;;;56560:4;56547:18;;;56477:104;56753:137;56856:12;;56827:63;58318:178;58436:19;;;58485:4;58476:14;;58429:67;59896:91;;59958:24;59976:5;59958:24;;59994:85;60060:13;60053:21;;60036:43;60165:140;60244:5;60250:50;60244:5;60250:50;;60312:121;-1:-1;;;;;60374:54;;60357:76;60519:81;60590:4;60579:16;;60562:38;60607:129;;60694:37;60725:5;60743:173;;60848:63;60905:5;60848:63;;61370:140;;61464:41;61499:5;61464:41;;61761:145;61842:6;61837:3;61832;61819:30;-1:-1;61898:1;61880:16;;61873:27;61812:94;61915:268;61980:1;61987:101;62001:6;61998:1;61995:13;61987:101;;;62068:11;;;62062:18;62049:11;;;62042:39;62023:2;62016:10;61987:101;;;62103:6;62100:1;62097:13;62094:2;;;-1:-1;;62168:1;62150:16;;62143:27;61964:219;62272:97;62360:2;62340:14;-1:-1;;62336:28;;62320:49;62377:108;62463:1;62456:5;62453:12;62443:2;;62469:9;62492:117;62561:24;62579:5;62561:24;;;62554:5;62551:35;62541:2;;62600:1;62597;62590:12;62616:111;62682:21;62697:5;62682:21;;62734:117;62803:24;62821:5;62803:24;;62982:113;63049:22;63065:5;63049:22;

Swarm Source

bzzr://89c5d8fff2ed81d2d8ef6c4a7f52b83068fbcffbaa43d9ec235f1ab15aebd098

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

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.