ETH Price: $3,272.98 (+0.67%)
Gas: 1 Gwei

Token

Marlin (MPOND)
 

Overview

Max Total Supply

10,000 MPOND

Holders

44

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
21.214281 MPOND

Value
$0.00
0x4cd4bc363458b52380d695b5c923b8994a245281
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

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

Contract Name:
MPondLogic

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2020-12-13
*/

// File: @openzeppelin/upgrades/contracts/Initializable.sol

pragma solidity >=0.4.24 <0.7.0;


/**
 * @title Initializable
 *
 * @dev Helper contract to support initializer functions. To use it, replace
 * the constructor with a function that has the `initializer` modifier.
 * WARNING: Unlike constructors, initializer functions must be manually
 * invoked. This applies both to deploying an Initializable contract, as well
 * as extending an Initializable contract via inheritance.
 * WARNING: When used with inheritance, manual care must be taken to not invoke
 * a parent initializer twice, or ensure that all initializers are idempotent,
 * because this is not dealt with automatically as with constructors.
 */
contract Initializable {

  /**
   * @dev Indicates that the contract has been initialized.
   */
  bool private initialized;

  /**
   * @dev Indicates that the contract is in the process of being initialized.
   */
  bool private initializing;

  /**
   * @dev Modifier to use in the initializer function of a contract.
   */
  modifier initializer() {
    require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");

    bool isTopLevelCall = !initializing;
    if (isTopLevelCall) {
      initializing = true;
      initialized = true;
    }

    _;

    if (isTopLevelCall) {
      initializing = false;
    }
  }

  /// @dev Returns true if and only if the function is running in the constructor
  function isConstructor() private view returns (bool) {
    // extcodesize checks the size of the code stored in an address, and
    // address returns the current address. Since the code is still not
    // deployed when running a constructor, any checks on its code size will
    // yield zero, making it an effective way to detect if a contract is
    // under construction or not.
    address self = address(this);
    uint256 cs;
    assembly { cs := extcodesize(self) }
    return cs == 0;
  }

  // Reserved storage space to allow for layout changes in the future.
  uint256[50] private ______gap;
}

// File: contracts/governance/MPondLogic.sol

pragma solidity 0.5.17;
pragma experimental ABIEncoderV2;



contract MPondLogic is Initializable {
    /// @notice EIP-20 token name for this token
    string public name;

    /// @notice EIP-20 token symbol for this token
    string public symbol;

    /// @notice EIP-20 token decimals for this token
    uint8 public decimals;

    /// @notice Total number of tokens in circulation
    uint256 public totalSupply; // 10k mPond
    uint256 public bridgeSupply; // 3k mPond

    address public dropBridge;
    /// @notice Allowance amounts on behalf of others
    mapping(address => mapping(address => uint96)) internal allowances;

    /// @notice Official record of token balances for each account
    mapping(address => uint96) internal balances;

    /// @notice A record of each accounts delegate
    mapping(address => mapping(address => uint96)) public delegates;

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint96 votes;
    }

    /// @notice A record of votes checkpoints for each account, by index
    mapping(address => mapping(uint32 => Checkpoint)) public checkpoints;

    /// @notice The number of checkpoints for each account
    mapping(address => uint32) public numCheckpoints;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public DOMAIN_TYPEHASH;

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public DELEGATION_TYPEHASH;

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public UNDELEGATION_TYPEHASH;

    /// @notice A record of states for signing / validating signatures
    mapping(address => uint256) public nonces;

    /// customized params
    address public admin;
    mapping(address => bool) public isWhiteListed;
    bool public enableAllTranfers;

    /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(
        address indexed delegator,
        address indexed fromDelegate,
        address indexed toDelegate
    );

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(
        address indexed delegate,
        uint256 previousBalance,
        uint256 newBalance
    );

    /// @notice The standard EIP-20 transfer event
    event Transfer(address indexed from, address indexed to, uint256 amount);

    /// @notice The standard EIP-20 approval event
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );

    /**
     * @notice Initializer a new mPond token
     * @param account The initial account to grant all the tokens
     */
    function initialize(
        address account,
        address bridge,
        address dropBridgeAddress
    ) public initializer {
        createConstants();
        require(
            account != bridge,
            "Bridge and account should not be the same address"
        );
        balances[bridge] = uint96(bridgeSupply);
        delegates[bridge][address(0)] = uint96(bridgeSupply);
        isWhiteListed[bridge] = true;
        emit Transfer(address(0), bridge, bridgeSupply);

        uint96 remainingSupply = sub96(
            uint96(totalSupply),
            uint96(bridgeSupply),
            "mPond: Subtraction overflow in the constructor"
        );
        balances[account] = remainingSupply;
        delegates[account][address(0)] = remainingSupply;
        isWhiteListed[account] = true;
        dropBridge = dropBridgeAddress;
        emit Transfer(address(0), account, uint256(remainingSupply));
    }

    function createConstants() internal {
        name = "Marlin";
        symbol = "MPOND";
        decimals = 18;
        totalSupply = 10000e18;
        bridgeSupply = 7000e18;
        DOMAIN_TYPEHASH = keccak256(
            "EIP712Domain(string name,uint256 chainId,address verifyingContract)"
        );
        DELEGATION_TYPEHASH = keccak256(
            "Delegation(address delegatee,uint256 nonce,uint256 expiry,uint96 amount)"
        );
        UNDELEGATION_TYPEHASH = keccak256(
            "Unelegation(address delegatee,uint256 nonce,uint256 expiry,uint96 amount)"
        );
        admin = msg.sender;
        // enableAllTranfers = true; //This is only for testing, will be false
    }

    function addWhiteListAddress(address _address)
        external
        onlyAdmin("Only admin can whitelist")
        returns (bool)
    {
        isWhiteListed[_address] = true;
        return true;
    }

    function enableAllTransfers()
        external
        onlyAdmin("Only enable can enable all transfers")
        returns (bool)
    {
        enableAllTranfers = true;
        return true;
    }

    function changeDropBridge(address _updatedBridge)
        public
        onlyAdmin("Only admin can change drop bridge")
    {
        dropBridge = _updatedBridge;
    }

    function isWhiteListedTransfer(address _address1, address _address2)
        public
        view
        returns (bool)
    {
        if (_address1 == dropBridge) {
            return true;
        } else if (_address2 == dropBridge) {
            return (isWhiteListed[_address1] || enableAllTranfers);
        }
        return
            (isWhiteListed[_address1] || isWhiteListed[_address2]) ||
            enableAllTranfers;
    }

    /**
     * @notice Get the number of tokens `spender` is approved to spend on behalf of `account`
     * @param account The address of the account holding the funds
     * @param spender The address of the account spending the funds
     * @return The number of tokens approved
     */
    function allowance(address account, address spender)
        external
        view
        returns (uint256)
    {
        return allowances[account][spender];
    }

    /**
     * @notice Approve `spender` to transfer up to `amount` from `src`
     * @dev This will overwrite the approval amount for `spender`
     *  and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)
     * @param spender The address of the account which may transfer tokens
     * @param rawAmount The number of tokens that are approved (2^256-1 means infinite)
     * @return Whether or not the approval succeeded
     */
    function approve(address spender, uint256 rawAmount)
        external
        returns (bool)
    {
        uint96 amount;
        if (rawAmount == uint256(-1)) {
            amount = uint96(-1);
        } else {
            amount = safe96(
                rawAmount,
                "mPond::approve: amount exceeds 96 bits"
            );
        }

        allowances[msg.sender][spender] = amount;

        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedAmount)
        external
        returns (bool)
    {
        uint96 amount;
        if (addedAmount == uint256(-1)) {
            amount = uint96(-1);
        } else {
            amount = safe96(
                addedAmount,
                "mPond::approve: addedAmount exceeds 96 bits"
            );
        }

        allowances[msg.sender][spender] = add96(
            allowances[msg.sender][spender],
            amount,
            "mPond: increaseAllowance allowance value overflows"
        );
        emit Approval(msg.sender, spender, allowances[msg.sender][spender]);
        return true;
    }

    function decreaseAllowance(address spender, uint256 removedAmount)
        external
        returns (bool)
    {
        uint96 amount;
        if (removedAmount == uint256(-1)) {
            amount = uint96(-1);
        } else {
            amount = safe96(
                removedAmount,
                "mPond::approve: removedAmount exceeds 96 bits"
            );
        }

        allowances[msg.sender][spender] = sub96(
            allowances[msg.sender][spender],
            amount,
            "mPond: decreaseAllowance allowance value underflows"
        );
        emit Approval(msg.sender, spender, allowances[msg.sender][spender]);
        return true;
    }

    /**
     * @notice Get the number of tokens held by the `account`
     * @param account The address of the account to get the balance of
     * @return The number of tokens held
     */
    function balanceOf(address account) external view returns (uint256) {
        return balances[account];
    }

    /**
     * @notice Transfer `amount` tokens from `msg.sender` to `dst`
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transfer(address dst, uint256 rawAmount) external returns (bool) {
        require(
            isWhiteListedTransfer(msg.sender, dst),
            "Atleast one of the address (src or dst) should be whitelisted or all transfers must be enabled via enableAllTransfers()"
        );
        uint96 amount = safe96(
            rawAmount,
            "mPond::transfer: amount exceeds 96 bits"
        );
        _transferTokens(msg.sender, dst, amount);
        return true;
    }

    /**
     * @notice Transfer `amount` tokens from `src` to `dst`
     * @param src The address of the source account
     * @param dst The address of the destination account
     * @param rawAmount The number of tokens to transfer
     * @return Whether or not the transfer succeeded
     */
    function transferFrom(
        address src,
        address dst,
        uint256 rawAmount
    ) external returns (bool) {
        require(
            isWhiteListedTransfer(msg.sender, dst),
            "Atleast one of the address (src or dst) should be whitelisted or all transfers must be enabled via enableAllTransfers()"
        );
        address spender = msg.sender;
        uint96 spenderAllowance = allowances[src][spender];
        uint96 amount = safe96(
            rawAmount,
            "mPond::approve: amount exceeds 96 bits"
        );

        if (spender != src && spenderAllowance != uint96(-1)) {
            uint96 newAllowance = sub96(
                spenderAllowance,
                amount,
                "mPond::transferFrom: transfer amount exceeds spender allowance"
            );
            allowances[src][spender] = newAllowance;

            emit Approval(src, spender, newAllowance);
        }

        _transferTokens(src, dst, amount);
        return true;
    }

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegatee The address to delegate votes to
     */
    function delegate(address delegatee, uint96 amount) public {
        return _delegate(msg.sender, delegatee, amount);
    }

    function undelegate(address delegatee, uint96 amount) public {
        return _undelegate(msg.sender, delegatee, amount);
    }

    /**
     * @notice Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(
        address delegatee,
        uint256 nonce,
        uint256 expiry,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint96 amount
    ) public {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name)),
                getChainId(),
                address(this)
            )
        );
        bytes32 structHash = keccak256(
            abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry, amount)
        );
        bytes32 digest = keccak256(
            abi.encodePacked("\x19\x01", domainSeparator, structHash)
        );
        address signatory = ecrecover(digest, v, r, s);
        require(
            signatory != address(0),
            "mPond::delegateBySig: invalid signature"
        );
        require(
            nonce == nonces[signatory]++,
            "mPond::delegateBySig: invalid nonce"
        );
        require(now <= expiry, "mPond::delegateBySig: signature expired");
        return _delegate(signatory, delegatee, amount);
    }

    function undelegateBySig(
        address delegatee,
        uint256 nonce,
        uint256 expiry,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint96 amount
    ) public {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name)),
                getChainId(),
                address(this)
            )
        );
        bytes32 structHash = keccak256(
            abi.encode(UNDELEGATION_TYPEHASH, delegatee, nonce, expiry, amount)
        );
        bytes32 digest = keccak256(
            abi.encodePacked("\x19\x01", domainSeparator, structHash)
        );
        address signatory = ecrecover(digest, v, r, s);
        require(
            signatory != address(0),
            "mPond::undelegateBySig: invalid signature"
        );
        require(
            nonce == nonces[signatory]++,
            "mPond::undelegateBySig: invalid nonce"
        );
        require(now <= expiry, "mPond::undelegateBySig: signature expired");
        return _undelegate(signatory, delegatee, amount);
    }

    /**
     * @notice Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account) external view returns (uint96) {
        uint32 nCheckpoints = numCheckpoints[account];
        return
            nCheckpoints != 0
                ? checkpoints[account][nCheckpoints - 1].votes
                : 0;
    }

    /**
     * @notice Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint256 blockNumber)
        public
        view
        returns (uint96)
    {
        require(
            blockNumber < block.number,
            "mPond::getPriorVotes: not yet determined"
        );

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(
        address delegator,
        address delegatee,
        uint96 amount
    ) internal {
        delegates[delegator][address(0)] = sub96(
            delegates[delegator][address(0)],
            amount,
            "mPond: delegates underflow"
        );
        delegates[delegator][delegatee] = add96(
            delegates[delegator][delegatee],
            amount,
            "mPond: delegates overflow"
        );

        emit DelegateChanged(delegator, address(0), delegatee);

        _moveDelegates(address(0), delegatee, amount);
    }

    function _undelegate(
        address delegator,
        address delegatee,
        uint96 amount
    ) internal {
        delegates[delegator][delegatee] = sub96(
            delegates[delegator][delegatee],
            amount,
            "mPond: undelegates underflow"
        );
        delegates[delegator][address(0)] = add96(
            delegates[delegator][address(0)],
            amount,
            "mPond: delegates underflow"
        );
        emit DelegateChanged(delegator, delegatee, address(0));
        _moveDelegates(delegatee, address(0), amount);
    }

    function _transferTokens(
        address src,
        address dst,
        uint96 amount
    ) internal {
        require(
            src != address(0),
            "mPond::_transferTokens: cannot transfer from the zero address"
        );
        require(
            delegates[src][address(0)] >= amount,
            "mPond: _transferTokens: undelegated amount should be greater than transfer amount"
        );
        require(
            dst != address(0),
            "mPond::_transferTokens: cannot transfer to the zero address"
        );

        balances[src] = sub96(
            balances[src],
            amount,
            "mPond::_transferTokens: transfer amount exceeds balance"
        );
        delegates[src][address(0)] = sub96(
            delegates[src][address(0)],
            amount,
            "mPond: _tranferTokens: undelegate subtraction error"
        );

        balances[dst] = add96(
            balances[dst],
            amount,
            "mPond::_transferTokens: transfer amount overflows"
        );
        delegates[dst][address(0)] = add96(
            delegates[dst][address(0)],
            amount,
            "mPond: _transferTokens: undelegate addition error"
        );
        emit Transfer(src, dst, amount);

        // _moveDelegates(delegates[src], delegates[dst], amount);
    }

    function _moveDelegates(
        address srcRep,
        address dstRep,
        uint96 amount
    ) internal {
        if (srcRep != dstRep && amount != 0) {
            if (srcRep != address(0)) {
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint96 srcRepOld = srcRepNum != 0
                    ? checkpoints[srcRep][srcRepNum - 1].votes
                    : 0;
                uint96 srcRepNew = sub96(
                    srcRepOld,
                    amount,
                    "mPond::_moveVotes: vote amount underflows"
                );
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint96 dstRepOld = dstRepNum != 0
                    ? checkpoints[dstRep][dstRepNum - 1].votes
                    : 0;
                uint96 dstRepNew = add96(
                    dstRepOld,
                    amount,
                    "mPond::_moveVotes: vote amount overflows"
                );
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(
        address delegatee,
        uint32 nCheckpoints,
        uint96 oldVotes,
        uint96 newVotes
    ) internal {
        uint32 blockNumber = safe32(
            block.number,
            "mPond::_writeCheckpoint: block number exceeds 32 bits"
        );

        if (
            nCheckpoints != 0 &&
            checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber
        ) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else {
            checkpoints[delegatee][nCheckpoints] = Checkpoint(
                blockNumber,
                newVotes
            );
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint256 n, string memory errorMessage)
        internal
        pure
        returns (uint32)
    {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function safe96(uint256 n, string memory errorMessage)
        internal
        pure
        returns (uint96)
    {
        require(n < 2**96, errorMessage);
        return uint96(n);
    }

    function add96(
        uint96 a,
        uint96 b,
        string memory errorMessage
    ) internal pure returns (uint96) {
        uint96 c = a + b;
        require(c >= a, errorMessage);
        return c;
    }

    function sub96(
        uint96 a,
        uint96 b,
        string memory errorMessage
    ) internal pure returns (uint96) {
        require(b <= a, errorMessage);
        return a - b;
    }

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

    modifier onlyAdmin(string memory _error) {
        require(msg.sender == admin, _error);
        _;
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"UNDELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addWhiteListAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bridgeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_updatedBridge","type":"address"}],"name":"changeDropBridge","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint96","name":"votes","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"removedAmount","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"delegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"delegateBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dropBridge","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"enableAllTranfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableAllTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedAmount","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"bridge","type":"address"},{"internalType":"address","name":"dropBridgeAddress","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_address1","type":"address"},{"internalType":"address","name":"_address2","type":"address"}],"name":"isWhiteListedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"undelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"undelegateBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50613d1a806100206000396000f3fe608060405234801561001057600080fd5b50600436106102265760003560e01c80638b41166c1161012a578063c43ff0c8116100bd578063e7a324dc1161008c578063f425859211610071578063f425859214610471578063f851a44014610484578063fd71d86a1461049957610226565b8063e7a324dc14610448578063f1127ed81461045057610226565b8063c43ff0c814610407578063dd62ed3e1461040f578063e1032b8314610422578063e58432421461043557610226565b8063a9059cbb116100f9578063a9059cbb146103c6578063b4b5ea57146103d9578063b9371343146103ec578063c0c53b8b146103f457610226565b80638b41166c1461038557806395d89b4114610398578063a457c2d7146103a0578063a65835da146103b357610226565b806339509351116101bd5780636fcfff451161018c578063782d6fe111610171578063782d6fe11461033f5780637ecebe001461035f5780638164c3091461037257610226565b80636fcfff451461030c57806370a082311461032c57610226565b806339509351146102cb57806367cb1601146102de5780636ab5cc38146102e65780636f9170f6146102f957610226565b806318160ddd116101f957806318160ddd1461029357806320606b701461029b57806323b872dd146102a3578063313ce567146102b657610226565b806302cb3a881461022b57806306fdde0314610240578063095ea7b31461025e57806316aeac201461027e575b600080fd5b61023e610239366004612cf7565b6104a1565b005b6102486106d3565b604051610255919061377a565b60405180910390f35b61027161026c366004612cc7565b61077f565b604051610255919061369f565b6102866108a4565b60405161025591906136ad565b6102866108aa565b6102866108b0565b6102716102b1366004612c84565b6108b6565b6102be610a9a565b6040516102559190613884565b6102716102d9366004612cc7565b610aa3565b610271610c1c565b6102716102f4366004612bfd565b610cc1565b610271610307366004612bd7565b610dbb565b61031f61031a366004612bd7565b610dd0565b604051610255919061385b565b61028661033a366004612bd7565b610de8565b61035261034d366004612cc7565b610e1e565b60405161025591906138a0565b61028661036d366004612bd7565b611100565b610271610380366004612bd7565b611112565b61023e610393366004612dc3565b6111f4565b610248611203565b6102716103ae366004612cc7565b61127c565b61023e6103c1366004612cf7565b611358565b6102716103d4366004612cc7565b611574565b6103526103e7366004612bd7565b6115f1565b61028661169f565b61023e610402366004612c37565b6116a5565b610271611a43565b61028661041d366004612bfd565b611a4c565b61023e610430366004612dc3565b611a92565b610352610443366004612bfd565b611a9d565b610286611ac8565b61046361045e366004612d93565b611ace565b604051610255929190613869565b61023e61047f366004612bd7565b611b09565b61048c611bbf565b6040516102559190613691565b61048c611bdb565b6000603e5460336040516104b59190613633565b60405180910390206104c5611bf7565b306040516020016104d99493929190613707565b60405160208183030381529060405280519060200120905060006040548989898660405160200161050e9594939291906136bb565b6040516020818303038152906040528051906020012090506000828260405160200161053b92919061364a565b6040516020818303038152906040528051906020012090506000600182898989604051600081526020016040526040516105789493929190613745565b6020604051602081039080840390855afa15801561059a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661061b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061383b565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526041602052604090208054600181019091558a14610681576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061381b565b884211156106bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061384b565b6106c6818c87611bfc565b5050505050505050505050565b6033805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107775780601f1061074c57610100808354040283529160200191610777565b820191906000526020600020905b81548152906001019060200180831161075a57829003601f168201915b505050505081565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156107d157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f6565b6107f383604051806060016040528060268152602001613be460269139611de0565b90505b33600081815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff891680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610890908590613892565b60405180910390a360019150505b92915050565b60405481565b60365481565b603e5481565b60006108c23384610cc1565b6108f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137cb565b73ffffffffffffffffffffffffffffffffffffffff841660009081526039602090815260408083203380855290835281842054825160608101909352602680845291946bffffffffffffffffffffffff909116939092610960928892613be490830139611de0565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156109ac57506bffffffffffffffffffffffff82811614155b15610a805760006109d683836040518060600160405280603e8152602001613ae6603e9139611e32565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152603960209081526040808320948a16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff86161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a76908590613892565b60405180910390a3505b610a8b878783611e95565b600193505050505b9392505050565b60355460ff1681565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610af557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b1a565b610b17836040518060600160405280602b8152602001613bb9602b9139611de0565b90505b33600090815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452825291829020548251606081019093526032808452610b7f936bffffffffffffffffffffffff9092169285929190613a6390830139612284565b33600081815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9586161790819055915190937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259261089092911690613892565b6000604051806060016040528060248152602001613c6060249139604254819073ffffffffffffffffffffffffffffffffffffffff163314610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b50604480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591505b5090565b60385460009073ffffffffffffffffffffffffffffffffffffffff84811691161415610cef5750600161089e565b60385473ffffffffffffffffffffffffffffffffffffffff83811691161415610d4f5773ffffffffffffffffffffffffffffffffffffffff831660009081526043602052604090205460ff1680610d48575060445460ff165b905061089e565b73ffffffffffffffffffffffffffffffffffffffff831660009081526043602052604090205460ff1680610da8575073ffffffffffffffffffffffffffffffffffffffff821660009081526043602052604090205460ff165b80610a93575060445460ff169392505050565b60436020526000908152604090205460ff1681565b603d6020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff166000908152603a60205260409020546bffffffffffffffffffffffff1690565b6000438210610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137bb565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603d602052604090205463ffffffff1680610e9457600091505061089e565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860181168552925290912054168310610f6c5773ffffffffffffffffffffffffffffffffffffffff84166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff168352929052205464010000000090046bffffffffffffffffffffffff16905061089e565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c6020908152604080832083805290915290205463ffffffff16831015610fb457600091505061089e565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff1611156110a857600282820363ffffffff16048103611004612afb565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603c6020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152908714156110835760200151945061089e9350505050565b805163ffffffff1687111561109a578193506110a1565b6001820392505b5050610fda565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603c6020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60416020526000908152604090205481565b60408051808201909152601881527f4f6e6c792061646d696e2063616e2077686974656c6973740000000000000000602082015260425460009190819073ffffffffffffffffffffffffffffffffffffffff16331461119e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b50505073ffffffffffffffffffffffffffffffffffffffff16600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915590565b6111ff3383836122df565b5050565b6034805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107775780601f1061074c57610100808354040283529160200191610777565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156112ce57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6112f3565b6112f0836040518060600160405280602d8152602001613c84602d9139611de0565b90505b33600090815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452825291829020548251606081019093526033808452610b7f936bffffffffffffffffffffffff9092169285929190613b2490830139611e32565b6000603e54603360405161136c9190613633565b604051809103902061137c611bf7565b306040516020016113909493929190613707565b6040516020818303038152906040528051906020012090506000603f54898989866040516020016113c59594939291906136bb565b604051602081830303815290604052805190602001209050600082826040516020016113f292919061364a565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161142f9493929190613745565b6020604051602081039080840390855afa158015611451573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166114c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137eb565b73ffffffffffffffffffffffffffffffffffffffff811660009081526041602052604090208054600181019091558a1461152f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061382b565b88421115611569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137db565b6106c6818c876122df565b60006115803384610cc1565b6115b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137cb565b60006115da83604051806060016040528060278152602001613cb160279139611de0565b90506115e7338583611e95565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603d602052604081205463ffffffff1680611629576000610a93565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff169392505050565b60375481565b600054610100900460ff16806116be57506116be6124bc565b806116cc575060005460ff16155b611702576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137fb565b600054610100900460ff1615801561176857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6117706124c2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137ab565b6037805473ffffffffffffffffffffffffffffffffffffffff85166000818152603a6020908152604080832080546bffffffffffffffffffffffff9687167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000918216179091558654603b845282852085805284528285208054919097169116179094558282526043905282812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055925491519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916118bf91906136ad565b60405180910390a360006118f06036546037546040518060600160405280602e81526020016139fe602e9139611e32565b73ffffffffffffffffffffffffffffffffffffffff8681166000818152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166bffffffffffffffffffffffff8916908117909255603b84528285208580528452828520805490911682179055848452604390925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055603880547fffffffffffffffffffffffff000000000000000000000000000000000000000016958a16959095179094559251939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611a0591906136ad565b60405180910390a3508015611a3d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50505050565b60445460ff1681565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526039602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6111ff338383611bfc565b603b6020908152600092835260408084209091529082529020546bffffffffffffffffffffffff1681565b603f5481565b603c60209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b604051806060016040528060218152602001613c3f60219139604254819073ffffffffffffffffffffffffffffffffffffffff163314611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b5050603880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60425473ffffffffffffffffffffffffffffffffffffffff1681565b60385473ffffffffffffffffffffffffffffffffffffffff1681565b465b90565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152603b60209081526040808320938616835292815290829020548251808401909352601c83527f6d506f6e643a20756e64656c65676174657320756e646572666c6f770000000091830191909152611c82916bffffffffffffffffffffffff909116908390611e32565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320938716835292815282822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95861617905581805290829020548251808401909352601a83527f6d506f6e643a2064656c65676174657320756e646572666c6f7700000000000091830191909152611d369216908390612284565b73ffffffffffffffffffffffffffffffffffffffff8481166000818152603b6020908152604080832083805290915280822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff96909616959095179094559251918516917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908490a4611ddb82600083612602565b505050565b6000816c010000000000000000000000008410611e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316611ee2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061378b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603b602090815260408083208380529091529020546bffffffffffffffffffffffff80831691161015611f5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061379b565b73ffffffffffffffffffffffffffffffffffffffff8216611faa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061380b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603a6020908152604091829020548251606081019093526037808452612007936bffffffffffffffffffffffff9092169285929190613a2c90830139611e32565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff958616179055603b825280832083805282529182902054825160608101909352603380845261209f94919091169285929091906139cb90830139611e32565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9687161790559286168252603a81529082902054825160608101909352603180845261213d9491909116928592909190613b8890830139612284565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff958616179055603b82528083208380528252918290205482516060810190935260318084526121d59491909116928592909190613b5790830139612284565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152603b602090815260408083208380529091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612277908590613892565b60405180910390a3505050565b6000838301826bffffffffffffffffffffffff80871690831610156122d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603b60209081526040808320838052825291829020548251808401909352601a83527f6d506f6e643a2064656c65676174657320756e646572666c6f7700000000000091830191909152612361916bffffffffffffffffffffffff909116908390611e32565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251808401909352601983527f6d506f6e643a2064656c656761746573206f766572666c6f7700000000000000918301919091526124149216908390612284565b73ffffffffffffffffffffffffffffffffffffffff8481166000818152603b602090815260408083209488168084529490915280822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff969096169590951790945592519192917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908390a4611ddb60008383612602565b303b1590565b6040805180820190915260068082527f4d61726c696e0000000000000000000000000000000000000000000000000000602090920191825261250691603391612b12565b506040805180820190915260058082527f4d504f4e44000000000000000000000000000000000000000000000000000000602090920191825261254b91603491612b12565b50603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016601217905569021e19e0c9bab240000060365569017b7883c0691660000060375560405161259f9061367b565b604051908190038120603e556125b490613686565b604051908190038120603f556125c99061363f565b60408051918290039091209055604280547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561264b57506bffffffffffffffffffffffff811615155b15611ddb5773ffffffffffffffffffffffffffffffffffffffff83161561274e5773ffffffffffffffffffffffffffffffffffffffff83166000908152603d602052604081205463ffffffff1690816126a5576000612715565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061273c8285604051806060016040528060298152602001613a9560299139611e32565b905061274a86848484612850565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611ddb5773ffffffffffffffffffffffffffffffffffffffff82166000908152603d602052604081205463ffffffff1690816127a3576000612813565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061283a8285604051806060016040528060288152602001613abe60289139612284565b905061284885848484612850565b505050505050565b600061287443604051806060016040528060358152602001613c0a60359139612ab9565b905063ffffffff8416158015906128e7575073ffffffffffffffffffffffffffffffffffffffff85166000908152603c6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b156129865773ffffffffffffffffffffffffffffffffffffffff85166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880163ffffffff168452909152902080547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff166401000000006bffffffffffffffffffffffff851602179055612a62565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000818152603c83528781208c871682528352878120965187549451909516640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9587167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000958616179590951694909417909555938252603d90935292909220805460018801909316929091169190911790555b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612aaa9291906138ae565b60405180910390a25050505050565b6000816401000000008410611e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b604080518082019091526000808252602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612b5357805160ff1916838001178555612b80565b82800160010185558215612b80579182015b82811115612b80578251825591602001919060010190612b65565b50610cbd92611bf99250905b80821115610cbd5760008155600101612b8c565b803561089e8161398f565b803561089e816139a6565b803561089e816139af565b803561089e816139b8565b803561089e816139c1565b600060208284031215612be957600080fd5b6000612bf58484612ba0565b949350505050565b60008060408385031215612c1057600080fd5b6000612c1c8585612ba0565b9250506020612c2d85828601612ba0565b9150509250929050565b600080600060608486031215612c4c57600080fd5b6000612c588686612ba0565b9350506020612c6986828701612ba0565b9250506040612c7a86828701612ba0565b9150509250925092565b600080600060608486031215612c9957600080fd5b6000612ca58686612ba0565b9350506020612cb686828701612ba0565b9250506040612c7a86828701612bab565b60008060408385031215612cda57600080fd5b6000612ce68585612ba0565b9250506020612c2d85828601612bab565b600080600080600080600060e0888a031215612d1257600080fd5b6000612d1e8a8a612ba0565b9750506020612d2f8a828b01612bab565b9650506040612d408a828b01612bab565b9550506060612d518a828b01612bc1565b9450506080612d628a828b01612bab565b93505060a0612d738a828b01612bab565b92505060c0612d848a828b01612bcc565b91505092959891949750929550565b60008060408385031215612da657600080fd5b6000612db28585612ba0565b9250506020612c2d85828601612bb6565b60008060408385031215612dd657600080fd5b6000612de28585612ba0565b9250506020612c2d85828601612bcc565b612dfc816138e7565b82525050565b612dfc816138f2565b612dfc81611bf9565b612dfc612e2082611bf9565b611bf9565b600081546001811660008114612e425760018114612e8357612ec2565b607f6002830416612e5381876138d9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168152955085019250612ec2565b60028204612e9181876138d9565b9550612e9c856138c9565b60005b82811015612ebb57815488820152600190910190602001612e9f565b5050850192505b505092915050565b6000612ed5826138d5565b612edf81856138de565b9350612eef81856020860161393b565b612ef881613967565b9093019392505050565b6000612f0f603d836138de565b7f6d506f6e643a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e736665722066726f6d20746865207a65726f2061646472657373000000602082015260400192915050565b6000612f6e6049836138d9565b7f556e656c65676174696f6e28616464726573732064656c6567617465652c756981527f6e74323536206e6f6e63652c75696e74323536206578706972792c75696e743960208201527f3620616d6f756e74290000000000000000000000000000000000000000000000604082015260490192915050565b6000612ff36002836138d9565b7f1901000000000000000000000000000000000000000000000000000000000000815260020192915050565b600061302c6051836138de565b7f6d506f6e643a205f7472616e73666572546f6b656e733a20756e64656c65676181527f74656420616d6f756e742073686f756c6420626520677265617465722074686160208201527f6e207472616e7366657220616d6f756e74000000000000000000000000000000604082015260600192915050565b60006130b16031836138de565b7f42726964676520616e64206163636f756e742073686f756c64206e6f7420626581527f207468652073616d652061646472657373000000000000000000000000000000602082015260400192915050565b60006131106028836138de565b7f6d506f6e643a3a6765745072696f72566f7465733a206e6f742079657420646581527f7465726d696e6564000000000000000000000000000000000000000000000000602082015260400192915050565b600061316f6077836138de565b7f41746c65617374206f6e65206f6620746865206164647265737320287372632081527f6f7220647374292073686f756c642062652077686974656c6973746564206f7260208201527f20616c6c207472616e7366657273206d75737420626520656e61626c6564207660408201527f696120656e61626c65416c6c5472616e73666572732829000000000000000000606082015260800192915050565b600061321a6043836138d9565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201527f6374290000000000000000000000000000000000000000000000000000000000604082015260430192915050565b600061329f6027836138de565b7f6d506f6e643a3a64656c656761746542795369673a207369676e61747572652081527f6578706972656400000000000000000000000000000000000000000000000000602082015260400192915050565b60006132fe6027836138de565b7f6d506f6e643a3a64656c656761746542795369673a20696e76616c696420736981527f676e617475726500000000000000000000000000000000000000000000000000602082015260400192915050565b600061335d602e836138de565b7f436f6e747261637420696e7374616e63652068617320616c726561647920626581527f656e20696e697469616c697a6564000000000000000000000000000000000000602082015260400192915050565b60006133bc603b836138de565b7f6d506f6e643a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e7366657220746f20746865207a65726f20616464726573730000000000602082015260400192915050565b600061341b6025836138de565b7f6d506f6e643a3a756e64656c656761746542795369673a20696e76616c69642081527f6e6f6e6365000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061347a6023836138de565b7f6d506f6e643a3a64656c656761746542795369673a20696e76616c6964206e6f81527f6e63650000000000000000000000000000000000000000000000000000000000602082015260400192915050565b60006134d96029836138de565b7f6d506f6e643a3a756e64656c656761746542795369673a20696e76616c69642081527f7369676e61747572650000000000000000000000000000000000000000000000602082015260400192915050565b60006135386048836138d9565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e74323536206578706972792c75696e74393660208201527f20616d6f756e7429000000000000000000000000000000000000000000000000604082015260480192915050565b60006135bd6029836138de565b7f6d506f6e643a3a756e64656c656761746542795369673a207369676e6174757281527f6520657870697265640000000000000000000000000000000000000000000000602082015260400192915050565b612dfc81613910565b612dfc81613919565b612dfc81613930565b612dfc8161391f565b6000610a938284612e25565b600061089e82612f61565b600061365582612fe6565b91506136618285612e14565b6020820191506136718284612e14565b5060200192915050565b600061089e8261320d565b600061089e8261352b565b6020810161089e8284612df3565b6020810161089e8284612e02565b6020810161089e8284612e0b565b60a081016136c98288612e0b565b6136d66020830187612df3565b6136e36040830186612e0b565b6136f06060830185612e0b565b6136fd608083018461362a565b9695505050505050565b608081016137158287612e0b565b6137226020830186612e0b565b61372f6040830185612e0b565b61373c6060830184612df3565b95945050505050565b608081016137538287612e0b565b6137606020830186613618565b61376d6040830185612e0b565b61373c6060830184612e0b565b60208082528101610a938184612eca565b6020808252810161089e81612f02565b6020808252810161089e8161301f565b6020808252810161089e816130a4565b6020808252810161089e81613103565b6020808252810161089e81613162565b6020808252810161089e81613292565b6020808252810161089e816132f1565b6020808252810161089e81613350565b6020808252810161089e816133af565b6020808252810161089e8161340e565b6020808252810161089e8161346d565b6020808252810161089e816134cc565b6020808252810161089e816135b0565b6020810161089e828461360f565b60408101613877828561360f565b610a93602083018461362a565b6020810161089e8284613618565b6020810161089e8284613621565b6020810161089e828461362a565b604081016138bc8285613621565b610a936020830184613621565b60009081526020902090565b5190565b919050565b90815260200190565b600061089e826138f7565b151590565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b600061089e8261391f565b60005b8381101561395657818101518382015260200161393e565b83811115611a3d5750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b613998816138e7565b81146139a357600080fd5b50565b61399881611bf9565b61399881613910565b61399881613919565b6139988161391f56fe6d506f6e643a205f7472616e666572546f6b656e733a20756e64656c6567617465207375627472616374696f6e206572726f726d506f6e643a205375627472616374696f6e206f766572666c6f7720696e2074686520636f6e7374727563746f726d506f6e643a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63656d506f6e643a20696e637265617365416c6c6f77616e636520616c6c6f77616e63652076616c7565206f766572666c6f77736d506f6e643a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f77736d506f6e643a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f77736d506f6e643a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63656d506f6e643a206465637265617365416c6c6f77616e636520616c6c6f77616e63652076616c756520756e646572666c6f77736d506f6e643a205f7472616e73666572546f6b656e733a20756e64656c6567617465206164646974696f6e206572726f726d506f6e643a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f77736d506f6e643a3a617070726f76653a206164646564416d6f756e74206578636565647320393620626974736d506f6e643a3a617070726f76653a20616d6f756e74206578636565647320393620626974736d506f6e643a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974734f6e6c792061646d696e2063616e206368616e67652064726f70206272696467654f6e6c7920656e61626c652063616e20656e61626c6520616c6c207472616e73666572736d506f6e643a3a617070726f76653a2072656d6f766564416d6f756e74206578636565647320393620626974736d506f6e643a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473a365627a7a72315820a12f202568486b19f84f7eebc8bc0d17e856d8f1523a4a22bf1e874952ef7f186c6578706572696d656e74616cf564736f6c63430005110040

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102265760003560e01c80638b41166c1161012a578063c43ff0c8116100bd578063e7a324dc1161008c578063f425859211610071578063f425859214610471578063f851a44014610484578063fd71d86a1461049957610226565b8063e7a324dc14610448578063f1127ed81461045057610226565b8063c43ff0c814610407578063dd62ed3e1461040f578063e1032b8314610422578063e58432421461043557610226565b8063a9059cbb116100f9578063a9059cbb146103c6578063b4b5ea57146103d9578063b9371343146103ec578063c0c53b8b146103f457610226565b80638b41166c1461038557806395d89b4114610398578063a457c2d7146103a0578063a65835da146103b357610226565b806339509351116101bd5780636fcfff451161018c578063782d6fe111610171578063782d6fe11461033f5780637ecebe001461035f5780638164c3091461037257610226565b80636fcfff451461030c57806370a082311461032c57610226565b806339509351146102cb57806367cb1601146102de5780636ab5cc38146102e65780636f9170f6146102f957610226565b806318160ddd116101f957806318160ddd1461029357806320606b701461029b57806323b872dd146102a3578063313ce567146102b657610226565b806302cb3a881461022b57806306fdde0314610240578063095ea7b31461025e57806316aeac201461027e575b600080fd5b61023e610239366004612cf7565b6104a1565b005b6102486106d3565b604051610255919061377a565b60405180910390f35b61027161026c366004612cc7565b61077f565b604051610255919061369f565b6102866108a4565b60405161025591906136ad565b6102866108aa565b6102866108b0565b6102716102b1366004612c84565b6108b6565b6102be610a9a565b6040516102559190613884565b6102716102d9366004612cc7565b610aa3565b610271610c1c565b6102716102f4366004612bfd565b610cc1565b610271610307366004612bd7565b610dbb565b61031f61031a366004612bd7565b610dd0565b604051610255919061385b565b61028661033a366004612bd7565b610de8565b61035261034d366004612cc7565b610e1e565b60405161025591906138a0565b61028661036d366004612bd7565b611100565b610271610380366004612bd7565b611112565b61023e610393366004612dc3565b6111f4565b610248611203565b6102716103ae366004612cc7565b61127c565b61023e6103c1366004612cf7565b611358565b6102716103d4366004612cc7565b611574565b6103526103e7366004612bd7565b6115f1565b61028661169f565b61023e610402366004612c37565b6116a5565b610271611a43565b61028661041d366004612bfd565b611a4c565b61023e610430366004612dc3565b611a92565b610352610443366004612bfd565b611a9d565b610286611ac8565b61046361045e366004612d93565b611ace565b604051610255929190613869565b61023e61047f366004612bd7565b611b09565b61048c611bbf565b6040516102559190613691565b61048c611bdb565b6000603e5460336040516104b59190613633565b60405180910390206104c5611bf7565b306040516020016104d99493929190613707565b60405160208183030381529060405280519060200120905060006040548989898660405160200161050e9594939291906136bb565b6040516020818303038152906040528051906020012090506000828260405160200161053b92919061364a565b6040516020818303038152906040528051906020012090506000600182898989604051600081526020016040526040516105789493929190613745565b6020604051602081039080840390855afa15801561059a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661061b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061383b565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526041602052604090208054600181019091558a14610681576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061381b565b884211156106bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061384b565b6106c6818c87611bfc565b5050505050505050505050565b6033805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107775780601f1061074c57610100808354040283529160200191610777565b820191906000526020600020905b81548152906001019060200180831161075a57829003601f168201915b505050505081565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156107d157507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6107f6565b6107f383604051806060016040528060268152602001613be460269139611de0565b90505b33600081815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff891680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610890908590613892565b60405180910390a360019150505b92915050565b60405481565b60365481565b603e5481565b60006108c23384610cc1565b6108f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137cb565b73ffffffffffffffffffffffffffffffffffffffff841660009081526039602090815260408083203380855290835281842054825160608101909352602680845291946bffffffffffffffffffffffff909116939092610960928892613be490830139611de0565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156109ac57506bffffffffffffffffffffffff82811614155b15610a805760006109d683836040518060600160405280603e8152602001613ae6603e9139611e32565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152603960209081526040808320948a16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff86161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610a76908590613892565b60405180910390a3505b610a8b878783611e95565b600193505050505b9392505050565b60355460ff1681565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610af557507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b1a565b610b17836040518060600160405280602b8152602001613bb9602b9139611de0565b90505b33600090815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452825291829020548251606081019093526032808452610b7f936bffffffffffffffffffffffff9092169285929190613a6390830139612284565b33600081815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9586161790819055915190937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259261089092911690613892565b6000604051806060016040528060248152602001613c6060249139604254819073ffffffffffffffffffffffffffffffffffffffff163314610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b50604480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591505b5090565b60385460009073ffffffffffffffffffffffffffffffffffffffff84811691161415610cef5750600161089e565b60385473ffffffffffffffffffffffffffffffffffffffff83811691161415610d4f5773ffffffffffffffffffffffffffffffffffffffff831660009081526043602052604090205460ff1680610d48575060445460ff165b905061089e565b73ffffffffffffffffffffffffffffffffffffffff831660009081526043602052604090205460ff1680610da8575073ffffffffffffffffffffffffffffffffffffffff821660009081526043602052604090205460ff165b80610a93575060445460ff169392505050565b60436020526000908152604090205460ff1681565b603d6020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff166000908152603a60205260409020546bffffffffffffffffffffffff1690565b6000438210610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137bb565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603d602052604090205463ffffffff1680610e9457600091505061089e565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860181168552925290912054168310610f6c5773ffffffffffffffffffffffffffffffffffffffff84166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff168352929052205464010000000090046bffffffffffffffffffffffff16905061089e565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c6020908152604080832083805290915290205463ffffffff16831015610fb457600091505061089e565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff1611156110a857600282820363ffffffff16048103611004612afb565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603c6020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152908714156110835760200151945061089e9350505050565b805163ffffffff1687111561109a578193506110a1565b6001820392505b5050610fda565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603c6020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60416020526000908152604090205481565b60408051808201909152601881527f4f6e6c792061646d696e2063616e2077686974656c6973740000000000000000602082015260425460009190819073ffffffffffffffffffffffffffffffffffffffff16331461119e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b50505073ffffffffffffffffffffffffffffffffffffffff16600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915590565b6111ff3383836122df565b5050565b6034805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107775780601f1061074c57610100808354040283529160200191610777565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156112ce57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6112f3565b6112f0836040518060600160405280602d8152602001613c84602d9139611de0565b90505b33600090815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452825291829020548251606081019093526033808452610b7f936bffffffffffffffffffffffff9092169285929190613b2490830139611e32565b6000603e54603360405161136c9190613633565b604051809103902061137c611bf7565b306040516020016113909493929190613707565b6040516020818303038152906040528051906020012090506000603f54898989866040516020016113c59594939291906136bb565b604051602081830303815290604052805190602001209050600082826040516020016113f292919061364a565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161142f9493929190613745565b6020604051602081039080840390855afa158015611451573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166114c9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137eb565b73ffffffffffffffffffffffffffffffffffffffff811660009081526041602052604090208054600181019091558a1461152f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061382b565b88421115611569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137db565b6106c6818c876122df565b60006115803384610cc1565b6115b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137cb565b60006115da83604051806060016040528060278152602001613cb160279139611de0565b90506115e7338583611e95565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603d602052604081205463ffffffff1680611629576000610a93565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff169392505050565b60375481565b600054610100900460ff16806116be57506116be6124bc565b806116cc575060005460ff16155b611702576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137fb565b600054610100900460ff1615801561176857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6117706124c2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612906137ab565b6037805473ffffffffffffffffffffffffffffffffffffffff85166000818152603a6020908152604080832080546bffffffffffffffffffffffff9687167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000918216179091558654603b845282852085805284528285208054919097169116179094558282526043905282812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055925491519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916118bf91906136ad565b60405180910390a360006118f06036546037546040518060600160405280602e81526020016139fe602e9139611e32565b73ffffffffffffffffffffffffffffffffffffffff8681166000818152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166bffffffffffffffffffffffff8916908117909255603b84528285208580528452828520805490911682179055848452604390925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055603880547fffffffffffffffffffffffff000000000000000000000000000000000000000016958a16959095179094559251939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611a0591906136ad565b60405180910390a3508015611a3d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50505050565b60445460ff1681565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526039602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b6111ff338383611bfc565b603b6020908152600092835260408084209091529082529020546bffffffffffffffffffffffff1681565b603f5481565b603c60209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b604051806060016040528060218152602001613c3f60219139604254819073ffffffffffffffffffffffffffffffffffffffff163314611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b5050603880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60425473ffffffffffffffffffffffffffffffffffffffff1681565b60385473ffffffffffffffffffffffffffffffffffffffff1681565b465b90565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152603b60209081526040808320938616835292815290829020548251808401909352601c83527f6d506f6e643a20756e64656c65676174657320756e646572666c6f770000000091830191909152611c82916bffffffffffffffffffffffff909116908390611e32565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320938716835292815282822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95861617905581805290829020548251808401909352601a83527f6d506f6e643a2064656c65676174657320756e646572666c6f7700000000000091830191909152611d369216908390612284565b73ffffffffffffffffffffffffffffffffffffffff8481166000818152603b6020908152604080832083805290915280822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff96909616959095179094559251918516917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908490a4611ddb82600083612602565b505050565b6000816c010000000000000000000000008410611e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316611ee2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061378b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603b602090815260408083208380529091529020546bffffffffffffffffffffffff80831691161015611f5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061379b565b73ffffffffffffffffffffffffffffffffffffffff8216611faa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106129061380b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603a6020908152604091829020548251606081019093526037808452612007936bffffffffffffffffffffffff9092169285929190613a2c90830139611e32565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff958616179055603b825280832083805282529182902054825160608101909352603380845261209f94919091169285929091906139cb90830139611e32565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9687161790559286168252603a81529082902054825160608101909352603180845261213d9491909116928592909190613b8890830139612284565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff958616179055603b82528083208380528252918290205482516060810190935260318084526121d59491909116928592909190613b5790830139612284565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152603b602090815260408083208380529091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612277908590613892565b60405180910390a3505050565b6000838301826bffffffffffffffffffffffff80871690831610156122d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603b60209081526040808320838052825291829020548251808401909352601a83527f6d506f6e643a2064656c65676174657320756e646572666c6f7700000000000091830191909152612361916bffffffffffffffffffffffff909116908390611e32565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251808401909352601983527f6d506f6e643a2064656c656761746573206f766572666c6f7700000000000000918301919091526124149216908390612284565b73ffffffffffffffffffffffffffffffffffffffff8481166000818152603b602090815260408083209488168084529490915280822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff969096169590951790945592519192917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908390a4611ddb60008383612602565b303b1590565b6040805180820190915260068082527f4d61726c696e0000000000000000000000000000000000000000000000000000602090920191825261250691603391612b12565b506040805180820190915260058082527f4d504f4e44000000000000000000000000000000000000000000000000000000602090920191825261254b91603491612b12565b50603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016601217905569021e19e0c9bab240000060365569017b7883c0691660000060375560405161259f9061367b565b604051908190038120603e556125b490613686565b604051908190038120603f556125c99061363f565b60408051918290039091209055604280547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561264b57506bffffffffffffffffffffffff811615155b15611ddb5773ffffffffffffffffffffffffffffffffffffffff83161561274e5773ffffffffffffffffffffffffffffffffffffffff83166000908152603d602052604081205463ffffffff1690816126a5576000612715565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061273c8285604051806060016040528060298152602001613a9560299139611e32565b905061274a86848484612850565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611ddb5773ffffffffffffffffffffffffffffffffffffffff82166000908152603d602052604081205463ffffffff1690816127a3576000612813565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061283a8285604051806060016040528060288152602001613abe60289139612284565b905061284885848484612850565b505050505050565b600061287443604051806060016040528060358152602001613c0a60359139612ab9565b905063ffffffff8416158015906128e7575073ffffffffffffffffffffffffffffffffffffffff85166000908152603c6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b156129865773ffffffffffffffffffffffffffffffffffffffff85166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880163ffffffff168452909152902080547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff166401000000006bffffffffffffffffffffffff851602179055612a62565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000818152603c83528781208c871682528352878120965187549451909516640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9587167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000958616179590951694909417909555938252603d90935292909220805460018801909316929091169190911790555b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612aaa9291906138ae565b60405180910390a25050505050565b6000816401000000008410611e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610612919061377a565b604080518082019091526000808252602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612b5357805160ff1916838001178555612b80565b82800160010185558215612b80579182015b82811115612b80578251825591602001919060010190612b65565b50610cbd92611bf99250905b80821115610cbd5760008155600101612b8c565b803561089e8161398f565b803561089e816139a6565b803561089e816139af565b803561089e816139b8565b803561089e816139c1565b600060208284031215612be957600080fd5b6000612bf58484612ba0565b949350505050565b60008060408385031215612c1057600080fd5b6000612c1c8585612ba0565b9250506020612c2d85828601612ba0565b9150509250929050565b600080600060608486031215612c4c57600080fd5b6000612c588686612ba0565b9350506020612c6986828701612ba0565b9250506040612c7a86828701612ba0565b9150509250925092565b600080600060608486031215612c9957600080fd5b6000612ca58686612ba0565b9350506020612cb686828701612ba0565b9250506040612c7a86828701612bab565b60008060408385031215612cda57600080fd5b6000612ce68585612ba0565b9250506020612c2d85828601612bab565b600080600080600080600060e0888a031215612d1257600080fd5b6000612d1e8a8a612ba0565b9750506020612d2f8a828b01612bab565b9650506040612d408a828b01612bab565b9550506060612d518a828b01612bc1565b9450506080612d628a828b01612bab565b93505060a0612d738a828b01612bab565b92505060c0612d848a828b01612bcc565b91505092959891949750929550565b60008060408385031215612da657600080fd5b6000612db28585612ba0565b9250506020612c2d85828601612bb6565b60008060408385031215612dd657600080fd5b6000612de28585612ba0565b9250506020612c2d85828601612bcc565b612dfc816138e7565b82525050565b612dfc816138f2565b612dfc81611bf9565b612dfc612e2082611bf9565b611bf9565b600081546001811660008114612e425760018114612e8357612ec2565b607f6002830416612e5381876138d9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168152955085019250612ec2565b60028204612e9181876138d9565b9550612e9c856138c9565b60005b82811015612ebb57815488820152600190910190602001612e9f565b5050850192505b505092915050565b6000612ed5826138d5565b612edf81856138de565b9350612eef81856020860161393b565b612ef881613967565b9093019392505050565b6000612f0f603d836138de565b7f6d506f6e643a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e736665722066726f6d20746865207a65726f2061646472657373000000602082015260400192915050565b6000612f6e6049836138d9565b7f556e656c65676174696f6e28616464726573732064656c6567617465652c756981527f6e74323536206e6f6e63652c75696e74323536206578706972792c75696e743960208201527f3620616d6f756e74290000000000000000000000000000000000000000000000604082015260490192915050565b6000612ff36002836138d9565b7f1901000000000000000000000000000000000000000000000000000000000000815260020192915050565b600061302c6051836138de565b7f6d506f6e643a205f7472616e73666572546f6b656e733a20756e64656c65676181527f74656420616d6f756e742073686f756c6420626520677265617465722074686160208201527f6e207472616e7366657220616d6f756e74000000000000000000000000000000604082015260600192915050565b60006130b16031836138de565b7f42726964676520616e64206163636f756e742073686f756c64206e6f7420626581527f207468652073616d652061646472657373000000000000000000000000000000602082015260400192915050565b60006131106028836138de565b7f6d506f6e643a3a6765745072696f72566f7465733a206e6f742079657420646581527f7465726d696e6564000000000000000000000000000000000000000000000000602082015260400192915050565b600061316f6077836138de565b7f41746c65617374206f6e65206f6620746865206164647265737320287372632081527f6f7220647374292073686f756c642062652077686974656c6973746564206f7260208201527f20616c6c207472616e7366657273206d75737420626520656e61626c6564207660408201527f696120656e61626c65416c6c5472616e73666572732829000000000000000000606082015260800192915050565b600061321a6043836138d9565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201527f6374290000000000000000000000000000000000000000000000000000000000604082015260430192915050565b600061329f6027836138de565b7f6d506f6e643a3a64656c656761746542795369673a207369676e61747572652081527f6578706972656400000000000000000000000000000000000000000000000000602082015260400192915050565b60006132fe6027836138de565b7f6d506f6e643a3a64656c656761746542795369673a20696e76616c696420736981527f676e617475726500000000000000000000000000000000000000000000000000602082015260400192915050565b600061335d602e836138de565b7f436f6e747261637420696e7374616e63652068617320616c726561647920626581527f656e20696e697469616c697a6564000000000000000000000000000000000000602082015260400192915050565b60006133bc603b836138de565b7f6d506f6e643a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e7366657220746f20746865207a65726f20616464726573730000000000602082015260400192915050565b600061341b6025836138de565b7f6d506f6e643a3a756e64656c656761746542795369673a20696e76616c69642081527f6e6f6e6365000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061347a6023836138de565b7f6d506f6e643a3a64656c656761746542795369673a20696e76616c6964206e6f81527f6e63650000000000000000000000000000000000000000000000000000000000602082015260400192915050565b60006134d96029836138de565b7f6d506f6e643a3a756e64656c656761746542795369673a20696e76616c69642081527f7369676e61747572650000000000000000000000000000000000000000000000602082015260400192915050565b60006135386048836138d9565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e74323536206578706972792c75696e74393660208201527f20616d6f756e7429000000000000000000000000000000000000000000000000604082015260480192915050565b60006135bd6029836138de565b7f6d506f6e643a3a756e64656c656761746542795369673a207369676e6174757281527f6520657870697265640000000000000000000000000000000000000000000000602082015260400192915050565b612dfc81613910565b612dfc81613919565b612dfc81613930565b612dfc8161391f565b6000610a938284612e25565b600061089e82612f61565b600061365582612fe6565b91506136618285612e14565b6020820191506136718284612e14565b5060200192915050565b600061089e8261320d565b600061089e8261352b565b6020810161089e8284612df3565b6020810161089e8284612e02565b6020810161089e8284612e0b565b60a081016136c98288612e0b565b6136d66020830187612df3565b6136e36040830186612e0b565b6136f06060830185612e0b565b6136fd608083018461362a565b9695505050505050565b608081016137158287612e0b565b6137226020830186612e0b565b61372f6040830185612e0b565b61373c6060830184612df3565b95945050505050565b608081016137538287612e0b565b6137606020830186613618565b61376d6040830185612e0b565b61373c6060830184612e0b565b60208082528101610a938184612eca565b6020808252810161089e81612f02565b6020808252810161089e8161301f565b6020808252810161089e816130a4565b6020808252810161089e81613103565b6020808252810161089e81613162565b6020808252810161089e81613292565b6020808252810161089e816132f1565b6020808252810161089e81613350565b6020808252810161089e816133af565b6020808252810161089e8161340e565b6020808252810161089e8161346d565b6020808252810161089e816134cc565b6020808252810161089e816135b0565b6020810161089e828461360f565b60408101613877828561360f565b610a93602083018461362a565b6020810161089e8284613618565b6020810161089e8284613621565b6020810161089e828461362a565b604081016138bc8285613621565b610a936020830184613621565b60009081526020902090565b5190565b919050565b90815260200190565b600061089e826138f7565b151590565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b600061089e8261391f565b60005b8381101561395657818101518382015260200161393e565b83811115611a3d5750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b613998816138e7565b81146139a357600080fd5b50565b61399881611bf9565b61399881613910565b61399881613919565b6139988161391f56fe6d506f6e643a205f7472616e666572546f6b656e733a20756e64656c6567617465207375627472616374696f6e206572726f726d506f6e643a205375627472616374696f6e206f766572666c6f7720696e2074686520636f6e7374727563746f726d506f6e643a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63656d506f6e643a20696e637265617365416c6c6f77616e636520616c6c6f77616e63652076616c7565206f766572666c6f77736d506f6e643a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f77736d506f6e643a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f77736d506f6e643a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63656d506f6e643a206465637265617365416c6c6f77616e636520616c6c6f77616e63652076616c756520756e646572666c6f77736d506f6e643a205f7472616e73666572546f6b656e733a20756e64656c6567617465206164646974696f6e206572726f726d506f6e643a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f77736d506f6e643a3a617070726f76653a206164646564416d6f756e74206578636565647320393620626974736d506f6e643a3a617070726f76653a20616d6f756e74206578636565647320393620626974736d506f6e643a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974734f6e6c792061646d696e2063616e206368616e67652064726f70206272696467654f6e6c7920656e61626c652063616e20656e61626c6520616c6c207472616e73666572736d506f6e643a3a617070726f76653a2072656d6f766564416d6f756e74206578636565647320393620626974736d506f6e643a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473a365627a7a72315820a12f202568486b19f84f7eebc8bc0d17e856d8f1523a4a22bf1e874952ef7f186c6578706572696d656e74616cf564736f6c63430005110040

Deployed Bytecode Sourcemap

2256:21896:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2256:21896:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15028:1140;;;;;;;;;:::i;:::-;;2350:18;;;:::i;:::-;;;;;;;;;;;;;;;;8736:498;;;;;;;;;:::i;:::-;;;;;;;;3843:36;;;:::i;:::-;;;;;;;;2597:26;;;:::i;3591:30::-;;;:::i;12016:1032::-;;;;;;;;;:::i;2512:21::-;;;:::i;:::-;;;;;;;;9242:686;;;;;;;;;:::i;6945:201::-;;;:::i;7335:448::-;;;;;;;;;:::i;4064:45::-;;;;;;;;;:::i;3470:48::-;;;;;;;;;:::i;:::-;;;;;;;;10834:111;;;;;;;;;:::i;17070:1291::-;;;;;;;;;:::i;:::-;;;;;;;;3960:41;;;;;;;;;:::i;6725:212::-;;;;;;;;;:::i;13196:125::-;;;;;;;;;:::i;2429:20::-;;;:::i;9936:695::-;;;;;;;;;:::i;13892:1128::-;;;;;;;;;:::i;11209:497::-;;;;;;;;;:::i;16369:270::-;;;;;;;;;:::i;2643:27::-;;;:::i;5044:949::-;;;;;;;;;:::i;4116:29::-;;;:::i;8087:171::-;;;;;;;;;:::i;13329:129::-;;;;;;;;;:::i;3026:63::-;;;;;;;;;:::i;3715:34::-;;;:::i;3333:68::-;;;;;;;;;:::i;:::-;;;;;;;;;7154:173;;;;;;;;;:::i;4037:20::-;;;:::i;:::-;;;;;;;;2691:25;;;:::i;15028:1140::-;15237:23;15316:15;;15366:4;15350:22;;;;;;;;;;;;;;;15391:12;:10;:12::i;:::-;15430:4;15287:163;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15287:163:0;;;15263:198;;;;;;15237:224;;15472:18;15528:21;;15551:9;15562:5;15569:6;15577;15517:67;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15517:67:0;;;15493:102;;;;;;15472:123;;15606:14;15676:15;15693:10;15647:57;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15647:57:0;;;15623:92;;;;;;15606:109;;15726:17;15746:26;15756:6;15764:1;15767;15770;15746:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;15746:26:0;;;;;;-1:-1:-1;;15805:23:0;;;15783:114;;;;;;;;;;;;;;;;;;;;;;15939:17;;;;;;;:6;:17;;;;;:19;;;;;;;;15930:28;;15908:115;;;;;;;;;;;;;;16049:6;16042:3;:13;;16034:67;;;;;;;;;;;;;;16119:41;16131:9;16142;16153:6;16119:11;:41::i;:::-;16112:48;;;;15028:1140;;;;;;;:::o;2350:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8736:498::-;8825:4;8847:13;8896:2;8875:9;:24;8871:226;;;-1:-1:-1;8932:2:0;8871:226;;;8977:108;9002:9;8977:108;;;;;;;;;;;;;;;;;:6;:108::i;:::-;8968:117;;8871:226;9120:10;9109:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;:40;;;;;;;;;;9167:37;;9109:31;;9120:10;9167:37;;;;9109:40;;9167:37;;;;;;;;;;9222:4;9215:11;;;8736:498;;;;;:::o;3843:36::-;;;;:::o;2597:26::-;;;;:::o;3591:30::-;;;;:::o;12016:1032::-;12135:4;12174:38;12196:10;12208:3;12174:21;:38::i;:::-;12152:207;;;;;;;;;;;;;;12435:15;;;12370;12435;;;:10;:15;;;;;;;;12388:10;12435:24;;;;;;;;;;12486:96;;;;;;;;;;;;12388:10;;12435:24;;;;;12370:15;;12486:96;;12507:9;;12486:96;;;;;:6;:96::i;:::-;12470:112;;12610:3;12599:14;;:7;:14;;;;:48;;;;-1:-1:-1;12617:30:0;;;;;;12599:48;12595:378;;;12664:19;12686:163;12710:16;12745:6;12686:163;;;;;;;;;;;;;;;;;:5;:163::i;:::-;12864:15;;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;;:39;;;;;;;;;;12925:36;12864:39;;-1:-1:-1;12864:24:0;;12925:36;;;;12864:39;;12925:36;;;;;;;;;;12595:378;;12985:33;13001:3;13006;13011:6;12985:15;:33::i;:::-;13036:4;13029:11;;;;;12016:1032;;;;;;:::o;2512:21::-;;;;;;:::o;9242:686::-;9343:4;9365:13;9416:2;9393:11;:26;9389:235;;;-1:-1:-1;9452:2:0;9389:235;;;9497:115;9522:11;9497:115;;;;;;;;;;;;;;;;;:6;:115::i;:::-;9488:124;;9389:235;9701:10;9690:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;9670:150;;;;;;;;;;;;;;9690:31;;;;;9736:6;;9670:150;;;;;;;:5;:150::i;:::-;9647:10;9636:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;:184;;;;;;;;;;;;;9836:62;;9636:31;;9836:62;;;;9866:31;;;9836:62;;6945:201;7070:4;24041:108;;;;;;;;;;;;;;;;;24115:5;;24122:6;;24115:5;;24101:10;:19;24093:36;;;;;;;;;;;;;;;-1:-1:-1;7092:17:0;:24;;;;7112:4;7092:24;;;;;;7112:4;-1:-1:-1;24140:1:0;6945:201;;:::o;7335:448::-;7491:10;;7452:4;;7491:10;7478:23;;;7491:10;;7478:23;7474:183;;;-1:-1:-1;7525:4:0;7518:11;;7474:183;7564:10;;;7551:23;;;7564:10;;7551:23;7547:110;;;7599:24;;;;;;;:13;:24;;;;;;;;;:45;;-1:-1:-1;7627:17:0;;;;7599:45;7591:54;;;;7547:110;7688:24;;;;;;;:13;:24;;;;;;;;;:52;;-1:-1:-1;7716:24:0;;;;;;;:13;:24;;;;;;;;7688:52;7687:88;;;-1:-1:-1;7758:17:0;;;;7667:108;7335:448;-1:-1:-1;;;7335:448:0:o;4064:45::-;;;;;;;;;;;;;;;:::o;3470:48::-;;;;;;;;;;;;;;;:::o;10834:111::-;10920:17;;10893:7;10920:17;;;:8;:17;;;;;;;;;10834:111::o;17070:1291::-;17179:6;17239:12;17225:11;:26;17203:116;;;;;;;;;;;;;;17354:23;;;17332:19;17354:23;;;:14;:23;;;;;;;;17392:17;17388:58;;17433:1;17426:8;;;;;17388:58;17506:20;;;;;;;:11;:20;;;;;;;;:38;17527:16;;;17506:38;;;;;;;;;:48;;:63;-1:-1:-1;17502:147:0;;17593:20;;;;;;;:11;:20;;;;;;;;17614:16;;;;;17593:38;;;;;;;;:44;;;;;;;-1:-1:-1;17586:51:0;;17502:147;17710:20;;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;17706:88:0;;;17781:1;17774:8;;;;;17706:88;17806:12;17848:16;;;17875:428;17890:5;17882:13;;:5;:13;;;17875:428;;;17954:1;17937:13;;;17936:19;;;17928:27;;17997:20;;:::i;:::-;-1:-1:-1;18020:20:0;;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;17997:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18067:27;;18063:229;;;18122:8;;;;-1:-1:-1;18115:15:0;;-1:-1:-1;;;;18115:15:0;18063:229;18156:12;;:26;;;-1:-1:-1;18152:140:0;;;18211:6;18203:14;;18152:140;;;18275:1;18266:6;:10;18258:18;;18152:140;17875:428;;;;;-1:-1:-1;18320:20:0;;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;;;;;-1:-1:-1;;17070:1291:0;;;;:::o;3960:41::-;;;;;;;;;;;;;:::o;6725:212::-;24041:108;;;;;;;;;;;;;;;;;24115:5;;-1:-1:-1;;24041:108:0;;;24115:5;;24101:10;:19;24093:36;;;;;;;;;;;;;;;-1:-1:-1;;;6877:23:0;;;;;;:13;:23;;;;;:30;;;;6903:4;6877:30;;;;;;6903:4;6725:212::o;13196:125::-;13273:40;13283:10;13295:9;13306:6;13273:9;:40::i;:::-;13196:125;;:::o;2429:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9936:695;10039:4;10061:13;10114:2;10089:13;:28;10085:241;;;-1:-1:-1;10150:2:0;10085:241;;;10195:119;10220:13;10195:119;;;;;;;;;;;;;;;;;:6;:119::i;:::-;10186:128;;10085:241;10403:10;10392:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;10372:151;;;;;;;;;;;;;;10392:31;;;;;10438:6;;10372:151;;;;;;;:5;:151::i;13892:1128::-;14099:23;14178:15;;14228:4;14212:22;;;;;;;;;;;;;;;14253:12;:10;:12::i;:::-;14292:4;14149:163;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14149:163:0;;;14125:198;;;;;;14099:224;;14334:18;14390:19;;14411:9;14422:5;14429:6;14437;14379:65;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14379:65:0;;;14355:100;;;;;;14334:121;;14466:14;14536:15;14553:10;14507:57;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14507:57:0;;;14483:92;;;;;;14466:109;;14586:17;14606:26;14616:6;14624:1;14627;14630;14606:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;14606:26:0;;;;;;-1:-1:-1;;14665:23:0;;;14643:112;;;;;;;;;;;;;;14797:17;;;;;;;:6;:17;;;;;:19;;;;;;;;14788:28;;14766:113;;;;;;;;;;;;;;14905:6;14898:3;:13;;14890:65;;;;;;;;;;;;;;14973:39;14983:9;14994;15005:6;14973:9;:39::i;11209:497::-;11277:4;11316:38;11338:10;11350:3;11316:21;:38::i;:::-;11294:207;;;;;;;;;;;;;;11512:13;11528:97;11549:9;11528:97;;;;;;;;;;;;;;;;;:6;:97::i;:::-;11512:113;;11636:40;11652:10;11664:3;11669:6;11636:15;:40::i;:::-;-1:-1:-1;11694:4:0;;11209:497;-1:-1:-1;;;11209:497:0:o;16369:270::-;16475:23;;;16434:6;16475:23;;;:14;:23;;;;;;;;16529:17;:102;;16630:1;16529:102;;;16566:20;;;;;;;:11;:20;;;;;;;;16587:16;;;16566:38;;;;;;;;;:44;;;;;;16509:122;16369:270;-1:-1:-1;;;16369:270:0:o;2643:27::-;;;;:::o;5044:949::-;1118:12;;;;;;;;:31;;;1134:15;:13;:15::i;:::-;1118:47;;;-1:-1:-1;1154:11:0;;;;1153:12;1118:47;1110:106;;;;;;;;;;;;;;1225:19;1248:12;;;;;;1247:13;1267:83;;;;1296:12;:19;;1324:18;1296:19;;;;;;1324:18;1311:4;1324:18;;;1267:83;5188:17;:15;:17::i;:::-;5249:6;5238:17;;:7;:17;;;;5216:116;;;;;;;;;;;;;;5369:12;;;5343:16;;;;;;;:8;:16;;;;;;;;:39;;;;;;;;;;;;;;5432:12;;5393:9;:17;;;;;:29;;;;;;;;:52;;;;;;;;;;;;5456:21;;;:13;:21;;;;;:28;;;;5343:39;5456:28;;;5529:12;;5500:42;;5343:16;;;5500:42;;;;5529:12;5500:42;;;;;;;;;;5555:22;5580:148;5607:11;;5641:12;;5580:148;;;;;;;;;;;;;;;;;:5;:148::i;:::-;5739:17;;;;;;;;:8;:17;;;;;;;;:35;;;;;;;;;;;;;;;5785:9;:18;;;;;:30;;;;;;;;:48;;;;;;;;;5844:22;;;:13;:22;;;;;;:29;;;;-1:-1:-1;5844:29:0;;;5884:10;:30;;;;;;;;;;;;;;5930:55;;5739:35;;-1:-1:-1;5739:17:0;;;;5930:55;;;;5739:35;5930:55;;;;;;;;;;1358:1;1372:14;1368:57;;;1412:5;1397:20;;;;;;1368:57;5044:949;;;;:::o;4116:29::-;;;;;;:::o;8087:171::-;8222:19;;;;8190:7;8222:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;;;;8087:171::o;13329:129::-;13408:42;13420:10;13432:9;13443:6;13408:11;:42::i;3026:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3715:34::-;;;;:::o;3333:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7154:173::-;24041:108;;;;;;;;;;;;;;;;;24115:5;;24122:6;;24115:5;;24101:10;:19;24093:36;;;;;;;;;;;;;;;-1:-1:-1;;7292:10:0;:27;;;;;;;;;;;;;;;7154:173::o;4037:20::-;;;;;;:::o;2691:25::-;;;;;;:::o;23855:178::-;23981:9;23855:178;;:::o;18968:592::-;19150:20;;;;;;;;:9;:20;;;;;;;;:31;;;;;;;;;;;;;19130:128;;;;;;;;;;;;;;;;;;;;;19150:31;;;;;19196:6;;19130:5;:128::i;:::-;19096:20;;;;;;;;:9;:20;;;;;;;;:31;;;;;;;;;;;:162;;;;;;;;;;;19324:32;;;;;;;;19304:127;;;;;;;;;;;;;;;;;;;;;19324:32;;19371:6;;19304:5;:127::i;:::-;19269:20;;;;;;;;:9;:20;;;;;;;;:32;;;;;;;;;:162;;;;;;;;;;;;;;;;19447:49;;;;;;;;19269:20;;19447:49;19507:45;19522:9;19541:1;19545:6;19507:14;:45::i;:::-;18968:592;;;:::o;23214:196::-;23319:6;23362:12;23355:5;23351:9;;23343:32;;;;;;;;;;;;;;;-1:-1:-1;23400:1:0;;23214:196;-1:-1:-1;;23214:196:0:o;23648:199::-;23768:6;23800:1;23795:6;;:1;:6;;;;23803:12;23787:29;;;;;;;;;;;;;;;;-1:-1:-1;;;23834:5:0;;;23648:199::o;19568:1379::-;19710:17;;;19688:128;;;;;;;;;;;;;;19849:14;;;;;;;:9;:14;;;;;;;;:26;;;;;;;;;:36;;;;:26;;:36;;19827:167;;;;;;;;;;;;;;20027:17;;;20005:126;;;;;;;;;;;;;;20180:13;;;;;;;:8;:13;;;;;;;;;;20160:137;;;;;;;;;;;;;;20180:13;;;;;20208:6;;20160:137;;;;;;;:5;:137::i;:::-;20144:13;;;;;;;:8;:13;;;;;;;;:153;;;;;;;;;;;20357:9;:14;;;;;:26;;;;;;;;;;20337:146;;;;;;;;;;;;;;20357:26;;;;;20398:6;;20337:146;;;;;;;;:5;:146::i;:::-;20308:14;;;;;;;;:9;:14;;;;;;;;:26;;;;;;;;:175;;;;;;;;;;;20532:13;;;;;:8;:13;;;;;;;20512:131;;;;;;;;;;;;;;20532:13;;;;;20560:6;;20512:131;;;;;;;;:5;:131::i;:::-;20496:13;;;;;;;:8;:13;;;;;;;;:147;;;;;;;;;;;20703:9;:14;;;;;:26;;;;;;;;;;20683:144;;;;;;;;;;;;;;20703:26;;;;;20744:6;;20683:144;;;;;;;;:5;:144::i;:::-;20654:14;;;;;;;;:9;:14;;;;;;;;:26;;;;;;;;;;:173;;;;;;;;;;;;;;;;20843:26;;;;;;;;;;20862:6;;20843:26;;;;;;;;;;19568:1379;;;:::o;23418:222::-;23538:6;23568:5;;;23600:12;23592:6;;;;;;;;;23584:29;;;;;;;;;;;;;;;-1:-1:-1;23631:1:0;23418:222;-1:-1:-1;;;;23418:222:0:o;18369:591::-;18550:20;;;;;;;:9;:20;;;;;;;;:32;;;;;;;;;;18530:127;;;;;;;;;;;;;;;;;;;;;18550:32;;;;;18597:6;;18530:5;:127::i;:::-;18495:20;;;;;;;;:9;:20;;;;;;;;:32;;;;;;;;:162;;;;;;;;;;;18722:31;;;;;;;;;;18702:125;;;;;;;;;;;;;;;;;;;;;18722:31;;18768:6;;18702:5;:125::i;:::-;18668:20;;;;;;;;:9;:20;;;;;;;;:31;;;;;;;;;;;;;:159;;;;;;;;;;;;;;;;18845:49;;18668:31;;:20;18845:49;;18668:20;;18845:49;18907:45;18930:1;18934:9;18945:6;18907:14;:45::i;1519:508::-;1936:4;1982:17;2014:7;1519:508;:::o;6001:716::-;6048:15;;;;;;;;;;;;;;;;;;;;;;;:4;;:15;:::i;:::-;-1:-1:-1;6074:16:0;;;;;;;;;;;;;;;;;;;;;;;:6;;:16;:::i;:::-;-1:-1:-1;6101:8:0;:13;;;;6112:2;6101:13;;;6139:8;6125:11;:22;6173:7;6158:12;:22;6209:104;;;;;;;;;;;;;;;6191:15;:122;6346:109;;;;;;;;;;;;;6324:19;:131;6490:110;;;;;;;;;;;;;;;6466:134;;6611:5;:18;;;;6619:10;6611:18;;;6001:716::o;20955:1226::-;21094:6;21084:16;;:6;:16;;;;:31;;;;-1:-1:-1;21104:11:0;;;;;21084:31;21080:1094;;;21136:20;;;;21132:508;;21196:22;;;21177:16;21196:22;;;:14;:22;;;;;;;;;21256:14;:103;;21358:1;21256:103;;;21294:19;;;;;;;:11;:19;;;;;;;;21314:13;;;21294:34;;;;;;;;;:40;;;;;;21256:103;21237:122;;21378:16;21397:151;21425:9;21457:6;21397:151;;;;;;;;;;;;;;;;;:5;:151::i;:::-;21378:170;;21567:57;21584:6;21592:9;21603;21614;21567:16;:57::i;:::-;21132:508;;;;21660:20;;;;21656:507;;21720:22;;;21701:16;21720:22;;;:14;:22;;;;;;;;;21780:14;:103;;21882:1;21780:103;;;21818:19;;;;;;;:11;:19;;;;;;;;21838:13;;;21818:34;;;;;;;;;:40;;;;;;21780:103;21761:122;;21902:16;21921:150;21949:9;21981:6;21921:150;;;;;;;;;;;;;;;;;:5;:150::i;:::-;21902:169;;22090:57;22107:6;22115:9;22126;22137;22090:16;:57::i;:::-;21656:507;;;20955:1226;;;:::o;22189:813::-;22352:18;22373:114;22394:12;22373:114;;;;;;;;;;;;;;;;;:6;:114::i;:::-;22352:135;-1:-1:-1;22518:17:0;;;;;;;:99;;-1:-1:-1;22552:22:0;;;;;;;:11;:22;;;;;;;;:65;22575:16;;;22552:40;;;;;;;;;:50;:65;;;:50;;:65;22518:99;22500:426;;;22644:22;;;;;;;:11;:22;;;;;;;;22667:16;;;22644:40;;;;;;;;;:57;;;;;;;;;;;;22500:426;;;22773:82;;;;;;;;;;;;;;;;;;;;;;;;;22734:22;;;-1:-1:-1;22734:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22870:25;;;:14;:25;;;;;;;:44;;22734:121;22898:16;;22870:44;;;;;;;;;;;;;22500:426;22964:9;22943:51;;;22975:8;22985;22943:51;;;;;;;;;;;;;;;;22189:813;;;;;:::o;23010:196::-;23115:6;23158:12;23151:5;23147:9;;23139:32;;;;;;;;;;;;;;2256:21896;;;;;;;;;;-1:-1:-1;2256:21896:0;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2256:21896:0;;;;-1:-1:-1;2256:21896:0;;;;;;;;;;;;;;;5:130:-1;72:20;;97:33;72:20;97:33;;142:130;209:20;;234:33;209:20;234:33;;416:128;482:20;;507:32;482:20;507:32;;551:126;616:20;;641:31;616:20;641:31;;684:128;750:20;;775:32;750:20;775:32;;819:241;;923:2;911:9;902:7;898:23;894:32;891:2;;;939:1;936;929:12;891:2;974:1;991:53;1036:7;1016:9;991:53;;;981:63;885:175;-1:-1;;;;885:175;1067:366;;;1188:2;1176:9;1167:7;1163:23;1159:32;1156:2;;;1204:1;1201;1194:12;1156:2;1239:1;1256:53;1301:7;1281:9;1256:53;;;1246:63;;1218:97;1346:2;1364:53;1409:7;1400:6;1389:9;1385:22;1364:53;;;1354:63;;1325:98;1150:283;;;;;;1440:491;;;;1578:2;1566:9;1557:7;1553:23;1549:32;1546:2;;;1594:1;1591;1584:12;1546:2;1629:1;1646:53;1691:7;1671:9;1646:53;;;1636:63;;1608:97;1736:2;1754:53;1799:7;1790:6;1779:9;1775:22;1754:53;;;1744:63;;1715:98;1844:2;1862:53;1907:7;1898:6;1887:9;1883:22;1862:53;;;1852:63;;1823:98;1540:391;;;;;;1938:491;;;;2076:2;2064:9;2055:7;2051:23;2047:32;2044:2;;;2092:1;2089;2082:12;2044:2;2127:1;2144:53;2189:7;2169:9;2144:53;;;2134:63;;2106:97;2234:2;2252:53;2297:7;2288:6;2277:9;2273:22;2252:53;;;2242:63;;2213:98;2342:2;2360:53;2405:7;2396:6;2385:9;2381:22;2360:53;;2436:366;;;2557:2;2545:9;2536:7;2532:23;2528:32;2525:2;;;2573:1;2570;2563:12;2525:2;2608:1;2625:53;2670:7;2650:9;2625:53;;;2615:63;;2587:97;2715:2;2733:53;2778:7;2769:6;2758:9;2754:22;2733:53;;2809:989;;;;;;;;3012:3;3000:9;2991:7;2987:23;2983:33;2980:2;;;3029:1;3026;3019:12;2980:2;3064:1;3081:53;3126:7;3106:9;3081:53;;;3071:63;;3043:97;3171:2;3189:53;3234:7;3225:6;3214:9;3210:22;3189:53;;;3179:63;;3150:98;3279:2;3297:53;3342:7;3333:6;3322:9;3318:22;3297:53;;;3287:63;;3258:98;3387:2;3405:51;3448:7;3439:6;3428:9;3424:22;3405:51;;;3395:61;;3366:96;3493:3;3512:53;3557:7;3548:6;3537:9;3533:22;3512:53;;;3502:63;;3472:99;3602:3;3621:53;3666:7;3657:6;3646:9;3642:22;3621:53;;;3611:63;;3581:99;3711:3;3730:52;3774:7;3765:6;3754:9;3750:22;3730:52;;;3720:62;;3690:98;2974:824;;;;;;;;;;;3805:364;;;3925:2;3913:9;3904:7;3900:23;3896:32;3893:2;;;3941:1;3938;3931:12;3893:2;3976:1;3993:53;4038:7;4018:9;3993:53;;;3983:63;;3955:97;4083:2;4101:52;4145:7;4136:6;4125:9;4121:22;4101:52;;4176:364;;;4296:2;4284:9;4275:7;4271:23;4267:32;4264:2;;;4312:1;4309;4302:12;4264:2;4347:1;4364:53;4409:7;4389:9;4364:53;;;4354:63;;4326:97;4454:2;4472:52;4516:7;4507:6;4496:9;4492:22;4472:52;;4547:113;4630:24;4648:5;4630:24;;;4625:3;4618:37;4612:48;;;4667:104;4744:21;4759:5;4744:21;;4778:113;4861:24;4879:5;4861:24;;4898:152;4999:45;5019:24;5037:5;5019:24;;;4999:45;;5080:887;;5219:5;5213:12;5253:1;5242:9;5238:17;5266:1;5261:267;;;;5539:1;5534:427;;;;5231:730;;5261:267;5339:4;5335:1;5324:9;5320:17;5316:28;5358:88;5439:6;5434:3;5358:88;;;5480:9;5465:25;;5453:38;;5351:95;-1:-1;5505:16;;;-1:-1;5261:267;;5534:427;5603:1;5592:9;5588:17;5619:88;5700:6;5695:3;5619:88;;;5612:95;;5729:41;5764:5;5729:41;;;5786:1;5794:130;5808:6;5805:1;5802:13;5794:130;;;5867:14;;5854:11;;;5847:35;5914:1;5901:15;;;;5830:4;5823:12;5794:130;;;-1:-1;;5938:16;;;-1:-1;5231:730;;5189:778;;;;;;5975:347;;6087:39;6120:5;6087:39;;;6138:71;6202:6;6197:3;6138:71;;;6131:78;;6214:52;6259:6;6254:3;6247:4;6240:5;6236:16;6214:52;;;6287:29;6309:6;6287:29;;;6278:39;;;;6067:255;-1:-1;;;6067:255;6676:398;;6836:67;6900:2;6895:3;6836:67;;;6936:34;6916:55;;7005:31;7000:2;6991:12;;6984:53;7065:2;7056:12;;6822:252;-1:-1;;6822:252;7083:483;;7261:85;7343:2;7338:3;7261:85;;;7379:34;7359:55;;7448:34;7443:2;7434:12;;7427:56;7517:11;7512:2;7503:12;;7496:33;7557:2;7548:12;;7247:319;-1:-1;;7247:319;7575:398;;7753:84;7835:1;7830:3;7753:84;;;7870:66;7850:87;;7965:1;7956:11;;7739:234;-1:-1;;7739:234;7982:455;;8142:67;8206:2;8201:3;8142:67;;;8242:34;8222:55;;8311:34;8306:2;8297:12;;8290:56;8380:19;8375:2;8366:12;;8359:41;8428:2;8419:12;;8128:309;-1:-1;;8128:309;8446:386;;8606:67;8670:2;8665:3;8606:67;;;8706:34;8686:55;;8775:19;8770:2;8761:12;;8754:41;8823:2;8814:12;;8592:240;-1:-1;;8592:240;8841:377;;9001:67;9065:2;9060:3;9001:67;;;9101:34;9081:55;;9170:10;9165:2;9156:12;;9149:32;9209:2;9200:12;;8987:231;-1:-1;;8987:231;9227:532;;9387:68;9451:3;9446;9387:68;;;9488:34;9468:55;;9557:34;9552:2;9543:12;;9536:56;9626:34;9621:2;9612:12;;9605:56;9695:25;9690:2;9681:12;;9674:47;9749:3;9740:13;;9373:386;-1:-1;;9373:386;9768:477;;9946:85;10028:2;10023:3;9946:85;;;10064:34;10044:55;;10133:34;10128:2;10119:12;;10112:56;10202:5;10197:2;10188:12;;10181:27;10236:2;10227:12;;9932:313;-1:-1;;9932:313;10254:376;;10414:67;10478:2;10473:3;10414:67;;;10514:34;10494:55;;10583:9;10578:2;10569:12;;10562:31;10621:2;10612:12;;10400:230;-1:-1;;10400:230;10639:376;;10799:67;10863:2;10858:3;10799:67;;;10899:34;10879:55;;10968:9;10963:2;10954:12;;10947:31;11006:2;10997:12;;10785:230;-1:-1;;10785:230;11024:383;;11184:67;11248:2;11243:3;11184:67;;;11284:34;11264:55;;11353:16;11348:2;11339:12;;11332:38;11398:2;11389:12;;11170:237;-1:-1;;11170:237;11416:396;;11576:67;11640:2;11635:3;11576:67;;;11676:34;11656:55;;11745:29;11740:2;11731:12;;11724:51;11803:2;11794:12;;11562:250;-1:-1;;11562:250;11821:374;;11981:67;12045:2;12040:3;11981:67;;;12081:34;12061:55;;12150:7;12145:2;12136:12;;12129:29;12186:2;12177:12;;11967:228;-1:-1;;11967:228;12204:372;;12364:67;12428:2;12423:3;12364:67;;;12464:34;12444:55;;12533:5;12528:2;12519:12;;12512:27;12567:2;12558:12;;12350:226;-1:-1;;12350:226;12585:378;;12745:67;12809:2;12804:3;12745:67;;;12845:34;12825:55;;12914:11;12909:2;12900:12;;12893:33;12954:2;12945:12;;12731:232;-1:-1;;12731:232;12972:482;;13150:85;13232:2;13227:3;13150:85;;;13268:34;13248:55;;13337:34;13332:2;13323:12;;13316:56;13406:10;13401:2;13392:12;;13385:32;13445:2;13436:12;;13136:318;-1:-1;;13136:318;13463:378;;13623:67;13687:2;13682:3;13623:67;;;13723:34;13703:55;;13792:11;13787:2;13778:12;;13771:33;13832:2;13823:12;;13609:232;-1:-1;;13609:232;13969:110;14050:23;14067:5;14050:23;;14086:107;14165:22;14181:5;14165:22;;14200:124;14282:36;14312:5;14282:36;;14331:110;14412:23;14429:5;14412:23;;14448:264;;14593:94;14683:3;14674:6;14593:94;;14719:372;;14918:148;15062:3;14918:148;;15098:650;;15353:148;15497:3;15353:148;;;15346:155;;15512:75;15583:3;15574:6;15512:75;;;15609:2;15604:3;15600:12;15593:19;;15623:75;15694:3;15685:6;15623:75;;;-1:-1;15720:2;15711:12;;15334:414;-1:-1;;15334:414;15755:372;;15954:148;16098:3;15954:148;;16134:372;;16333:148;16477:3;16333:148;;16513:213;16631:2;16616:18;;16645:71;16620:9;16689:6;16645:71;;16733:201;16845:2;16830:18;;16859:65;16834:9;16897:6;16859:65;;16941:213;17059:2;17044:18;;17073:71;17048:9;17117:6;17073:71;;17161:655;17389:3;17374:19;;17404:71;17378:9;17448:6;17404:71;;;17486:72;17554:2;17543:9;17539:18;17530:6;17486:72;;;17569;17637:2;17626:9;17622:18;17613:6;17569:72;;;17652;17720:2;17709:9;17705:18;17696:6;17652:72;;;17735:71;17801:3;17790:9;17786:19;17777:6;17735:71;;;17360:456;;;;;;;;;17823:547;18025:3;18010:19;;18040:71;18014:9;18084:6;18040:71;;;18122:72;18190:2;18179:9;18175:18;18166:6;18122:72;;;18205;18273:2;18262:9;18258:18;18249:6;18205:72;;;18288;18356:2;18345:9;18341:18;18332:6;18288:72;;;17996:374;;;;;;;;18377:539;18575:3;18560:19;;18590:71;18564:9;18634:6;18590:71;;;18672:68;18736:2;18725:9;18721:18;18712:6;18672:68;;;18751:72;18819:2;18808:9;18804:18;18795:6;18751:72;;;18834;18902:2;18891:9;18887:18;18878:6;18834:72;;18923:293;19057:2;19071:47;;;19042:18;;19132:74;19042:18;19192:6;19132:74;;19531:407;19722:2;19736:47;;;19707:18;;19797:131;19707:18;19797:131;;19945:407;20136:2;20150:47;;;20121:18;;20211:131;20121:18;20211:131;;20359:407;20550:2;20564:47;;;20535:18;;20625:131;20535:18;20625:131;;20773:407;20964:2;20978:47;;;20949:18;;21039:131;20949:18;21039:131;;21187:407;21378:2;21392:47;;;21363:18;;21453:131;21363:18;21453:131;;21601:407;21792:2;21806:47;;;21777:18;;21867:131;21777:18;21867:131;;22015:407;22206:2;22220:47;;;22191:18;;22281:131;22191:18;22281:131;;22429:407;22620:2;22634:47;;;22605:18;;22695:131;22605:18;22695:131;;22843:407;23034:2;23048:47;;;23019:18;;23109:131;23019:18;23109:131;;23257:407;23448:2;23462:47;;;23433:18;;23523:131;23433:18;23523:131;;23671:407;23862:2;23876:47;;;23847:18;;23937:131;23847:18;23937:131;;24085:407;24276:2;24290:47;;;24261:18;;24351:131;24261:18;24351:131;;24499:407;24690:2;24704:47;;;24675:18;;24765:131;24675:18;24765:131;;25133:209;25249:2;25234:18;;25263:69;25238:9;25305:6;25263:69;;25349:316;25491:2;25476:18;;25505:69;25480:9;25547:6;25505:69;;;25585:70;25651:2;25640:9;25636:18;25627:6;25585:70;;25672:205;25786:2;25771:18;;25800:67;25775:9;25840:6;25800:67;;25884:211;26001:2;25986:18;;26015:70;25990:9;26058:6;26015:70;;26102:209;26218:2;26203:18;;26232:69;26207:9;26274:6;26232:69;;26318:320;26462:2;26447:18;;26476:70;26451:9;26519:6;26476:70;;;26557:71;26624:2;26613:9;26609:18;26600:6;26557:71;;26645:161;;26743:14;;;26785:4;26772:18;;;26702:104;26813:118;26897:12;;26868:63;27068:144;27203:3;27181:31;-1:-1;27181:31;27221:163;27324:19;;;27373:4;27364:14;;27317:67;27546:91;;27608:24;27626:5;27608:24;;27644:85;27710:13;27703:21;;27686:43;27815:121;27888:42;27877:54;;27860:76;28022:88;28094:10;28083:22;;28066:44;28117:81;28188:4;28177:16;;28160:38;28205:104;28277:26;28266:38;;28249:60;28316:106;;28394:23;28411:5;28394:23;;28430:268;28495:1;28502:101;28516:6;28513:1;28510:13;28502:101;;;28583:11;;;28577:18;28564:11;;;28557:39;28538:2;28531:10;28502:101;;;28618:6;28615:1;28612:13;28609:2;;;-1:-1;;28683:1;28665:16;;28658:27;28479:219;28787:97;28875:2;28855:14;28871:7;28851:28;;28835:49;28892:117;28961:24;28979:5;28961:24;;;28954:5;28951:35;28941:2;;29000:1;28997;28990:12;28941:2;28935:74;;29016:117;29085:24;29103:5;29085:24;;29264:115;29332:23;29349:5;29332:23;;29386:113;29453:22;29469:5;29453:22;;29506:115;29574:23;29591:5;29574:23;

Swarm Source

bzzr://a12f202568486b19f84f7eebc8bc0d17e856d8f1523a4a22bf1e874952ef7f18
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.