ETH Price: $3,351.95 (-3.51%)

Contract

0x0b1F6ACaB2BFB0b72d61c7BE8455f0D5F72c617C
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve167635442023-03-05 17:00:59662 days ago1678035659IN
0x0b1F6ACa...5F72c617C
0 ETH0.000583323.44666956
Approve149568342022-06-13 16:03:58927 days ago1655136238IN
0x0b1F6ACa...5F72c617C
0 ETH0.00697481148.9135752
Approve149568262022-06-13 16:01:21927 days ago1655136081IN
0x0b1F6ACa...5F72c617C
0 ETH0.00690276147.33766959

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
214623252024-12-23 2:51:593 days ago1734922319
0x0b1F6ACa...5F72c617C
0 ETH
214623252024-12-23 2:51:593 days ago1734922319
0x0b1F6ACa...5F72c617C
0 ETH
214623202024-12-23 2:50:593 days ago1734922259
0x0b1F6ACa...5F72c617C
0 ETH
214487002024-12-21 5:09:235 days ago1734757763
0x0b1F6ACa...5F72c617C
0 ETH
214487002024-12-21 5:09:235 days ago1734757763
0x0b1F6ACa...5F72c617C
0 ETH
214431432024-12-20 10:29:596 days ago1734690599
0x0b1F6ACa...5F72c617C
0 ETH
214366142024-12-19 12:38:117 days ago1734611891
0x0b1F6ACa...5F72c617C
0 ETH
214366142024-12-19 12:38:117 days ago1734611891
0x0b1F6ACa...5F72c617C
0 ETH
214366052024-12-19 12:36:237 days ago1734611783
0x0b1F6ACa...5F72c617C
0 ETH
214366052024-12-19 12:36:237 days ago1734611783
0x0b1F6ACa...5F72c617C
0 ETH
214343562024-12-19 5:03:237 days ago1734584603
0x0b1F6ACa...5F72c617C
0 ETH
214343522024-12-19 5:02:357 days ago1734584555
0x0b1F6ACa...5F72c617C
0 ETH
214343482024-12-19 5:01:477 days ago1734584507
0x0b1F6ACa...5F72c617C
0 ETH
214158532024-12-16 15:03:3510 days ago1734361415
0x0b1F6ACa...5F72c617C
0 ETH
213938022024-12-13 13:10:4713 days ago1734095447
0x0b1F6ACa...5F72c617C
0 ETH
213597992024-12-08 19:15:2318 days ago1733685323
0x0b1F6ACa...5F72c617C
0 ETH
213597992024-12-08 19:15:2318 days ago1733685323
0x0b1F6ACa...5F72c617C
0 ETH
213587692024-12-08 15:48:3518 days ago1733672915
0x0b1F6ACa...5F72c617C
0 ETH
213587692024-12-08 15:48:3518 days ago1733672915
0x0b1F6ACa...5F72c617C
0 ETH
213353992024-12-05 9:28:2321 days ago1733390903
0x0b1F6ACa...5F72c617C
0 ETH
213353992024-12-05 9:28:2321 days ago1733390903
0x0b1F6ACa...5F72c617C
0 ETH
213353822024-12-05 9:24:5921 days ago1733390699
0x0b1F6ACa...5F72c617C
0 ETH
213353682024-12-05 9:22:1121 days ago1733390531
0x0b1F6ACa...5F72c617C
0 ETH
213353212024-12-05 9:12:4721 days ago1733389967
0x0b1F6ACa...5F72c617C
0 ETH
213353212024-12-05 9:12:4721 days ago1733389967
0x0b1F6ACa...5F72c617C
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MPondLogic

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 1000000 runs

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

pragma solidity 0.5.17;
pragma experimental ABIEncoderV2;

/**
 * @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;
}


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 removeWhiteListAddress(address _address)
        external
        onlyAdmin("Only admin can remove from whitelist")
        returns (bool)
    {
        isWhiteListed[_address] = false;
        return true;
    }

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

    function disableAllTransfers()
        external
        onlyAdmin("Only admin can disable all transfers")
        returns (bool)
    {
        enableAllTranfers = false;
        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 (
            enableAllTranfers ||
            isWhiteListed[_address1] ||
            isWhiteListed[_address2]
        ) {
            return true;
        } else if (_address1 == dropBridge) {
            return true;
        }
        return false;
    }

    /**
     * @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(src, 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":false,"inputs":[],"name":"disableAllTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","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":false,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeWhiteListAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","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"}]

608060405234801561001057600080fd5b50613ec2806100206000396000f3fe608060405234801561001057600080fd5b506004361061025c5760003560e01c806395d89b4111610145578063ce114c25116100bd578063e7a324dc1161008c578063f425859211610071578063f4258592146104c2578063f851a440146104d5578063fd71d86a146104ea5761025c565b8063e7a324dc14610499578063f1127ed8146104a15761025c565b8063ce114c251461044d578063dd62ed3e14610460578063e1032b8314610473578063e5843242146104865761025c565b8063b4b5ea5711610114578063c0c53b8b116100f9578063c0c53b8b1461042a578063c43ff0c81461043d578063c6d6125e146104455761025c565b8063b4b5ea571461040f578063b9371343146104225761025c565b806395d89b41146103ce578063a457c2d7146103d6578063a65835da146103e9578063a9059cbb146103fc5761025c565b806367cb1601116101d857806370a08231116101a75780637ecebe001161018c5780637ecebe00146103955780638164c309146103a85780638b41166c146103bb5761025c565b806370a0823114610362578063782d6fe1146103755761025c565b806367cb1601146103145780636ab5cc381461031c5780636f9170f61461032f5780636fcfff45146103425761025c565b806318160ddd1161022f57806323b872dd1161021457806323b872dd146102d9578063313ce567146102ec57806339509351146103015761025c565b806318160ddd146102c957806320606b70146102d15761025c565b806302cb3a881461026157806306fdde0314610276578063095ea7b31461029457806316aeac20146102b4575b600080fd5b61027461026f366004612e58565b6104f2565b005b61027e610724565b60405161028b91906138db565b60405180910390f35b6102a76102a2366004612e28565b6107d0565b60405161028b9190613800565b6102bc6108f5565b60405161028b919061380e565b6102bc6108fb565b6102bc610901565b6102a76102e7366004612de5565b610907565b6102f4610aeb565b60405161028b91906139e5565b6102a761030f366004612e28565b610af4565b6102a7610c6d565b6102a761032a366004612d5e565b610d12565b6102a761033d366004612d38565b610dbc565b610355610350366004612d38565b610dd1565b60405161028b91906139bc565b6102bc610370366004612d38565b610de9565b610388610383366004612e28565b610e1f565b60405161028b9190613a01565b6102bc6103a3366004612d38565b611101565b6102a76103b6366004612d38565b611113565b6102746103c9366004612f24565b6111f5565b61027e611204565b6102a76103e4366004612e28565b61127d565b6102746103f7366004612e58565b611359565b6102a761040a366004612e28565b611575565b61038861041d366004612d38565b6115f2565b6102bc6116a0565b610274610438366004612d98565b6116a6565b6102a7611a44565b6102a7611a4d565b6102a761045b366004612d38565b611aec565b6102bc61046e366004612d5e565b611bad565b610274610481366004612f24565b611bf3565b610388610494366004612d5e565b611bfe565b6102bc611c29565b6104b46104af366004612ef4565b611c2f565b60405161028b9291906139ca565b6102746104d0366004612d38565b611c6a565b6104dd611d20565b60405161028b91906137f2565b6104dd611d3c565b6000603e5460336040516105069190613794565b6040518091039020610516611d58565b3060405160200161052a9493929190613868565b60405160208183030381529060405280519060200120905060006040548989898660405160200161055f95949392919061381c565b6040516020818303038152906040528051906020012090506000828260405160200161058c9291906137ab565b6040516020818303038152906040528051906020012090506000600182898989604051600081526020016040526040516105c994939291906138a6565b6020604051602081039080840390855afa1580156105eb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661066c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061391c565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526041602052604090208054600181019091558a146106d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061395c565b8842111561070c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061392c565b610717818c87611d5d565b5050505050505050505050565b6033805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107c85780601f1061079d576101008083540402835291602001916107c8565b820191906000526020600020905b8154815290600101906020018083116107ab57829003601f168201915b505050505081565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561082257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610847565b61084483604051806060016040528060268152602001613cbf60269139611f41565b90505b33600081815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff891680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108e19085906139f3565b60405180910390a360019150505b92915050565b60405481565b60365481565b603e5481565b60006109138484610d12565b610949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061390c565b73ffffffffffffffffffffffffffffffffffffffff841660009081526039602090815260408083203380855290835281842054825160608101909352602680845291946bffffffffffffffffffffffff9091169390926109b1928892613cbf90830139611f41565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156109fd57506bffffffffffffffffffffffff82811614155b15610ad1576000610a2783836040518060600160405280603e8152602001613c25603e9139611f93565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152603960209081526040808320948a16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff86161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ac79085906139f3565b60405180910390a3505b610adc878783611ff6565b600193505050505b9392505050565b60355460ff1681565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610b4657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b6b565b610b68836040518060600160405280602b8152602001613baf602b9139611f41565b90505b33600090815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452825291829020548251606081019093526032808452610bd0936bffffffffffffffffffffffff9092169285929190613d0d908301396123e5565b33600081815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9586161790819055915190937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925926108e1929116906139f3565b6000604051806060016040528060238152602001613e0b60239139604254819073ffffffffffffffffffffffffffffffffffffffff163314610cdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50604480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591505b5090565b60445460009060ff1680610d4b575073ffffffffffffffffffffffffffffffffffffffff831660009081526043602052604090205460ff165b80610d7b575073ffffffffffffffffffffffffffffffffffffffff821660009081526043602052604090205460ff165b15610d88575060016108ef565b60385473ffffffffffffffffffffffffffffffffffffffff84811691161415610db3575060016108ef565b50600092915050565b60436020526000908152604090205460ff1681565b603d6020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff166000908152603a60205260409020546bffffffffffffffffffffffff1690565b6000438210610e5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061396c565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603d602052604090205463ffffffff1680610e955760009150506108ef565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860181168552925290912054168310610f6d5773ffffffffffffffffffffffffffffffffffffffff84166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff168352929052205464010000000090046bffffffffffffffffffffffff1690506108ef565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c6020908152604080832083805290915290205463ffffffff16831015610fb55760009150506108ef565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff1611156110a957600282820363ffffffff16048103611005612c5c565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603c6020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff169181019190915290871415611084576020015194506108ef9350505050565b805163ffffffff1687111561109b578193506110a2565b6001820392505b5050610fdb565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603c6020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60416020526000908152604090205481565b60408051808201909152601881527f4f6e6c792061646d696e2063616e2077686974656c6973740000000000000000602082015260425460009190819073ffffffffffffffffffffffffffffffffffffffff16331461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50505073ffffffffffffffffffffffffffffffffffffffff16600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915590565b611200338383612440565b5050565b6034805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107c85780601f1061079d576101008083540402835291602001916107c8565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156112cf57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6112f4565b6112f1836040518060600160405280602d8152602001613d72602d9139611f41565b90505b33600090815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452825291829020548251606081019093526033808452610bd0936bffffffffffffffffffffffff9092169285929190613d3f90830139611f93565b6000603e54603360405161136d9190613794565b604051809103902061137d611d58565b306040516020016113919493929190613868565b6040516020818303038152906040528051906020012090506000603f54898989866040516020016113c695949392919061381c565b604051602081830303815290604052805190602001209050600082826040516020016113f39291906137ab565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161143094939291906138a6565b6020604051602081039080840390855afa158015611452573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061398c565b73ffffffffffffffffffffffffffffffffffffffff811660009081526041602052604090208054600181019091558a14611530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061393c565b8842111561156a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061399c565b610717818c87612440565b60006115813384610d12565b6115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061390c565b60006115db83604051806060016040528060278152602001613bfe60279139611f41565b90506115e8338583611ff6565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603d602052604081205463ffffffff168061162a576000610ae4565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff169392505050565b60375481565b600054610100900460ff16806116bf57506116bf61261d565b806116cd575060005460ff16155b611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061394c565b600054610100900460ff1615801561176957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611771612623565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610663906138ec565b6037805473ffffffffffffffffffffffffffffffffffffffff85166000818152603a6020908152604080832080546bffffffffffffffffffffffff9687167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000918216179091558654603b845282852085805284528285208054919097169116179094558282526043905282812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055925491519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916118c0919061380e565b60405180910390a360006118f16036546037546040518060600160405280602e8152602001613b81602e9139611f93565b73ffffffffffffffffffffffffffffffffffffffff8681166000818152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166bffffffffffffffffffffffff8916908117909255603b84528285208580528452828520805490911682179055848452604390925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055603880547fffffffffffffffffffffffff000000000000000000000000000000000000000016958a16959095179094559251939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611a06919061380e565b60405180910390a3508015611a3e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50505050565b60445460ff1681565b6000604051806060016040528060248152602001613bda60249139604254819073ffffffffffffffffffffffffffffffffffffffff163314611abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b5050604480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550600190565b6000604051806060016040528060248152602001613b2c60249139604254819073ffffffffffffffffffffffffffffffffffffffff163314611b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50505073ffffffffffffffffffffffffffffffffffffffff16600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600190565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526039602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b611200338383611d5d565b603b6020908152600092835260408084209091529082529020546bffffffffffffffffffffffff1681565b603f5481565b603c60209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b604051806060016040528060218152602001613e5f60219139604254819073ffffffffffffffffffffffffffffffffffffffff163314611cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b5050603880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60425473ffffffffffffffffffffffffffffffffffffffff1681565b60385473ffffffffffffffffffffffffffffffffffffffff1681565b465b90565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152603b60209081526040808320938616835292815290829020548251808401909352601c83527f4d506f6e643a20756e64656c65676174657320756e646572666c6f770000000091830191909152611de3916bffffffffffffffffffffffff909116908390611f93565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320938716835292815282822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95861617905581805290829020548251808401909352601a83527f4d506f6e643a2064656c65676174657320756e646572666c6f7700000000000091830191909152611e9792169083906123e5565b73ffffffffffffffffffffffffffffffffffffffff8481166000818152603b6020908152604080832083805290915280822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff96909616959095179094559251918516917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908490a4611f3c82600083612763565b505050565b6000816c010000000000000000000000008410611f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611fee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316612043576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610663906139ac565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603b602090815260408083208380529091529020546bffffffffffffffffffffffff808316911610156120be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610663906138fc565b73ffffffffffffffffffffffffffffffffffffffff821661210b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061397c565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603a6020908152604091829020548251606081019093526037808452612168936bffffffffffffffffffffffff9092169285929190613dd490830139611f93565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff958616179055603b82528083208380528252918290205482516060810190935260338084526122009491909116928592909190613c8c90830139611f93565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9687161790559286168252603a81529082902054825160608101909352603180845261229e9491909116928592909190613b50908301396123e5565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff958616179055603b82528083208380528252918290205482516060810190935260318084526123369491909116928592909190613e2e908301396123e5565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152603b602090815260408083208380529091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123d89085906139f3565b60405180910390a3505050565b6000838301826bffffffffffffffffffffffff8087169083161015612437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603b60209081526040808320838052825291829020548251808401909352601a83527f4d506f6e643a2064656c65676174657320756e646572666c6f77000000000000918301919091526124c2916bffffffffffffffffffffffff909116908390611f93565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251808401909352601983527f4d506f6e643a2064656c656761746573206f766572666c6f77000000000000009183019190915261257592169083906123e5565b73ffffffffffffffffffffffffffffffffffffffff8481166000818152603b602090815260408083209488168084529490915280822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff969096169590951790945592519192917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908390a4611f3c60008383612763565b303b1590565b6040805180820190915260068082527f4d61726c696e0000000000000000000000000000000000000000000000000000602090920191825261266791603391612c73565b506040805180820190915260058082527f4d506f6e6400000000000000000000000000000000000000000000000000000060209092019182526126ac91603491612c73565b50603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016601217905569021e19e0c9bab240000060365569017b7883c06916600000603755604051612700906137dc565b604051908190038120603e55612715906137e7565b604051908190038120603f5561272a906137a0565b60408051918290039091209055604280547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127ac57506bffffffffffffffffffffffff811615155b15611f3c5773ffffffffffffffffffffffffffffffffffffffff8316156128af5773ffffffffffffffffffffffffffffffffffffffff83166000908152603d602052604081205463ffffffff169081612806576000612876565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061289d8285604051806060016040528060298152602001613c6360299139611f93565b90506128ab868484846129b1565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611f3c5773ffffffffffffffffffffffffffffffffffffffff82166000908152603d602052604081205463ffffffff169081612904576000612974565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061299b8285604051806060016040528060288152602001613ce5602891396123e5565b90506129a9858484846129b1565b505050505050565b60006129d543604051806060016040528060358152602001613d9f60359139612c1a565b905063ffffffff841615801590612a48575073ffffffffffffffffffffffffffffffffffffffff85166000908152603c6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b15612ae75773ffffffffffffffffffffffffffffffffffffffff85166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880163ffffffff168452909152902080547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff166401000000006bffffffffffffffffffffffff851602179055612bc3565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000818152603c83528781208c871682528352878120965187549451909516640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9587167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000958616179590951694909417909555938252603d90935292909220805460018801909316929091169190911790555b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612c0b929190613a0f565b60405180910390a25050505050565b6000816401000000008410611f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b604080518082019091526000808252602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612cb457805160ff1916838001178555612ce1565b82800160010185558215612ce1579182015b82811115612ce1578251825591602001919060010190612cc6565b50610d0e92611d5a9250905b80821115610d0e5760008155600101612ced565b80356108ef81613af0565b80356108ef81613b07565b80356108ef81613b10565b80356108ef81613b19565b80356108ef81613b22565b600060208284031215612d4a57600080fd5b6000612d568484612d01565b949350505050565b60008060408385031215612d7157600080fd5b6000612d7d8585612d01565b9250506020612d8e85828601612d01565b9150509250929050565b600080600060608486031215612dad57600080fd5b6000612db98686612d01565b9350506020612dca86828701612d01565b9250506040612ddb86828701612d01565b9150509250925092565b600080600060608486031215612dfa57600080fd5b6000612e068686612d01565b9350506020612e1786828701612d01565b9250506040612ddb86828701612d0c565b60008060408385031215612e3b57600080fd5b6000612e478585612d01565b9250506020612d8e85828601612d0c565b600080600080600080600060e0888a031215612e7357600080fd5b6000612e7f8a8a612d01565b9750506020612e908a828b01612d0c565b9650506040612ea18a828b01612d0c565b9550506060612eb28a828b01612d22565b9450506080612ec38a828b01612d0c565b93505060a0612ed48a828b01612d0c565b92505060c0612ee58a828b01612d2d565b91505092959891949750929550565b60008060408385031215612f0757600080fd5b6000612f138585612d01565b9250506020612d8e85828601612d17565b60008060408385031215612f3757600080fd5b6000612f438585612d01565b9250506020612d8e85828601612d2d565b612f5d81613a48565b82525050565b612f5d81613a53565b612f5d81611d5a565b612f5d612f8182611d5a565b611d5a565b600081546001811660008114612fa35760018114612fe457613023565b607f6002830416612fb48187613a3a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168152955085019250613023565b60028204612ff28187613a3a565b9550612ffd85613a2a565b60005b8281101561301c57815488820152600190910190602001613000565b5050850192505b505092915050565b600061303682613a36565b6130408185613a3f565b9350613050818560208601613a9c565b61305981613ac8565b9093019392505050565b6000613070604983613a3a565b7f556e656c65676174696f6e28616464726573732064656c6567617465652c756981527f6e74323536206e6f6e63652c75696e74323536206578706972792c75696e743960208201527f3620616d6f756e74290000000000000000000000000000000000000000000000604082015260490192915050565b60006130f5600283613a3a565b7f1901000000000000000000000000000000000000000000000000000000000000815260020192915050565b600061312e603183613a3f565b7f42726964676520616e64206163636f756e742073686f756c64206e6f7420626581527f207468652073616d652061646472657373000000000000000000000000000000602082015260400192915050565b600061318d605183613a3f565b7f4d506f6e643a205f7472616e73666572546f6b656e733a20756e64656c65676181527f74656420616d6f756e742073686f756c6420626520677265617465722074686160208201527f6e207472616e7366657220616d6f756e74000000000000000000000000000000604082015260600192915050565b6000613212607783613a3f565b7f41746c65617374206f6e65206f6620746865206164647265737320287372632081527f6f7220647374292073686f756c642062652077686974656c6973746564206f7260208201527f20616c6c207472616e7366657273206d75737420626520656e61626c6564207660408201527f696120656e61626c65416c6c5472616e73666572732829000000000000000000606082015260800192915050565b60006132bd604383613a3a565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201527f6374290000000000000000000000000000000000000000000000000000000000604082015260430192915050565b6000613342602983613a3f565b7f4d506f6e643a3a756e64656c656761746542795369673a20696e76616c69642081527f7369676e61747572650000000000000000000000000000000000000000000000602082015260400192915050565b60006133a1602983613a3f565b7f4d506f6e643a3a756e64656c656761746542795369673a207369676e6174757281527f6520657870697265640000000000000000000000000000000000000000000000602082015260400192915050565b6000613400602383613a3f565b7f4d506f6e643a3a64656c656761746542795369673a20696e76616c6964206e6f81527f6e63650000000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061345f602e83613a3f565b7f436f6e747261637420696e7374616e63652068617320616c726561647920626581527f656e20696e697469616c697a6564000000000000000000000000000000000000602082015260400192915050565b60006134be602583613a3f565b7f4d506f6e643a3a756e64656c656761746542795369673a20696e76616c69642081527f6e6f6e6365000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061351d602883613a3f565b7f4d506f6e643a3a6765745072696f72566f7465733a206e6f742079657420646581527f7465726d696e6564000000000000000000000000000000000000000000000000602082015260400192915050565b600061357c603b83613a3f565b7f4d506f6e643a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e7366657220746f20746865207a65726f20616464726573730000000000602082015260400192915050565b60006135db602783613a3f565b7f4d506f6e643a3a64656c656761746542795369673a20696e76616c696420736981527f676e617475726500000000000000000000000000000000000000000000000000602082015260400192915050565b600061363a602783613a3f565b7f4d506f6e643a3a64656c656761746542795369673a207369676e61747572652081527f6578706972656400000000000000000000000000000000000000000000000000602082015260400192915050565b6000613699604883613a3a565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e74323536206578706972792c75696e74393660208201527f20616d6f756e7429000000000000000000000000000000000000000000000000604082015260480192915050565b600061371e603d83613a3f565b7f4d506f6e643a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e736665722066726f6d20746865207a65726f2061646472657373000000602082015260400192915050565b612f5d81613a71565b612f5d81613a7a565b612f5d81613a91565b612f5d81613a80565b6000610ae48284612f86565b60006108ef82613063565b60006137b6826130e8565b91506137c28285612f75565b6020820191506137d28284612f75565b5060200192915050565b60006108ef826132b0565b60006108ef8261368c565b602081016108ef8284612f54565b602081016108ef8284612f63565b602081016108ef8284612f6c565b60a0810161382a8288612f6c565b6138376020830187612f54565b6138446040830186612f6c565b6138516060830185612f6c565b61385e608083018461378b565b9695505050505050565b608081016138768287612f6c565b6138836020830186612f6c565b6138906040830185612f6c565b61389d6060830184612f54565b95945050505050565b608081016138b48287612f6c565b6138c16020830186613779565b6138ce6040830185612f6c565b61389d6060830184612f6c565b60208082528101610ae4818461302b565b602080825281016108ef81613121565b602080825281016108ef81613180565b602080825281016108ef81613205565b602080825281016108ef81613335565b602080825281016108ef81613394565b602080825281016108ef816133f3565b602080825281016108ef81613452565b602080825281016108ef816134b1565b602080825281016108ef81613510565b602080825281016108ef8161356f565b602080825281016108ef816135ce565b602080825281016108ef8161362d565b602080825281016108ef81613711565b602081016108ef8284613770565b604081016139d88285613770565b610ae4602083018461378b565b602081016108ef8284613779565b602081016108ef8284613782565b602081016108ef828461378b565b60408101613a1d8285613782565b610ae46020830184613782565b60009081526020902090565b5190565b919050565b90815260200190565b60006108ef82613a58565b151590565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b60006108ef82613a80565b60005b83811015613ab7578181015183820152602001613a9f565b83811115611a3e5750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b613af981613a48565b8114613b0457600080fd5b50565b613af981611d5a565b613af981613a71565b613af981613a7a565b613af981613a8056fe4f6e6c792061646d696e2063616e2072656d6f76652066726f6d2077686974656c6973744d506f6e643a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f77734d506f6e643a205375627472616374696f6e206f766572666c6f7720696e2074686520636f6e7374727563746f724d506f6e643a3a617070726f76653a206164646564416d6f756e74206578636565647320393620626974734f6e6c792061646d696e2063616e2064697361626c6520616c6c207472616e73666572734d506f6e643a3a7472616e736665723a20616d6f756e74206578636565647320393620626974734d506f6e643a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63654d506f6e643a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f77734d506f6e643a205f7472616e666572546f6b656e733a20756e64656c6567617465207375627472616374696f6e206572726f724d506f6e643a3a617070726f76653a20616d6f756e74206578636565647320393620626974734d506f6e643a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f77734d506f6e643a20696e637265617365416c6c6f77616e636520616c6c6f77616e63652076616c7565206f766572666c6f77734d506f6e643a206465637265617365416c6c6f77616e636520616c6c6f77616e63652076616c756520756e646572666c6f77734d506f6e643a3a617070726f76653a2072656d6f766564416d6f756e74206578636565647320393620626974734d506f6e643a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974734d506f6e643a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63654f6e6c792061646d696e2063616e20656e61626c6520616c6c207472616e73666572734d506f6e643a205f7472616e73666572546f6b656e733a20756e64656c6567617465206164646974696f6e206572726f724f6e6c792061646d696e2063616e206368616e67652064726f7020627269646765a365627a7a72315820599593199e7d3a76e2ec82ded5c7ec0030415564fd289d2b9e8e59c5e9e8bc9b6c6578706572696d656e74616cf564736f6c63430005110040

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061025c5760003560e01c806395d89b4111610145578063ce114c25116100bd578063e7a324dc1161008c578063f425859211610071578063f4258592146104c2578063f851a440146104d5578063fd71d86a146104ea5761025c565b8063e7a324dc14610499578063f1127ed8146104a15761025c565b8063ce114c251461044d578063dd62ed3e14610460578063e1032b8314610473578063e5843242146104865761025c565b8063b4b5ea5711610114578063c0c53b8b116100f9578063c0c53b8b1461042a578063c43ff0c81461043d578063c6d6125e146104455761025c565b8063b4b5ea571461040f578063b9371343146104225761025c565b806395d89b41146103ce578063a457c2d7146103d6578063a65835da146103e9578063a9059cbb146103fc5761025c565b806367cb1601116101d857806370a08231116101a75780637ecebe001161018c5780637ecebe00146103955780638164c309146103a85780638b41166c146103bb5761025c565b806370a0823114610362578063782d6fe1146103755761025c565b806367cb1601146103145780636ab5cc381461031c5780636f9170f61461032f5780636fcfff45146103425761025c565b806318160ddd1161022f57806323b872dd1161021457806323b872dd146102d9578063313ce567146102ec57806339509351146103015761025c565b806318160ddd146102c957806320606b70146102d15761025c565b806302cb3a881461026157806306fdde0314610276578063095ea7b31461029457806316aeac20146102b4575b600080fd5b61027461026f366004612e58565b6104f2565b005b61027e610724565b60405161028b91906138db565b60405180910390f35b6102a76102a2366004612e28565b6107d0565b60405161028b9190613800565b6102bc6108f5565b60405161028b919061380e565b6102bc6108fb565b6102bc610901565b6102a76102e7366004612de5565b610907565b6102f4610aeb565b60405161028b91906139e5565b6102a761030f366004612e28565b610af4565b6102a7610c6d565b6102a761032a366004612d5e565b610d12565b6102a761033d366004612d38565b610dbc565b610355610350366004612d38565b610dd1565b60405161028b91906139bc565b6102bc610370366004612d38565b610de9565b610388610383366004612e28565b610e1f565b60405161028b9190613a01565b6102bc6103a3366004612d38565b611101565b6102a76103b6366004612d38565b611113565b6102746103c9366004612f24565b6111f5565b61027e611204565b6102a76103e4366004612e28565b61127d565b6102746103f7366004612e58565b611359565b6102a761040a366004612e28565b611575565b61038861041d366004612d38565b6115f2565b6102bc6116a0565b610274610438366004612d98565b6116a6565b6102a7611a44565b6102a7611a4d565b6102a761045b366004612d38565b611aec565b6102bc61046e366004612d5e565b611bad565b610274610481366004612f24565b611bf3565b610388610494366004612d5e565b611bfe565b6102bc611c29565b6104b46104af366004612ef4565b611c2f565b60405161028b9291906139ca565b6102746104d0366004612d38565b611c6a565b6104dd611d20565b60405161028b91906137f2565b6104dd611d3c565b6000603e5460336040516105069190613794565b6040518091039020610516611d58565b3060405160200161052a9493929190613868565b60405160208183030381529060405280519060200120905060006040548989898660405160200161055f95949392919061381c565b6040516020818303038152906040528051906020012090506000828260405160200161058c9291906137ab565b6040516020818303038152906040528051906020012090506000600182898989604051600081526020016040526040516105c994939291906138a6565b6020604051602081039080840390855afa1580156105eb573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661066c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061391c565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811660009081526041602052604090208054600181019091558a146106d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061395c565b8842111561070c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061392c565b610717818c87611d5d565b5050505050505050505050565b6033805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107c85780601f1061079d576101008083540402835291602001916107c8565b820191906000526020600020905b8154815290600101906020018083116107ab57829003601f168201915b505050505081565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561082257507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610847565b61084483604051806060016040528060268152602001613cbf60269139611f41565b90505b33600081815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff891680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906108e19085906139f3565b60405180910390a360019150505b92915050565b60405481565b60365481565b603e5481565b60006109138484610d12565b610949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061390c565b73ffffffffffffffffffffffffffffffffffffffff841660009081526039602090815260408083203380855290835281842054825160608101909352602680845291946bffffffffffffffffffffffff9091169390926109b1928892613cbf90830139611f41565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156109fd57506bffffffffffffffffffffffff82811614155b15610ad1576000610a2783836040518060600160405280603e8152602001613c25603e9139611f93565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152603960209081526040808320948a16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff86161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ac79085906139f3565b60405180910390a3505b610adc878783611ff6565b600193505050505b9392505050565b60355460ff1681565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610b4657507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b6b565b610b68836040518060600160405280602b8152602001613baf602b9139611f41565b90505b33600090815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452825291829020548251606081019093526032808452610bd0936bffffffffffffffffffffffff9092169285929190613d0d908301396123e5565b33600081815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff8a1680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9586161790819055915190937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925926108e1929116906139f3565b6000604051806060016040528060238152602001613e0b60239139604254819073ffffffffffffffffffffffffffffffffffffffff163314610cdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50604480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591505b5090565b60445460009060ff1680610d4b575073ffffffffffffffffffffffffffffffffffffffff831660009081526043602052604090205460ff165b80610d7b575073ffffffffffffffffffffffffffffffffffffffff821660009081526043602052604090205460ff165b15610d88575060016108ef565b60385473ffffffffffffffffffffffffffffffffffffffff84811691161415610db3575060016108ef565b50600092915050565b60436020526000908152604090205460ff1681565b603d6020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff166000908152603a60205260409020546bffffffffffffffffffffffff1690565b6000438210610e5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061396c565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603d602052604090205463ffffffff1680610e955760009150506108ef565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860181168552925290912054168310610f6d5773ffffffffffffffffffffffffffffffffffffffff84166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff168352929052205464010000000090046bffffffffffffffffffffffff1690506108ef565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c6020908152604080832083805290915290205463ffffffff16831015610fb55760009150506108ef565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff1611156110a957600282820363ffffffff16048103611005612c5c565b5073ffffffffffffffffffffffffffffffffffffffff87166000908152603c6020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff169181019190915290871415611084576020015194506108ef9350505050565b805163ffffffff1687111561109b578193506110a2565b6001820392505b5050610fdb565b5073ffffffffffffffffffffffffffffffffffffffff85166000908152603c6020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60416020526000908152604090205481565b60408051808201909152601881527f4f6e6c792061646d696e2063616e2077686974656c6973740000000000000000602082015260425460009190819073ffffffffffffffffffffffffffffffffffffffff16331461119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50505073ffffffffffffffffffffffffffffffffffffffff16600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915590565b611200338383612440565b5050565b6034805460408051602060026001851615610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190941693909304601f810184900484028201840190925281815292918301828280156107c85780601f1061079d576101008083540402835291602001916107c8565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8314156112cf57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6112f4565b6112f1836040518060600160405280602d8152602001613d72602d9139611f41565b90505b33600090815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff88168452825291829020548251606081019093526033808452610bd0936bffffffffffffffffffffffff9092169285929190613d3f90830139611f93565b6000603e54603360405161136d9190613794565b604051809103902061137d611d58565b306040516020016113919493929190613868565b6040516020818303038152906040528051906020012090506000603f54898989866040516020016113c695949392919061381c565b604051602081830303815290604052805190602001209050600082826040516020016113f39291906137ab565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161143094939291906138a6565b6020604051602081039080840390855afa158015611452573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061398c565b73ffffffffffffffffffffffffffffffffffffffff811660009081526041602052604090208054600181019091558a14611530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061393c565b8842111561156a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061399c565b610717818c87612440565b60006115813384610d12565b6115b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061390c565b60006115db83604051806060016040528060278152602001613bfe60279139611f41565b90506115e8338583611ff6565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152603d602052604081205463ffffffff168061162a576000610ae4565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff169392505050565b60375481565b600054610100900460ff16806116bf57506116bf61261d565b806116cd575060005460ff16155b611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061394c565b600054610100900460ff1615801561176957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611771612623565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156117d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610663906138ec565b6037805473ffffffffffffffffffffffffffffffffffffffff85166000818152603a6020908152604080832080546bffffffffffffffffffffffff9687167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000918216179091558654603b845282852085805284528285208054919097169116179094558282526043905282812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055925491519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916118c0919061380e565b60405180910390a360006118f16036546037546040518060600160405280602e8152602001613b81602e9139611f93565b73ffffffffffffffffffffffffffffffffffffffff8681166000818152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166bffffffffffffffffffffffff8916908117909255603b84528285208580528452828520805490911682179055848452604390925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055603880547fffffffffffffffffffffffff000000000000000000000000000000000000000016958a16959095179094559251939450909290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91611a06919061380e565b60405180910390a3508015611a3e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50505050565b60445460ff1681565b6000604051806060016040528060248152602001613bda60249139604254819073ffffffffffffffffffffffffffffffffffffffff163314611abc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b5050604480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905550600190565b6000604051806060016040528060248152602001613b2c60249139604254819073ffffffffffffffffffffffffffffffffffffffff163314611b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50505073ffffffffffffffffffffffffffffffffffffffff16600090815260436020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600190565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526039602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b611200338383611d5d565b603b6020908152600092835260408084209091529082529020546bffffffffffffffffffffffff1681565b603f5481565b603c60209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b604051806060016040528060218152602001613e5f60219139604254819073ffffffffffffffffffffffffffffffffffffffff163314611cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b5050603880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60425473ffffffffffffffffffffffffffffffffffffffff1681565b60385473ffffffffffffffffffffffffffffffffffffffff1681565b465b90565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152603b60209081526040808320938616835292815290829020548251808401909352601c83527f4d506f6e643a20756e64656c65676174657320756e646572666c6f770000000091830191909152611de3916bffffffffffffffffffffffff909116908390611f93565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320938716835292815282822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95861617905581805290829020548251808401909352601a83527f4d506f6e643a2064656c65676174657320756e646572666c6f7700000000000091830191909152611e9792169083906123e5565b73ffffffffffffffffffffffffffffffffffffffff8481166000818152603b6020908152604080832083805290915280822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff96909616959095179094559251918516917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908490a4611f3c82600083612763565b505050565b6000816c010000000000000000000000008410611f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290611fee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316612043576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610663906139ac565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603b602090815260408083208380529091529020546bffffffffffffffffffffffff808316911610156120be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610663906138fc565b73ffffffffffffffffffffffffffffffffffffffff821661210b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106639061397c565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603a6020908152604091829020548251606081019093526037808452612168936bffffffffffffffffffffffff9092169285929190613dd490830139611f93565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff958616179055603b82528083208380528252918290205482516060810190935260338084526122009491909116928592909190613c8c90830139611f93565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9687161790559286168252603a81529082902054825160608101909352603180845261229e9491909116928592909190613b50908301396123e5565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603a6020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff958616179055603b82528083208380528252918290205482516060810190935260318084526123369491909116928592909190613e2e908301396123e5565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152603b602090815260408083208380529091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123d89085906139f3565b60405180910390a3505050565b6000838301826bffffffffffffffffffffffff8087169083161015612437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b50949350505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152603b60209081526040808320838052825291829020548251808401909352601a83527f4d506f6e643a2064656c65676174657320756e646572666c6f77000000000000918301919091526124c2916bffffffffffffffffffffffff909116908390611f93565b73ffffffffffffffffffffffffffffffffffffffff8481166000908152603b60209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff968716179055928616825290829020548251808401909352601983527f4d506f6e643a2064656c656761746573206f766572666c6f77000000000000009183019190915261257592169083906123e5565b73ffffffffffffffffffffffffffffffffffffffff8481166000818152603b602090815260408083209488168084529490915280822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff969096169590951790945592519192917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f908390a4611f3c60008383612763565b303b1590565b6040805180820190915260068082527f4d61726c696e0000000000000000000000000000000000000000000000000000602090920191825261266791603391612c73565b506040805180820190915260058082527f4d506f6e6400000000000000000000000000000000000000000000000000000060209092019182526126ac91603491612c73565b50603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016601217905569021e19e0c9bab240000060365569017b7883c06916600000603755604051612700906137dc565b604051908190038120603e55612715906137e7565b604051908190038120603f5561272a906137a0565b60408051918290039091209055604280547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127ac57506bffffffffffffffffffffffff811615155b15611f3c5773ffffffffffffffffffffffffffffffffffffffff8316156128af5773ffffffffffffffffffffffffffffffffffffffff83166000908152603d602052604081205463ffffffff169081612806576000612876565b73ffffffffffffffffffffffffffffffffffffffff85166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061289d8285604051806060016040528060298152602001613c6360299139611f93565b90506128ab868484846129b1565b5050505b73ffffffffffffffffffffffffffffffffffffffff821615611f3c5773ffffffffffffffffffffffffffffffffffffffff82166000908152603d602052604081205463ffffffff169081612904576000612974565b73ffffffffffffffffffffffffffffffffffffffff84166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061299b8285604051806060016040528060288152602001613ce5602891396123e5565b90506129a9858484846129b1565b505050505050565b60006129d543604051806060016040528060358152602001613d9f60359139612c1a565b905063ffffffff841615801590612a48575073ffffffffffffffffffffffffffffffffffffffff85166000908152603c6020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b15612ae75773ffffffffffffffffffffffffffffffffffffffff85166000908152603c602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880163ffffffff168452909152902080547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff166401000000006bffffffffffffffffffffffff851602179055612bc3565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000818152603c83528781208c871682528352878120965187549451909516640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9587167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000958616179590951694909417909555938252603d90935292909220805460018801909316929091169190911790555b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051612c0b929190613a0f565b60405180910390a25050505050565b6000816401000000008410611f8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066391906138db565b604080518082019091526000808252602082015290565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612cb457805160ff1916838001178555612ce1565b82800160010185558215612ce1579182015b82811115612ce1578251825591602001919060010190612cc6565b50610d0e92611d5a9250905b80821115610d0e5760008155600101612ced565b80356108ef81613af0565b80356108ef81613b07565b80356108ef81613b10565b80356108ef81613b19565b80356108ef81613b22565b600060208284031215612d4a57600080fd5b6000612d568484612d01565b949350505050565b60008060408385031215612d7157600080fd5b6000612d7d8585612d01565b9250506020612d8e85828601612d01565b9150509250929050565b600080600060608486031215612dad57600080fd5b6000612db98686612d01565b9350506020612dca86828701612d01565b9250506040612ddb86828701612d01565b9150509250925092565b600080600060608486031215612dfa57600080fd5b6000612e068686612d01565b9350506020612e1786828701612d01565b9250506040612ddb86828701612d0c565b60008060408385031215612e3b57600080fd5b6000612e478585612d01565b9250506020612d8e85828601612d0c565b600080600080600080600060e0888a031215612e7357600080fd5b6000612e7f8a8a612d01565b9750506020612e908a828b01612d0c565b9650506040612ea18a828b01612d0c565b9550506060612eb28a828b01612d22565b9450506080612ec38a828b01612d0c565b93505060a0612ed48a828b01612d0c565b92505060c0612ee58a828b01612d2d565b91505092959891949750929550565b60008060408385031215612f0757600080fd5b6000612f138585612d01565b9250506020612d8e85828601612d17565b60008060408385031215612f3757600080fd5b6000612f438585612d01565b9250506020612d8e85828601612d2d565b612f5d81613a48565b82525050565b612f5d81613a53565b612f5d81611d5a565b612f5d612f8182611d5a565b611d5a565b600081546001811660008114612fa35760018114612fe457613023565b607f6002830416612fb48187613a3a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168152955085019250613023565b60028204612ff28187613a3a565b9550612ffd85613a2a565b60005b8281101561301c57815488820152600190910190602001613000565b5050850192505b505092915050565b600061303682613a36565b6130408185613a3f565b9350613050818560208601613a9c565b61305981613ac8565b9093019392505050565b6000613070604983613a3a565b7f556e656c65676174696f6e28616464726573732064656c6567617465652c756981527f6e74323536206e6f6e63652c75696e74323536206578706972792c75696e743960208201527f3620616d6f756e74290000000000000000000000000000000000000000000000604082015260490192915050565b60006130f5600283613a3a565b7f1901000000000000000000000000000000000000000000000000000000000000815260020192915050565b600061312e603183613a3f565b7f42726964676520616e64206163636f756e742073686f756c64206e6f7420626581527f207468652073616d652061646472657373000000000000000000000000000000602082015260400192915050565b600061318d605183613a3f565b7f4d506f6e643a205f7472616e73666572546f6b656e733a20756e64656c65676181527f74656420616d6f756e742073686f756c6420626520677265617465722074686160208201527f6e207472616e7366657220616d6f756e74000000000000000000000000000000604082015260600192915050565b6000613212607783613a3f565b7f41746c65617374206f6e65206f6620746865206164647265737320287372632081527f6f7220647374292073686f756c642062652077686974656c6973746564206f7260208201527f20616c6c207472616e7366657273206d75737420626520656e61626c6564207660408201527f696120656e61626c65416c6c5472616e73666572732829000000000000000000606082015260800192915050565b60006132bd604383613a3a565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201527f6374290000000000000000000000000000000000000000000000000000000000604082015260430192915050565b6000613342602983613a3f565b7f4d506f6e643a3a756e64656c656761746542795369673a20696e76616c69642081527f7369676e61747572650000000000000000000000000000000000000000000000602082015260400192915050565b60006133a1602983613a3f565b7f4d506f6e643a3a756e64656c656761746542795369673a207369676e6174757281527f6520657870697265640000000000000000000000000000000000000000000000602082015260400192915050565b6000613400602383613a3f565b7f4d506f6e643a3a64656c656761746542795369673a20696e76616c6964206e6f81527f6e63650000000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061345f602e83613a3f565b7f436f6e747261637420696e7374616e63652068617320616c726561647920626581527f656e20696e697469616c697a6564000000000000000000000000000000000000602082015260400192915050565b60006134be602583613a3f565b7f4d506f6e643a3a756e64656c656761746542795369673a20696e76616c69642081527f6e6f6e6365000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061351d602883613a3f565b7f4d506f6e643a3a6765745072696f72566f7465733a206e6f742079657420646581527f7465726d696e6564000000000000000000000000000000000000000000000000602082015260400192915050565b600061357c603b83613a3f565b7f4d506f6e643a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e7366657220746f20746865207a65726f20616464726573730000000000602082015260400192915050565b60006135db602783613a3f565b7f4d506f6e643a3a64656c656761746542795369673a20696e76616c696420736981527f676e617475726500000000000000000000000000000000000000000000000000602082015260400192915050565b600061363a602783613a3f565b7f4d506f6e643a3a64656c656761746542795369673a207369676e61747572652081527f6578706972656400000000000000000000000000000000000000000000000000602082015260400192915050565b6000613699604883613a3a565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e74323536206578706972792c75696e74393660208201527f20616d6f756e7429000000000000000000000000000000000000000000000000604082015260480192915050565b600061371e603d83613a3f565b7f4d506f6e643a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e736665722066726f6d20746865207a65726f2061646472657373000000602082015260400192915050565b612f5d81613a71565b612f5d81613a7a565b612f5d81613a91565b612f5d81613a80565b6000610ae48284612f86565b60006108ef82613063565b60006137b6826130e8565b91506137c28285612f75565b6020820191506137d28284612f75565b5060200192915050565b60006108ef826132b0565b60006108ef8261368c565b602081016108ef8284612f54565b602081016108ef8284612f63565b602081016108ef8284612f6c565b60a0810161382a8288612f6c565b6138376020830187612f54565b6138446040830186612f6c565b6138516060830185612f6c565b61385e608083018461378b565b9695505050505050565b608081016138768287612f6c565b6138836020830186612f6c565b6138906040830185612f6c565b61389d6060830184612f54565b95945050505050565b608081016138b48287612f6c565b6138c16020830186613779565b6138ce6040830185612f6c565b61389d6060830184612f6c565b60208082528101610ae4818461302b565b602080825281016108ef81613121565b602080825281016108ef81613180565b602080825281016108ef81613205565b602080825281016108ef81613335565b602080825281016108ef81613394565b602080825281016108ef816133f3565b602080825281016108ef81613452565b602080825281016108ef816134b1565b602080825281016108ef81613510565b602080825281016108ef8161356f565b602080825281016108ef816135ce565b602080825281016108ef8161362d565b602080825281016108ef81613711565b602081016108ef8284613770565b604081016139d88285613770565b610ae4602083018461378b565b602081016108ef8284613779565b602081016108ef8284613782565b602081016108ef828461378b565b60408101613a1d8285613782565b610ae46020830184613782565b60009081526020902090565b5190565b919050565b90815260200190565b60006108ef82613a58565b151590565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b60006108ef82613a80565b60005b83811015613ab7578181015183820152602001613a9f565b83811115611a3e5750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b613af981613a48565b8114613b0457600080fd5b50565b613af981611d5a565b613af981613a71565b613af981613a7a565b613af981613a8056fe4f6e6c792061646d696e2063616e2072656d6f76652066726f6d2077686974656c6973744d506f6e643a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f77734d506f6e643a205375627472616374696f6e206f766572666c6f7720696e2074686520636f6e7374727563746f724d506f6e643a3a617070726f76653a206164646564416d6f756e74206578636565647320393620626974734f6e6c792061646d696e2063616e2064697361626c6520616c6c207472616e73666572734d506f6e643a3a7472616e736665723a20616d6f756e74206578636565647320393620626974734d506f6e643a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63654d506f6e643a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f77734d506f6e643a205f7472616e666572546f6b656e733a20756e64656c6567617465207375627472616374696f6e206572726f724d506f6e643a3a617070726f76653a20616d6f756e74206578636565647320393620626974734d506f6e643a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f77734d506f6e643a20696e637265617365416c6c6f77616e636520616c6c6f77616e63652076616c7565206f766572666c6f77734d506f6e643a206465637265617365416c6c6f77616e636520616c6c6f77616e63652076616c756520756e646572666c6f77734d506f6e643a3a617070726f76653a2072656d6f766564416d6f756e74206578636565647320393620626974734d506f6e643a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974734d506f6e643a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63654f6e6c792061646d696e2063616e20656e61626c6520616c6c207472616e73666572734d506f6e643a205f7472616e73666572546f6b656e733a20756e64656c6567617465206164646974696f6e206572726f724f6e6c792061646d696e2063616e206368616e67652064726f7020627269646765a365627a7a72315820599593199e7d3a76e2ec82ded5c7ec0030415564fd289d2b9e8e59c5e9e8bc9b6c6578706572696d656e74616cf564736f6c63430005110040

Deployed Bytecode Sourcemap

2105:22296:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2105:22296:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15277:1140;;;;;;;;;:::i;:::-;;2199:18;;;:::i;:::-;;;;;;;;;;;;;;;;8992:498;;;;;;;;;:::i;:::-;;;;;;;;3692:36;;;:::i;:::-;;;;;;;;2446:26;;;:::i;3440:30::-;;;:::i;12272:1025::-;;;;;;;;;:::i;2361:21::-;;;:::i;:::-;;;;;;;;9498:686;;;;;;;;;:::i;7030:200::-;;;:::i;7630:409::-;;;;;;;;;:::i;3913:45::-;;;;;;;;;:::i;3319:48::-;;;;;;;;;:::i;:::-;;;;;;;;11090:111;;;;;;;;;:::i;17319:1291::-;;;;;;;;;:::i;:::-;;;;;;;;3809:41;;;;;;;;;:::i;6574:212::-;;;;;;;;;:::i;13445:125::-;;;;;;;;;:::i;2278:20::-;;;:::i;10192:695::-;;;;;;;;;:::i;14141:1128::-;;;;;;;;;:::i;11465:497::-;;;;;;;;;:::i;16618:270::-;;;;;;;;;:::i;2492:27::-;;;:::i;4893:949::-;;;;;;;;;:::i;3965:29::-;;;:::i;7238:203::-;;;:::i;6794:228::-;;;;;;;;;:::i;8343:171::-;;;;;;;;;:::i;13578:129::-;;;;;;;;;:::i;2875:63::-;;;;;;;;;:::i;3564:34::-;;;:::i;3182:68::-;;;;;;;;;:::i;:::-;;;;;;;;;7449:173;;;;;;;;;:::i;3886:20::-;;;:::i;:::-;;;;;;;;2540:25;;;:::i;15277:1140::-;15486:23;15565:15;;15615:4;15599:22;;;;;;;;;;;;;;;15640:12;:10;:12::i;:::-;15679:4;15536:163;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15536:163:0;;;15512:198;;;;;;15486:224;;15721:18;15777:21;;15800:9;15811:5;15818:6;15826;15766:67;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15766:67:0;;;15742:102;;;;;;15721:123;;15855:14;15925:15;15942:10;15896:57;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15896:57:0;;;15872:92;;;;;;15855:109;;15975:17;15995:26;16005:6;16013:1;16016;16019;15995:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;15995:26:0;;;;;;-1:-1:-1;;16054:23:0;;;16032:114;;;;;;;;;;;;;;;;;;;;;;16188:17;;;;;;;:6;:17;;;;;:19;;;;;;;;16179:28;;16157:115;;;;;;;;;;;;;;16298:6;16291:3;:13;;16283:67;;;;;;;;;;;;;;16368:41;16380:9;16391;16402:6;16368:11;:41::i;:::-;16361:48;;;;15277:1140;;;;;;;:::o;2199:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8992:498::-;9081:4;9103:13;9152:2;9131:9;:24;9127:226;;;-1:-1:-1;9188:2:0;9127:226;;;9233:108;9258:9;9233:108;;;;;;;;;;;;;;;;;:6;:108::i;:::-;9224:117;;9127:226;9376:10;9365:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;:40;;;;;;;;;;9423:37;;9365:31;;9376:10;9423:37;;;;9365:40;;9423:37;;;;;;;;;;9478:4;9471:11;;;8992:498;;;;;:::o;3692:36::-;;;;:::o;2446:26::-;;;;:::o;3440:30::-;;;;:::o;12272:1025::-;12391:4;12430:31;12452:3;12457;12430:21;:31::i;:::-;12408:200;;;;;;;;;;;;;;12684:15;;;12619;12684;;;:10;:15;;;;;;;;12637:10;12684:24;;;;;;;;;;12735:96;;;;;;;;;;;;12637:10;;12684:24;;;;;12619:15;;12735:96;;12756:9;;12735:96;;;;;:6;:96::i;:::-;12719:112;;12859:3;12848:14;;:7;:14;;;;:48;;;;-1:-1:-1;12866:30:0;;;;;;12848:48;12844:378;;;12913:19;12935:163;12959:16;12994:6;12935:163;;;;;;;;;;;;;;;;;:5;:163::i;:::-;13113:15;;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;;:39;;;;;;;;;;13174:36;13113:39;;-1:-1:-1;13113:24:0;;13174:36;;;;13113:39;;13174:36;;;;;;;;;;12844:378;;13234:33;13250:3;13255;13260:6;13234:15;:33::i;:::-;13285:4;13278:11;;;;;12272:1025;;;;;;:::o;2361:21::-;;;;;;:::o;9498:686::-;9599:4;9621:13;9672:2;9649:11;:26;9645:235;;;-1:-1:-1;9708:2:0;9645:235;;;9753:115;9778:11;9753:115;;;;;;;;;;;;;;;;;:6;:115::i;:::-;9744:124;;9645:235;9957:10;9946:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;9926:150;;;;;;;;;;;;;;9946:31;;;;;9992:6;;9926:150;;;;;;;:5;:150::i;:::-;9903:10;9892:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;:184;;;;;;;;;;;;;10092:62;;9892:31;;10092:62;;;;10122:31;;;10092:62;;7030:200;7154:4;24290:108;;;;;;;;;;;;;;;;;24364:5;;24371:6;;24364:5;;24350:10;:19;24342:36;;;;;;;;;;;;;;;-1:-1:-1;7176:17:0;:24;;;;7196:4;7176:24;;;;;;7196:4;-1:-1:-1;24389:1:0;7030:200;;:::o;7630:409::-;7787:17;;7747:4;;7787:17;;;:58;;-1:-1:-1;7821:24:0;;;;;;;:13;:24;;;;;;;;7787:58;:99;;;-1:-1:-1;7862:24:0;;;;;;;:13;:24;;;;;;;;7787:99;7769:240;;;-1:-1:-1;7920:4:0;7913:11;;7769:240;7959:10;;;7946:23;;;7959:10;;7946:23;7942:67;;;-1:-1:-1;7993:4:0;7986:11;;7942:67;-1:-1:-1;8026:5:0;7630:409;;;;:::o;3913:45::-;;;;;;;;;;;;;;;:::o;3319:48::-;;;;;;;;;;;;;;;:::o;11090:111::-;11176:17;;11149:7;11176:17;;;:8;:17;;;;;;;;;11090:111::o;17319:1291::-;17428:6;17488:12;17474:11;:26;17452:116;;;;;;;;;;;;;;17603:23;;;17581:19;17603:23;;;:14;:23;;;;;;;;17641:17;17637:58;;17682:1;17675:8;;;;;17637:58;17755:20;;;;;;;:11;:20;;;;;;;;:38;17776:16;;;17755:38;;;;;;;;;:48;;:63;-1:-1:-1;17751:147:0;;17842:20;;;;;;;:11;:20;;;;;;;;17863:16;;;;;17842:38;;;;;;;;:44;;;;;;;-1:-1:-1;17835:51:0;;17751:147;17959:20;;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;17955:88:0;;;18030:1;18023:8;;;;;17955:88;18055:12;18097:16;;;18124:428;18139:5;18131:13;;:5;:13;;;18124:428;;;18203:1;18186:13;;;18185:19;;;18177:27;;18246:20;;:::i;:::-;-1:-1:-1;18269:20:0;;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;18246:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18316:27;;18312:229;;;18371:8;;;;-1:-1:-1;18364:15:0;;-1:-1:-1;;;;18364:15:0;18312:229;18405:12;;:26;;;-1:-1:-1;18401:140:0;;;18460:6;18452:14;;18401:140;;;18524:1;18515:6;:10;18507:18;;18401:140;18124:428;;;;;-1:-1:-1;18569:20:0;;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;;;;;-1:-1:-1;;17319:1291:0;;;;:::o;3809:41::-;;;;;;;;;;;;;:::o;6574:212::-;24290:108;;;;;;;;;;;;;;;;;24364:5;;-1:-1:-1;;24290:108:0;;;24364:5;;24350:10;:19;24342:36;;;;;;;;;;;;;;;-1:-1:-1;;;6726:23:0;;;;;;:13;:23;;;;;:30;;;;6752:4;6726:30;;;;;;6752:4;6574:212::o;13445:125::-;13522:40;13532:10;13544:9;13555:6;13522:9;:40::i;:::-;13445:125;;:::o;2278:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10192:695;10295:4;10317:13;10370:2;10345:13;:28;10341:241;;;-1:-1:-1;10406:2:0;10341:241;;;10451:119;10476:13;10451:119;;;;;;;;;;;;;;;;;:6;:119::i;:::-;10442:128;;10341:241;10659:10;10648:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;10628:151;;;;;;;;;;;;;;10648:31;;;;;10694:6;;10628:151;;;;;;;:5;:151::i;14141:1128::-;14348:23;14427:15;;14477:4;14461:22;;;;;;;;;;;;;;;14502:12;:10;:12::i;:::-;14541:4;14398:163;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14398:163:0;;;14374:198;;;;;;14348:224;;14583:18;14639:19;;14660:9;14671:5;14678:6;14686;14628:65;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14628:65:0;;;14604:100;;;;;;14583:121;;14715:14;14785:15;14802:10;14756:57;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14756:57:0;;;14732:92;;;;;;14715:109;;14835:17;14855:26;14865:6;14873:1;14876;14879;14855:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;14855:26:0;;;;;;-1:-1:-1;;14914:23:0;;;14892:112;;;;;;;;;;;;;;15046:17;;;;;;;:6;:17;;;;;:19;;;;;;;;15037:28;;15015:113;;;;;;;;;;;;;;15154:6;15147:3;:13;;15139:65;;;;;;;;;;;;;;15222:39;15232:9;15243;15254:6;15222:9;:39::i;11465:497::-;11533:4;11572:38;11594:10;11606:3;11572:21;:38::i;:::-;11550:207;;;;;;;;;;;;;;11768:13;11784:97;11805:9;11784:97;;;;;;;;;;;;;;;;;:6;:97::i;:::-;11768:113;;11892:40;11908:10;11920:3;11925:6;11892:15;:40::i;:::-;-1:-1:-1;11950:4:0;;11465:497;-1:-1:-1;;;11465:497:0:o;16618:270::-;16724:23;;;16683:6;16724:23;;;:14;:23;;;;;;;;16778:17;:102;;16879:1;16778:102;;;16815:20;;;;;;;:11;:20;;;;;;;;16836:16;;;16815:38;;;;;;;;;:44;;;;;;16758:122;16618:270;-1:-1:-1;;;16618:270:0:o;2492:27::-;;;;:::o;4893:949::-;1079:12;;;;;;;;:31;;;1095:15;:13;:15::i;:::-;1079:47;;;-1:-1:-1;1115:11:0;;;;1114:12;1079:47;1071:106;;;;;;;;;;;;;;1186:19;1209:12;;;;;;1208:13;1228:83;;;;1257:12;:19;;1285:18;1257:19;;;;;;1285:18;1272:4;1285:18;;;1228:83;5037:17;:15;:17::i;:::-;5098:6;5087:17;;:7;:17;;;;5065:116;;;;;;;;;;;;;;5218:12;;;5192:16;;;;;;;:8;:16;;;;;;;;:39;;;;;;;;;;;;;;5281:12;;5242:9;:17;;;;;:29;;;;;;;;:52;;;;;;;;;;;;5305:21;;;:13;:21;;;;;:28;;;;5192:39;5305:28;;;5378:12;;5349:42;;5192:16;;;5349:42;;;;5378:12;5349:42;;;;;;;;;;5404:22;5429:148;5456:11;;5490:12;;5429:148;;;;;;;;;;;;;;;;;:5;:148::i;:::-;5588:17;;;;;;;;:8;:17;;;;;;;;:35;;;;;;;;;;;;;;;5634:9;:18;;;;;:30;;;;;;;;:48;;;;;;;;;5693:22;;;:13;:22;;;;;;:29;;;;-1:-1:-1;5693:29:0;;;5733:10;:30;;;;;;;;;;;;;;5779:55;;5588:35;;-1:-1:-1;5588:17:0;;;;5779:55;;;;5588:35;5779:55;;;;;;;;;;1319:1;1333:14;1329:57;;;1373:5;1358:20;;;;;;1329:57;4893:949;;;;:::o;3965:29::-;;;;;;:::o;7238:203::-;7364:4;24290:108;;;;;;;;;;;;;;;;;24364:5;;24371:6;;24364:5;;24350:10;:19;24342:36;;;;;;;;;;;;;;;-1:-1:-1;;7386:17:0;:25;;;;;;-1:-1:-1;;;7238:203:0:o;6794:228::-;6939:4;24290:108;;;;;;;;;;;;;;;;;24364:5;;24371:6;;24364:5;;24350:10;:19;24342:36;;;;;;;;;;;;;;;-1:-1:-1;;;6961:23:0;;6987:5;6961:23;;;:13;:23;;;;;:31;;;;;;-1:-1:-1;;6794:228:0:o;8343:171::-;8478:19;;;;8446:7;8478:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;;;;8343:171::o;13578:129::-;13657:42;13669:10;13681:9;13692:6;13657:11;:42::i;2875:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3564:34::-;;;;:::o;3182:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7449:173::-;24290:108;;;;;;;;;;;;;;;;;24364:5;;24371:6;;24364:5;;24350:10;:19;24342:36;;;;;;;;;;;;;;;-1:-1:-1;;7587:10:0;:27;;;;;;;;;;;;;;;7449:173::o;3886:20::-;;;;;;:::o;2540:25::-;;;;;;:::o;24104:178::-;24230:9;24104:178;;:::o;19217:592::-;19399:20;;;;;;;;:9;:20;;;;;;;;:31;;;;;;;;;;;;;19379:128;;;;;;;;;;;;;;;;;;;;;19399:31;;;;;19445:6;;19379:5;:128::i;:::-;19345:20;;;;;;;;:9;:20;;;;;;;;:31;;;;;;;;;;;:162;;;;;;;;;;;19573:32;;;;;;;;19553:127;;;;;;;;;;;;;;;;;;;;;19573:32;;19620:6;;19553:5;:127::i;:::-;19518:20;;;;;;;;:9;:20;;;;;;;;:32;;;;;;;;;:162;;;;;;;;;;;;;;;;19696:49;;;;;;;;19518:20;;19696:49;19756:45;19771:9;19790:1;19794:6;19756:14;:45::i;:::-;19217:592;;;:::o;23463:196::-;23568:6;23611:12;23604:5;23600:9;;23592:32;;;;;;;;;;;;;;;-1:-1:-1;23649:1:0;;23463:196;-1:-1:-1;;23463:196:0:o;23897:199::-;24017:6;24049:1;24044:6;;:1;:6;;;;24052:12;24036:29;;;;;;;;;;;;;;;;-1:-1:-1;;;24083:5:0;;;23897:199::o;19817:1379::-;19959:17;;;19937:128;;;;;;;;;;;;;;20098:14;;;;;;;:9;:14;;;;;;;;:26;;;;;;;;;:36;;;;:26;;:36;;20076:167;;;;;;;;;;;;;;20276:17;;;20254:126;;;;;;;;;;;;;;20429:13;;;;;;;:8;:13;;;;;;;;;;20409:137;;;;;;;;;;;;;;20429:13;;;;;20457:6;;20409:137;;;;;;;:5;:137::i;:::-;20393:13;;;;;;;:8;:13;;;;;;;;:153;;;;;;;;;;;20606:9;:14;;;;;:26;;;;;;;;;;20586:146;;;;;;;;;;;;;;20606:26;;;;;20647:6;;20586:146;;;;;;;;:5;:146::i;:::-;20557:14;;;;;;;;:9;:14;;;;;;;;:26;;;;;;;;:175;;;;;;;;;;;20781:13;;;;;:8;:13;;;;;;;20761:131;;;;;;;;;;;;;;20781:13;;;;;20809:6;;20761:131;;;;;;;;:5;:131::i;:::-;20745:13;;;;;;;:8;:13;;;;;;;;:147;;;;;;;;;;;20952:9;:14;;;;;:26;;;;;;;;;;20932:144;;;;;;;;;;;;;;20952:26;;;;;20993:6;;20932:144;;;;;;;;:5;:144::i;:::-;20903:14;;;;;;;;:9;:14;;;;;;;;:26;;;;;;;;;;:173;;;;;;;;;;;;;;;;21092:26;;;;;;;;;;21111:6;;21092:26;;;;;;;;;;19817:1379;;;:::o;23667:222::-;23787:6;23817:5;;;23849:12;23841:6;;;;;;;;;23833:29;;;;;;;;;;;;;;;-1:-1:-1;23880:1:0;23667:222;-1:-1:-1;;;;23667:222:0:o;18618:591::-;18799:20;;;;;;;:9;:20;;;;;;;;:32;;;;;;;;;;18779:127;;;;;;;;;;;;;;;;;;;;;18799:32;;;;;18846:6;;18779:5;:127::i;:::-;18744:20;;;;;;;;:9;:20;;;;;;;;:32;;;;;;;;:162;;;;;;;;;;;18971:31;;;;;;;;;;18951:125;;;;;;;;;;;;;;;;;;;;;18971:31;;19017:6;;18951:5;:125::i;:::-;18917:20;;;;;;;;:9;:20;;;;;;;;:31;;;;;;;;;;;;;:159;;;;;;;;;;;;;;;;19094:49;;18917:31;;:20;19094:49;;18917:20;;19094:49;19156:45;19179:1;19183:9;19194:6;19156:14;:45::i;1480:508::-;1897:4;1943:17;1975:7;1480:508;:::o;5850:716::-;5897:15;;;;;;;;;;;;;;;;;;;;;;;:4;;:15;:::i;:::-;-1:-1:-1;5923:16:0;;;;;;;;;;;;;;;;;;;;;;;:6;;:16;:::i;:::-;-1:-1:-1;5950:8:0;:13;;;;5961:2;5950:13;;;5988:8;5974:11;:22;6022:7;6007:12;:22;6058:104;;;;;;;;;;;;;;;6040:15;:122;6195:109;;;;;;;;;;;;;6173:19;:131;6339:110;;;;;;;;;;;;;;;6315:134;;6460:5;:18;;;;6468:10;6460:18;;;5850:716::o;21204:1226::-;21343:6;21333:16;;:6;:16;;;;:31;;;;-1:-1:-1;21353:11:0;;;;;21333:31;21329:1094;;;21385:20;;;;21381:508;;21445:22;;;21426:16;21445:22;;;:14;:22;;;;;;;;;21505:14;:103;;21607:1;21505:103;;;21543:19;;;;;;;:11;:19;;;;;;;;21563:13;;;21543:34;;;;;;;;;:40;;;;;;21505:103;21486:122;;21627:16;21646:151;21674:9;21706:6;21646:151;;;;;;;;;;;;;;;;;:5;:151::i;:::-;21627:170;;21816:57;21833:6;21841:9;21852;21863;21816:16;:57::i;:::-;21381:508;;;;21909:20;;;;21905:507;;21969:22;;;21950:16;21969:22;;;:14;:22;;;;;;;;;22029:14;:103;;22131:1;22029:103;;;22067:19;;;;;;;:11;:19;;;;;;;;22087:13;;;22067:34;;;;;;;;;:40;;;;;;22029:103;22010:122;;22151:16;22170:150;22198:9;22230:6;22170:150;;;;;;;;;;;;;;;;;:5;:150::i;:::-;22151:169;;22339:57;22356:6;22364:9;22375;22386;22339:16;:57::i;:::-;21905:507;;;21204:1226;;;:::o;22438:813::-;22601:18;22622:114;22643:12;22622:114;;;;;;;;;;;;;;;;;:6;:114::i;:::-;22601:135;-1:-1:-1;22767:17:0;;;;;;;:99;;-1:-1:-1;22801:22:0;;;;;;;:11;:22;;;;;;;;:65;22824:16;;;22801:40;;;;;;;;;:50;:65;;;:50;;:65;22767:99;22749:426;;;22893:22;;;;;;;:11;:22;;;;;;;;22916:16;;;22893:40;;;;;;;;;:57;;;;;;;;;;;;22749:426;;;23022:82;;;;;;;;;;;;;;;;;;;;;;;;;22983:22;;;-1:-1:-1;22983:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23119:25;;;:14;:25;;;;;;;:44;;22983:121;23147:16;;23119:44;;;;;;;;;;;;;22749:426;23213:9;23192:51;;;23224:8;23234;23192:51;;;;;;;;;;;;;;;;22438:813;;;;;:::o;23259:196::-;23364:6;23407:12;23400:5;23396:9;;23388:32;;;;;;;;;;;;;;2105:22296;;;;;;;;;;-1:-1:-1;2105:22296:0;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2105:22296:0;;;;-1:-1:-1;2105:22296: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:483;;6854:85;6936:2;6931:3;6854:85;;;6972:34;6952:55;;7041:34;7036:2;7027:12;;7020:56;7110:11;7105:2;7096:12;;7089:33;7150:2;7141:12;;6840:319;-1:-1;;6840:319;7168:398;;7346:84;7428:1;7423:3;7346:84;;;7463:66;7443:87;;7558:1;7549:11;;7332:234;-1:-1;;7332:234;7575:386;;7735:67;7799:2;7794:3;7735:67;;;7835:34;7815:55;;7904:19;7899:2;7890:12;;7883:41;7952:2;7943:12;;7721:240;-1:-1;;7721:240;7970:455;;8130:67;8194:2;8189:3;8130:67;;;8230:34;8210:55;;8299:34;8294:2;8285:12;;8278:56;8368:19;8363:2;8354:12;;8347:41;8416:2;8407:12;;8116:309;-1:-1;;8116:309;8434:532;;8594:68;8658:3;8653;8594:68;;;8695:34;8675:55;;8764:34;8759:2;8750:12;;8743:56;8833:34;8828:2;8819:12;;8812:56;8902:25;8897:2;8888:12;;8881:47;8956:3;8947:13;;8580:386;-1:-1;;8580:386;8975:477;;9153:85;9235:2;9230:3;9153:85;;;9271:34;9251:55;;9340:34;9335:2;9326:12;;9319:56;9409:5;9404:2;9395:12;;9388:27;9443:2;9434:12;;9139:313;-1:-1;;9139:313;9461:378;;9621:67;9685:2;9680:3;9621:67;;;9721:34;9701:55;;9790:11;9785:2;9776:12;;9769:33;9830:2;9821:12;;9607:232;-1:-1;;9607:232;9848:378;;10008:67;10072:2;10067:3;10008:67;;;10108:34;10088:55;;10177:11;10172:2;10163:12;;10156:33;10217:2;10208:12;;9994:232;-1:-1;;9994:232;10235:372;;10395:67;10459:2;10454:3;10395:67;;;10495:34;10475:55;;10564:5;10559:2;10550:12;;10543:27;10598:2;10589:12;;10381:226;-1:-1;;10381:226;10616:383;;10776:67;10840:2;10835:3;10776:67;;;10876:34;10856:55;;10945:16;10940:2;10931:12;;10924:38;10990:2;10981:12;;10762:237;-1:-1;;10762:237;11008:374;;11168:67;11232:2;11227:3;11168:67;;;11268:34;11248:55;;11337:7;11332:2;11323:12;;11316:29;11373:2;11364:12;;11154:228;-1:-1;;11154:228;11391:377;;11551:67;11615:2;11610:3;11551:67;;;11651:34;11631:55;;11720:10;11715:2;11706:12;;11699:32;11759:2;11750:12;;11537:231;-1:-1;;11537:231;11777:396;;11937:67;12001:2;11996:3;11937:67;;;12037:34;12017:55;;12106:29;12101:2;12092:12;;12085:51;12164:2;12155:12;;11923:250;-1:-1;;11923:250;12182:376;;12342:67;12406:2;12401:3;12342:67;;;12442:34;12422:55;;12511:9;12506:2;12497:12;;12490:31;12549:2;12540:12;;12328:230;-1:-1;;12328:230;12567:376;;12727:67;12791:2;12786:3;12727:67;;;12827:34;12807:55;;12896:9;12891:2;12882:12;;12875:31;12934:2;12925:12;;12713:230;-1:-1;;12713:230;12952:482;;13130:85;13212:2;13207:3;13130:85;;;13248:34;13228:55;;13317:34;13312:2;13303:12;;13296:56;13386:10;13381:2;13372:12;;13365:32;13425:2;13416:12;;13116:318;-1:-1;;13116:318;13443:398;;13603:67;13667:2;13662:3;13603:67;;;13703:34;13683:55;;13772:31;13767:2;13758:12;;13751:53;13832:2;13823:12;;13589:252;-1:-1;;13589:252;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://599593199e7d3a76e2ec82ded5c7ec0030415564fd289d2b9e8e59c5e9e8bc9b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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