Token QuickSwap

 

Overview ERC-20

Price
$0.05 @ 0.058038 MATIC (-0.24%)
Fully Diluted Market Cap
Total Supply:
899,999,665.505098 QUICK

Holders:
5,305 addresses

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

QuickSwap is an Automated Market Marker on the Polygon Network. It’s a fork of Uniswap and offers the same liquidity pool model.

Market

Volume (24H):$483,335.00
Market Capitalization:$0.00
Circulating Supply:0.00 QUICK
Market Data Source: Coinmarketcap


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

Contract Source Code Verified (Exact Match)

Contract Name:
Quick

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-21
*/

/**
 *Submitted for verification at Etherscan.io on 2020-09-16
*/

/**
 *Submitted for verification at Etherscan.io on 2020-09-15
*/

pragma solidity ^0.5.16;
pragma experimental ABIEncoderV2;

// From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/Math.sol
// Subject to the MIT license.

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

        return c;
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting with custom message on overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, errorMessage);

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

contract Quick {
    /// @notice EIP-20 token name for this token
    string public constant name = "QuickSwap";

    /// @notice EIP-20 token symbol for this token
    string public constant symbol = "QUICK";

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

    /// @notice Total number of tokens in circulation
    uint public totalSupply = 0; // QUICK

    /// @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 => address) 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 constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @notice The EIP-712 typehash for the permit struct used by the contract
    bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

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

    address public gateway;

    /// @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, uint previousBalance, uint 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 Construct a new Quick token
     * @param gateway_ The gateway contract address
     */
    constructor(address gateway_) public {

        gateway = gateway_;
    }

    /**
     * @notice called when token is deposited on root chain
     * @dev Should be callable only by ChildChainManager
     * Should handle deposit by minting the required amount for user
     * Make sure minting is done only by this function
     * @param user user address for whom deposit is being done
     * @param depositData abi encoded amount
     */
    function deposit(address user, bytes calldata depositData)
        external
    {
        require(msg.sender == gateway,  "Invalid access");
        uint256 rawAmount = abi.decode(depositData, (uint256));
        uint96 amount = safe96(rawAmount, "Quick::deposit: amount exceeds 96 bits");

        _mint(user, amount);
    }

    /**
     * @notice called when user wants to withdraw tokens back to root chain
     * @dev Should burn user's tokens. This transaction will be verified when exiting on root chain
     * @param rawAmount amount of tokens to withdraw
     */
    function withdraw(uint256 rawAmount) external {
        uint96 amount = safe96(rawAmount, "Quick::withdraw: amount exceeds 96 bits");
        _burn(msg.sender, amount);
    }

    /**
     * @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 (uint) {
        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, uint rawAmount) external returns (bool) {
        uint96 amount;
        if (rawAmount == uint(-1)) {
            amount = uint96(-1);
        } else {
            amount = safe96(rawAmount, "Quick::approve: amount exceeds 96 bits");
        }

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

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

    /**
     * @notice Triggers an approval from owner to spends
     * @param owner The address to approve from
     * @param spender The address to be approved
     * @param rawAmount The number of tokens that are approved (2^256-1 means infinite)
     * @param deadline 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 permit(address owner, address spender, uint rawAmount, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        uint96 amount;
        if (rawAmount == uint(-1)) {
            amount = uint96(-1);
        } else {
            amount = safe96(rawAmount, "Quick::permit: amount exceeds 96 bits");
        }

        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, rawAmount, nonces[owner]++, deadline));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "Quick::permit: invalid signature");
        require(signatory == owner, "Quick::permit: unauthorized");
        require(now <= deadline, "Quick::permit: signature expired");

        allowances[owner][spender] = amount;

        emit Approval(owner, spender, amount);
    }

    /**
     * @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 (uint) {
        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, uint rawAmount) external returns (bool) {
        uint96 amount = safe96(rawAmount, "Quick::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, uint rawAmount) external returns (bool) {
        address spender = msg.sender;
        uint96 spenderAllowance = allowances[src][spender];
        uint96 amount = safe96(rawAmount, "Quick::approve: amount exceeds 96 bits");

        if (spender != src && spenderAllowance != uint96(-1)) {
            uint96 newAllowance = sub96(spenderAllowance, amount, "Quick::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) public {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @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, uint nonce, uint expiry, uint8 v, bytes32 r, bytes32 s) public {
        bytes32 domainSeparator = keccak256(abi.encode(DOMAIN_TYPEHASH, keccak256(bytes(name)), getChainId(), address(this)));
        bytes32 structHash = keccak256(abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry));
        bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "Quick::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "Quick::delegateBySig: invalid nonce");
        require(now <= expiry, "Quick::delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }

    /**
     * @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, uint blockNumber) public view returns (uint96) {
        require(blockNumber < block.number, "Quick::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) internal {
        address currentDelegate = delegates[delegator];
        uint96 delegatorBalance = balances[delegator];
        delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _transferTokens(address src, address dst, uint96 amount) internal {
        require(src != address(0), "Quick::_transferTokens: cannot transfer from the zero address");
        require(dst != address(0), "Quick::_transferTokens: cannot transfer to the zero address");

        balances[src] = sub96(balances[src], amount, "Quick::_transferTokens: transfer amount exceeds balance");
        balances[dst] = add96(balances[dst], amount, "Quick::_transferTokens: transfer amount overflows");
        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, "Quick::_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, "Quick::_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, "Quick::_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(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function safe96(uint 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 (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }

    function _mint(address dst, uint rawAmount) internal {
        require(dst != address(0), "Quick::mint: cannot transfer to the zero address");

        // mint the amount
        uint96 amount = safe96(rawAmount, "Quick::mint: amount exceeds 96 bits");
        totalSupply = safe96(SafeMath.add(totalSupply, amount), "Quick::mint: totalSupply exceeds 96 bits");

        // transfer the amount to the recipient
        balances[dst] = add96(balances[dst], amount, "Quick::mint: transfer amount overflows");
        emit Transfer(address(0), dst, amount);

    }

    function _burn(address account, uint96 amount) internal {
        require(account != address(0), "Quick:: burn from the zero address");

        balances[account] = sub96(balances[account], amount, "Quick:: burn amount exceeds balance");
        totalSupply = sub96(safe96(totalSupply, "Quick:: totalSupply exceeds 96 bits"), amount, "Quick:: burn amount exceeds total supply");
        emit Transfer(account, address(0), amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"gateway_","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"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":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":[{"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":"delegatee","type":"address"}],"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"}],"name":"delegateBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"depositData","type":"bytes"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"gateway","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","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":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":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"rawAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"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":"uint256","name":"rawAmount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052600080553480156200001557600080fd5b506040516200316538038062003165833981016040819052620000389162000071565b600780546001600160a01b0319166001600160a01b0392909216919091179055620000c6565b80516200006b81620000ac565b92915050565b6000602082840312156200008457600080fd5b60006200009284846200005e565b949350505050565b60006001600160a01b0382166200006b565b620000b7816200009a565b8114620000c357600080fd5b50565b61308f80620000d66000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806370a08231116100e3578063c3cda5201161008c578063dd62ed3e11610066578063dd62ed3e14610345578063e7a324dc14610358578063f1127ed81461036057610198565b8063c3cda5201461030c578063cf2c52cb1461031f578063d505accf1461033257610198565b806395d89b41116100bd57806395d89b41146102de578063a9059cbb146102e6578063b4b5ea57146102f957610198565b806370a0823114610298578063782d6fe1146102ab5780637ecebe00146102cb57610198565b80632e1a7d4d11610145578063587cde1e1161011f578063587cde1e146102525780635c19a95c146102655780636fcfff451461027857610198565b80632e1a7d4d1461022057806330adf81f14610235578063313ce5671461023d57610198565b806318160ddd1161017657806318160ddd146101f057806320606b701461020557806323b872dd1461020d57610198565b806306fdde031461019d578063095ea7b3146101bb578063116191b6146101db575b600080fd5b6101a5610381565b6040516101b29190612b47565b60405180910390f35b6101ce6101c9366004612299565b6103ba565b6040516101b29190612a43565b6101e36104df565b6040516101b29190612a35565b6101f86104fb565b6040516101b29190612a51565b6101f8610501565b6101ce61021b36600461215a565b610518565b61023361022e366004612380565b6106bc565b005b6101f86106f0565b6102456106fc565b6040516101b29190612c51565b6101e36102603660046120fa565b610701565b6102336102733660046120fa565b610729565b61028b6102863660046120fa565b610736565b6040516101b29190612c28565b6101f86102a63660046120fa565b61074e565b6102be6102b9366004612299565b610784565b6040516101b29190612c6d565b6101f86102d93660046120fa565b610a6f565b6101a5610a81565b6101ce6102f4366004612299565b610aba565b6102be6103073660046120fa565b610af6565b61023361031a3660046122c9565b610ba4565b61023361032d366004612243565b610e29565b6102336103403660046121a7565b610ecf565b6101f8610353366004612120565b611304565b6101f861134a565b61037361036e366004612350565b611356565b6040516101b2929190612c36565b6040518060400160405280600981526020017f517569636b53776170000000000000000000000000000000000000000000000081525081565b6000807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83141561040c57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610431565b61042e83604051806060016040528060268152602001612e2660269139611391565b90505b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff891680855292529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104cb908590612c5f565b60405180910390a360019150505b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b60405161050d90612a1f565b604051809103902081565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602090815260408083203380855290835281842054825160608101909352602680845291936bffffffffffffffffffffffff9091169285926105829288929190612e2690830139611391565b90508673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156105ce57506bffffffffffffffffffffffff82811614155b156106a25760006105f883836040518060600160405280603e8152602001612ef8603e91396113e3565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152600160209081526040808320948a16808452949091529081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff86161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610698908590612c5f565b60405180910390a3505b6106ad878783611446565b600193505050505b9392505050565b60006106e082604051806060016040528060278152602001612dab60279139611391565b90506106ec33826116b2565b5050565b60405161050d90612a14565b601281565b60036020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6107333382611876565b50565b60056020526000908152604090205463ffffffff1681565b73ffffffffffffffffffffffffffffffffffffffff166000908152600260205260409020546bffffffffffffffffffffffff1690565b60004382106107c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612bc8565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604090205463ffffffff16806108035760009150506104d9565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601811685529252909120541683106108db5773ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff168352929052205464010000000090046bffffffffffffffffffffffff1690506104d9565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832083805290915290205463ffffffff168310156109235760009150506104d9565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff161115610a1757600282820363ffffffff1604810361097361206e565b5073ffffffffffffffffffffffffffffffffffffffff8716600090815260046020908152604080832063ffffffff8581168552908352928190208151808301909252549283168082526401000000009093046bffffffffffffffffffffffff1691810191909152908714156109f2576020015194506104d99350505050565b805163ffffffff16871115610a0957819350610a10565b6001820392505b5050610949565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260046020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60066020526000908152604090205481565b6040518060400160405280600581526020017f515549434b00000000000000000000000000000000000000000000000000000081525081565b600080610adf83604051806060016040528060278152602001612ed160279139611391565b9050610aec338583611446565b5060019392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526005602052604081205463ffffffff1680610b2e5760006106b5565b73ffffffffffffffffffffffffffffffffffffffff831660009081526004602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff169392505050565b6000604051610bb290612a1f565b60408051918290038220828201909152600982527f517569636b5377617000000000000000000000000000000000000000000000006020909201919091527f594d562b07e5639baeda43f9427a7d73488025602cf4b19cc0e4cec02e1718f8610c1961192a565b30604051602001610c2d9493929190612af7565b6040516020818303038152906040528051906020012090506000604051610c5390612a2a565b604051908190038120610c6e918a908a908a90602001612ab9565b60405160208183030381529060405280519060200120905060008282604051602001610c9b9291906129e3565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610cd89493929190612b2c565b6020604051602081039080840390855afa158015610cfa573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116610d72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612b78565b73ffffffffffffffffffffffffffffffffffffffff811660009081526006602052604090208054600181019091558914610dd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612b98565b87421115610e12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612bb8565b610e1c818b611876565b505050505b505050505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610e7a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612bf8565b6000610e8882840184612380565b90506000610eae8260405180606001604052806026815260200161302760269139611391565b9050610ec885826bffffffffffffffffffffffff1661192e565b5050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff861415610f2057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610f45565b610f4286604051806060016040528060258152602001612fcb60259139611391565b90505b6000604051610f5390612a1f565b60408051918290038220828201909152600982527f517569636b5377617000000000000000000000000000000000000000000000006020909201919091527f594d562b07e5639baeda43f9427a7d73488025602cf4b19cc0e4cec02e1718f8610fba61192a565b30604051602001610fce9493929190612af7565b6040516020818303038152906040528051906020012090506000604051610ff490612a14565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff8d166000908152600660209081529290208054600181019091556110439391928e928e928e9290918e9101612a5f565b604051602081830303815290604052805190602001209050600082826040516020016110709291906129e3565b6040516020818303038152906040528051906020012090506000600182898989604051600081526020016040526040516110ad9493929190612b2c565b6020604051602081039080840390855afa1580156110cf573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611147576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612be8565b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612ba8565b884211156111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612b88565b84600160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925876040516112ee9190612c5f565b60405180910390a3505050505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff91821660009081526001602090815260408083209390941682529190915220546bffffffffffffffffffffffff1690565b60405161050d90612a2a565b600460209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b6000816c0100000000000000000000000084106113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf9190612b47565b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff161115829061143e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf9190612b47565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316611493576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612bd8565b73ffffffffffffffffffffffffffffffffffffffff82166114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612c08565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260409182902054825160608101909352603780845261153d936bffffffffffffffffffffffff9092169285929190612ff0908301396113e3565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260026020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9687161790559286168252908290205482516060810190935260318084526115cf9491909116928592909190612dd290830139611ae1565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152600260205260409081902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff95909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611666908590612c5f565b60405180910390a373ffffffffffffffffffffffffffffffffffffffff8084166000908152600360205260408082205485841683529120546116ad92918216911683611b3c565b505050565b73ffffffffffffffffffffffffffffffffffffffff82166116ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612c18565b73ffffffffffffffffffffffffffffffffffffffff821660009081526002602090815260409182902054825160608101909352602380845261175c936bffffffffffffffffffffffff9092169285929190612fa8908301396113e3565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555061180f6117f0600054604051806060016040528060238152602001612f8560239139611391565b82604051806060016040528060288152602001612e81602891396113e3565b6bffffffffffffffffffffffff16600090815560405173ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061186a908590612c5f565b60405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260036020818152604080842080546002845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611924828483611b3c565b50505050565b4690565b73ffffffffffffffffffffffffffffffffffffffff821661197b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612b58565b600061199f82604051806060016040528060238152602001612e0360239139611391565b90506119dc6119be600054836bffffffffffffffffffffffff16611d83565b604051806060016040528060288152602001612ea960289139611391565b6bffffffffffffffffffffffff908116600090815573ffffffffffffffffffffffffffffffffffffffff8516815260026020908152604091829020548251606081019093526026808452611a409491909116928592909190612f5f90830139611ae1565b73ffffffffffffffffffffffffffffffffffffffff841660008181526002602052604080822080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff959095169490941790935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ad4908590612c5f565b60405180910390a3505050565b6000838301826bffffffffffffffffffffffff8087169083161015611b33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf9190612b47565b50949350505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b8657506000816bffffffffffffffffffffffff16115b156116ad5773ffffffffffffffffffffffffffffffffffffffff831615611c895773ffffffffffffffffffffffffffffffffffffffff831660009081526005602052604081205463ffffffff169081611be0576000611c50565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b90506000611c778285604051806060016040528060298152602001612f36602991396113e3565b9050611c8586848484611dc2565b5050505b73ffffffffffffffffffffffffffffffffffffffff8216156116ad5773ffffffffffffffffffffffffffffffffffffffff821660009081526005602052604081205463ffffffff169081611cde576000611d4e565b73ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b90506000611d758285604051806060016040528060288152602001612d8360289139611ae1565b9050610e2185848484611dc2565b6000828201838110156106b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf90612b68565b6000611de643604051806060016040528060358152602001612e4c6035913961202c565b905060008463ffffffff16118015611e5a575073ffffffffffffffffffffffffffffffffffffffff8516600090815260046020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b15611ef95773ffffffffffffffffffffffffffffffffffffffff851660009081526004602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880163ffffffff168452909152902080547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff166401000000006bffffffffffffffffffffffff851602179055611fd5565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000818152600483528781208c871682528352878120965187549451909516640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9587167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000958616179590951694909417909555938252600590935292909220805460018801909316929091169190911790555b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724848460405161201d929190612c7b565b60405180910390a25050505050565b60008164010000000084106113db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107bf9190612b47565b604080518082019091526000808252602082015290565b80356104d981612d53565b80356104d981612d67565b60008083601f8401126120ad57600080fd5b50813567ffffffffffffffff8111156120c557600080fd5b6020830191508360018202830111156120dd57600080fd5b9250929050565b80356104d981612d70565b80356104d981612d79565b60006020828403121561210c57600080fd5b60006121188484612085565b949350505050565b6000806040838503121561213357600080fd5b600061213f8585612085565b925050602061215085828601612085565b9150509250929050565b60008060006060848603121561216f57600080fd5b600061217b8686612085565b935050602061218c86828701612085565b925050604061219d86828701612090565b9150509250925092565b600080600080600080600060e0888a0312156121c257600080fd5b60006121ce8a8a612085565b97505060206121df8a828b01612085565b96505060406121f08a828b01612090565b95505060606122018a828b01612090565b94505060806122128a828b016120ef565b93505060a06122238a828b01612090565b92505060c06122348a828b01612090565b91505092959891949750929550565b60008060006040848603121561225857600080fd5b60006122648686612085565b935050602084013567ffffffffffffffff81111561228157600080fd5b61228d8682870161209b565b92509250509250925092565b600080604083850312156122ac57600080fd5b60006122b88585612085565b925050602061215085828601612090565b60008060008060008060c087890312156122e257600080fd5b60006122ee8989612085565b96505060206122ff89828a01612090565b955050604061231089828a01612090565b945050606061232189828a016120ef565b935050608061233289828a01612090565b92505060a061234389828a01612090565b9150509295509295509295565b6000806040838503121561236357600080fd5b600061236f8585612085565b9250506020612150858286016120e4565b60006020828403121561239257600080fd5b60006121188484612090565b6123a781612ca8565b82525050565b6123a781612cb3565b6123a781612cb8565b6123a76123cb82612cb8565b612cb8565b60006123db82612c96565b6123e58185612c9a565b93506123f5818560208601612cff565b6123fe81612d2b565b9093019392505050565b6000612415603083612c9a565b7f517569636b3a3a6d696e743a2063616e6e6f74207472616e7366657220746f2081527f746865207a65726f206164647265737300000000000000000000000000000000602082015260400192915050565b6000612474600283612ca3565b7f1901000000000000000000000000000000000000000000000000000000000000815260020192915050565b60006124ad601b83612c9a565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006124e6602783612c9a565b7f517569636b3a3a64656c656761746542795369673a20696e76616c696420736981527f676e617475726500000000000000000000000000000000000000000000000000602082015260400192915050565b6000612545602083612c9a565b7f517569636b3a3a7065726d69743a207369676e61747572652065787069726564815260200192915050565b600061257e602383612c9a565b7f517569636b3a3a64656c656761746542795369673a20696e76616c6964206e6f81527f6e63650000000000000000000000000000000000000000000000000000000000602082015260400192915050565b60006125dd601b83612c9a565b7f517569636b3a3a7065726d69743a20756e617574686f72697a65640000000000815260200192915050565b6000612616602783612c9a565b7f517569636b3a3a64656c656761746542795369673a207369676e61747572652081527f6578706972656400000000000000000000000000000000000000000000000000602082015260400192915050565b6000612675605283612ca3565b7f5065726d69742861646472657373206f776e65722c616464726573732073706581527f6e6465722c75696e743235362076616c75652c75696e74323536206e6f6e636560208201527f2c75696e7432353620646561646c696e65290000000000000000000000000000604082015260520192915050565b60006126fa602883612c9a565b7f517569636b3a3a6765745072696f72566f7465733a206e6f742079657420646581527f7465726d696e6564000000000000000000000000000000000000000000000000602082015260400192915050565b6000612759604383612ca3565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201527f6374290000000000000000000000000000000000000000000000000000000000604082015260430192915050565b60006127de603d83612c9a565b7f517569636b3a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e736665722066726f6d20746865207a65726f2061646472657373000000602082015260400192915050565b600061283d602083612c9a565b7f517569636b3a3a7065726d69743a20696e76616c6964207369676e6174757265815260200192915050565b6000612876600e83612c9a565b7f496e76616c696420616363657373000000000000000000000000000000000000815260200192915050565b60006128af603b83612c9a565b7f517569636b3a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207481527f72616e7366657220746f20746865207a65726f20616464726573730000000000602082015260400192915050565b600061290e602283612c9a565b7f517569636b3a3a206275726e2066726f6d20746865207a65726f20616464726581527f7373000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061296d603a83612ca3565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e7432353620657870697279290000000000006020820152603a0192915050565b6123a781612cd4565b6123a781612cdd565b6123a781612cf4565b6123a781612ce3565b60006129ee82612467565b91506129fa82856123bf565b602082019150612a0a82846123bf565b5060200192915050565b60006104d982612668565b60006104d98261274c565b60006104d982612960565b602081016104d9828461239e565b602081016104d982846123ad565b602081016104d982846123b6565b60c08101612a6d82896123b6565b612a7a602083018861239e565b612a87604083018761239e565b612a9460608301866123b6565b612aa160808301856123b6565b612aae60a08301846123b6565b979650505050505050565b60808101612ac782876123b6565b612ad4602083018661239e565b612ae160408301856123b6565b612aee60608301846123b6565b95945050505050565b60808101612b0582876123b6565b612b1260208301866123b6565b612b1f60408301856123b6565b612aee606083018461239e565b60808101612b3a82876123b6565b612ad460208301866129c8565b602080825281016106b581846123d0565b602080825281016104d981612408565b602080825281016104d9816124a0565b602080825281016104d9816124d9565b602080825281016104d981612538565b602080825281016104d981612571565b602080825281016104d9816125d0565b602080825281016104d981612609565b602080825281016104d9816126ed565b602080825281016104d9816127d1565b602080825281016104d981612830565b602080825281016104d981612869565b602080825281016104d9816128a2565b602080825281016104d981612901565b602081016104d982846129bf565b60408101612c4482856129bf565b6106b560208301846129da565b602081016104d982846129c8565b602081016104d982846129d1565b602081016104d982846129da565b60408101612c8982856129d1565b6106b560208301846129d1565b5190565b90815260200190565b919050565b60006104d982612cbb565b151590565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b60ff1690565b6bffffffffffffffffffffffff1690565b60006104d982612ce3565b60005b83811015612d1a578181015183820152602001612d02565b838111156119245750506000910152565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b612d5c81612ca8565b811461073357600080fd5b612d5c81612cb8565b612d5c81612cd4565b612d5c81612cdd56fe517569636b3a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f7773517569636b3a3a77697468647261773a20616d6f756e7420657863656564732039362062697473517569636b3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773517569636b3a3a6d696e743a20616d6f756e7420657863656564732039362062697473517569636b3a3a617070726f76653a20616d6f756e7420657863656564732039362062697473517569636b3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473517569636b3a3a206275726e20616d6f756e74206578636565647320746f74616c20737570706c79517569636b3a3a6d696e743a20746f74616c537570706c7920657863656564732039362062697473517569636b3a3a7472616e736665723a20616d6f756e7420657863656564732039362062697473517569636b3a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e6365517569636b3a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f7773517569636b3a3a6d696e743a207472616e7366657220616d6f756e74206f766572666c6f7773517569636b3a3a20746f74616c537570706c7920657863656564732039362062697473517569636b3a3a206275726e20616d6f756e7420657863656564732062616c616e6365517569636b3a3a7065726d69743a20616d6f756e7420657863656564732039362062697473517569636b3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e6365517569636b3a3a6465706f7369743a20616d6f756e7420657863656564732039362062697473a365627a7a7231582004be273fa14404ba3c64be0b2176052ac3aa9bdff9c9aba20c652b582c3624f06c6578706572696d656e74616cf564736f6c63430005100040000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa

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

000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa

-----Decoded View---------------
Arg [0] : gateway_ (address): 0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa


Deployed ByteCode Sourcemap

6777:16717:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6777:16717:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6849:41;;;:::i;:::-;;;;;;;;;;;;;;;;11682:420;;;;;;;;;:::i;:::-;;;;;;;;8742:22;;;:::i;:::-;;;;;;;;7152:27;;;:::i;:::-;;;;;;;;8053:122;;;:::i;14774:674::-;;;;;;;;;:::i;10587:177::-;;;;;;;;;:::i;:::-;;8476:137;;;:::i;7053:35::-;;;:::i;:::-;;;;;;;;7503:45;;;;;;;;;:::i;15596:102::-;;;;;;;;;:::i;7931:49::-;;;;;;;;;:::i;:::-;;;;;;;;13853:108;;;;;;;;;:::i;17778:1219::-;;;;;;;;;:::i;:::-;;;;;;;;8694:39;;;;;;;;;:::i;6951:::-;;;:::i;14225:239::-;;;;;;;;;:::i;17125:222::-;;;;;;;;;:::i;16132:792::-;;;;;;;;;:::i;9996:333::-;;;;;;;;;:::i;12592:1058::-;;;;;;;;;:::i;11068:136::-;;;;;;;;;:::i;8269:117::-;;;:::i;7792:70::-;;;;;;;;;:::i;:::-;;;;;;;;;6849:41;;;;;;;;;;;;;;;;;;;:::o;11682:420::-;11750:4;11767:13;11813:2;11795:9;:21;11791:174;;;-1:-1:-1;11849:2:0;11791:174;;;11894:59;11901:9;11894:59;;;;;;;;;;;;;;;;;:6;:59::i;:::-;11885:68;;11791:174;11988:10;11977:22;;;;:10;:22;;;;;;;;;:31;;;;;;;;;;;:40;;;;;;;;;;12035:37;;11977:31;;11988:10;12035:37;;;;11977:40;;12035:37;;;;;;;;;;12090:4;12083:11;;;11682:420;;;;;:::o;8742:22::-;;;;;;:::o;7152:27::-;;;;:::o;8053:122::-;8095:80;;;;;;;;;;;;;;8053:122;:::o;14774:674::-;14938:15;;;14856:4;14938:15;;;:10;:15;;;;;;;;14891:10;14938:24;;;;;;;;;;14989:59;;;;;;;;;;;;14891:10;;14938:24;;;;;14856:4;;14989:59;;14996:9;;14989:59;;;;;;;:6;:59::i;:::-;14973:75;;15076:3;15065:14;;:7;:14;;;;:48;;;;-1:-1:-1;15083:30:0;;;;;;15065:48;15061:312;;;15130:19;15152:97;15158:16;15176:6;15152:97;;;;;;;;;;;;;;;;;:5;:97::i;:::-;15264:15;;;;;;;;:10;:15;;;;;;;;:24;;;;;;;;;;;;;;:39;;;;;;;;;;15325:36;15264:39;;-1:-1:-1;15264:24:0;;15325:36;;;;15264:39;;15325:36;;;;;;;;;;15061:312;;15385:33;15401:3;15406;15411:6;15385:15;:33::i;:::-;15436:4;15429:11;;;;;14774:674;;;;;;:::o;10587:177::-;10644:13;10660:60;10667:9;10660:60;;;;;;;;;;;;;;;;;:6;:60::i;:::-;10644:76;;10731:25;10737:10;10749:6;10731:5;:25::i;:::-;10587:177;;:::o;8476:137::-;8518:95;;;;;;7053:35;7086:2;7053:35;:::o;7503:45::-;;;;;;;;;;;;;;;:::o;15596:102::-;15658:32;15668:10;15680:9;15658;:32::i;:::-;15596:102;:::o;7931:49::-;;;;;;;;;;;;;;;:::o;13853:108::-;13936:17;;13912:4;13936:17;;;:8;:17;;;;;;;;;13853:108::o;17778:1219::-;17857:6;17898:12;17884:11;:26;17876:79;;;;;;;;;;;;;;;;;;;;;;17990:23;;;17968:19;17990:23;;;:14;:23;;;;;;;;18028:17;18024:58;;18069:1;18062:8;;;;;18024:58;18142:20;;;;;;;:11;:20;;;;;;;;:38;18163:16;;;18142:38;;;;;;;;;:48;;:63;-1:-1:-1;18138:147:0;;18229:20;;;;;;;:11;:20;;;;;;;;18250:16;;;;;18229:38;;;;;;;;:44;;;;;;;-1:-1:-1;18222:51:0;;18138:147;18346:20;;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;18342:88:0;;;18417:1;18410:8;;;;;18342:88;18442:12;18484:16;;;18511:428;18526:5;18518:13;;:5;:13;;;18511:428;;;18590:1;18573:13;;;18572:19;;;18564:27;;18633:20;;:::i;:::-;-1:-1:-1;18656:20:0;;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;18633:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18703:27;;18699:229;;;18758:8;;;;-1:-1:-1;18751:15:0;;-1:-1:-1;;;;18751:15:0;18699:229;18792:12;;:26;;;-1:-1:-1;18788:140:0;;;18847:6;18839:14;;18788:140;;;18911:1;18902:6;:10;18894:18;;18788:140;18511:428;;;;;-1:-1:-1;18956:20:0;;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;;;;;-1:-1:-1;;17778:1219:0;;;;:::o;8694:39::-;;;;;;;;;;;;;:::o;6951:::-;;;;;;;;;;;;;;;;;;;:::o;14225:239::-;14290:4;14307:13;14323:60;14330:9;14323:60;;;;;;;;;;;;;;;;;:6;:60::i;:::-;14307:76;;14394:40;14410:10;14422:3;14427:6;14394:15;:40::i;:::-;-1:-1:-1;14452:4:0;;14225:239;-1:-1:-1;;;14225:239:0:o;17125:222::-;17231:23;;;17190:6;17231:23;;;:14;:23;;;;;;;;17272:16;:67;;17338:1;17272:67;;;17291:20;;;;;;;:11;:20;;;;;;;;17312:16;;;17291:38;;;;;;;;;:44;;;;;;17265:74;17125:222;-1:-1:-1;;;17125:222:0:o;16132:792::-;16248:23;8095:80;;;;;;;;;;;;;;;;16328:4;;;;;;;;;;;;;;;;;;16312:22;16336:12;:10;:12::i;:::-;16358:4;16284:80;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16284:80:0;;;16274:91;;;;;;16248:117;;16376:18;8315:71;;;;;;;;;;;;;;;16407:57;;16439:9;;16450:5;;16457:6;;16407:57;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16407:57:0;;;16397:68;;;;;;16376:89;;16476:14;16532:15;16549:10;16503:57;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16503:57:0;;;16493:68;;;;;;16476:85;;16572:17;16592:26;16602:6;16610:1;16613;16616;16592:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;16592:26:0;;;;;;-1:-1:-1;;16637:23:0;;;16629:75;;;;;;;;;;;;;;16732:17;;;;;;;:6;:17;;;;;:19;;;;;;;;16723:28;;16715:76;;;;;;;;;;;;;;16817:6;16810:3;:13;;16802:65;;;;;;;;;;;;;;16885:31;16895:9;16906;16885;:31::i;:::-;16878:38;;;;16132:792;;;;;;;:::o;9996:333::-;10111:7;;;;10097:10;:21;10089:49;;;;;;;;;;;;;;10149:17;10169:34;;;;10180:11;10169:34;;;10149:54;;10214:13;10230:59;10237:9;10230:59;;;;;;;;;;;;;;;;;:6;:59::i;:::-;10214:75;;10302:19;10308:4;10314:6;10302:19;;:5;:19::i;:::-;9996:333;;;;;:::o;12592:1058::-;12722:13;12768:2;12750:9;:21;12746:173;;;-1:-1:-1;12804:2:0;12746:173;;;12849:58;12856:9;12849:58;;;;;;;;;;;;;;;;;:6;:58::i;:::-;12840:67;;12746:173;12931:23;8095:80;;;;;;;;;;;;;;;;13011:4;;;;;;;;;;;;;;;;;;12995:22;13019:12;:10;:12::i;:::-;13041:4;12967:80;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;12967:80:0;;;12957:91;;;;;;12931:117;;13059:18;8518:95;;;;;;;;;;;;;;;;13145:13;;;;;;;:6;:13;;;;;;;:15;;;;;;;;13090:81;;8518:95;;13118:5;;13125:7;;13134:9;;13145:15;;13162:8;;13090:81;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13090:81:0;;;13080:92;;;;;;13059:113;;13183:14;13239:15;13256:10;13210:57;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;13210:57:0;;;13200:68;;;;;;13183:85;;13279:17;13299:26;13309:6;13317:1;13320;13323;13299:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;13299:26:0;;;;;;-1:-1:-1;;13344:23:0;;;13336:68;;;;;;;;;;;;;;13436:5;13423:18;;:9;:18;;;13415:58;;;;;;;;;;;;;;13499:8;13492:3;:15;;13484:60;;;;;;;;;;;;;;13586:6;13557:10;:17;13568:5;13557:17;;;;;;;;;;;;;;;:26;13575:7;13557:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;13626:7;13610:32;;13619:5;13610:32;;;13635:6;13610:32;;;;;;;;;;;;;;;12592:1058;;;;;;;;;;;;:::o;11068:136::-;11168:19;;;;11144:4;11168:19;;;:10;:19;;;;;;;;:28;;;;;;;;;;;;;;;11068:136::o;8269:117::-;8315:71;;;;;;7792:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21770:161::-;21845:6;21883:12;21876:5;21872:9;;21864:32;;;;;;;;;;;;;;;-1:-1:-1;21921:1:0;;21770:161;-1:-1:-1;;21770:161:0:o;22135:165::-;22221:6;22253:1;22248:6;;:1;:6;;;;22256:12;22240:29;;;;;;;;;;;;;;;;-1:-1:-1;;;22287:5:0;;;22135:165::o;19388:618::-;19482:17;;;19474:91;;;;;;;;;;;;;;19584:17;;;19576:89;;;;;;;;;;;;;;19700:13;;;;;;;:8;:13;;;;;;;;;;19694:87;;;;;;;;;;;;;;19700:13;;;;;19715:6;;19694:87;;;;;;;:5;:87::i;:::-;19678:13;;;;;;;;:8;:13;;;;;;;;:103;;;;;;;;;;;19814:13;;;;;;;;;;19808:81;;;;;;;;;;;;;;19814:13;;;;;19829:6;;19808:81;;;;;;;;:5;:81::i;:::-;19792:13;;;;;;;;:8;:13;;;;;;;:97;;;;;;;;;;;;;;;;19905:26;;;;;;;;;;19924:6;;19905:26;;;;;;;;;;19959:14;;;;;;;;:9;:14;;;;;;;19975;;;;;;;;19944:54;;19959:14;;;;19975;19991:6;19944:14;:54::i;:::-;19388:618;;;:::o;23049:442::-;23124:21;;;23116:68;;;;;;;;;;;;;;23223:17;;;;;;;:8;:17;;;;;;;;;;23217:71;;;;;;;;;;;;;;23223:17;;;;;23242:6;;23217:71;;;;;;;:5;:71::i;:::-;23197:8;:17;23206:7;23197:17;;;;;;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;23313:117;23319:58;23326:11;;23319:58;;;;;;;;;;;;;;;;;:6;:58::i;:::-;23379:6;23313:117;;;;;;;;;;;;;;;;;:5;:117::i;:::-;23299:131;;:11;:131;;;23446:37;;;;;;;;;;23476:6;;23446:37;;;;;;;;;;23049:442;;:::o;19005:375::-;19108:20;;;;19082:23;19108:20;;;:9;:20;;;;;;;;;;19165:8;:19;;;;;;19195:20;;;;:32;;;;;;;;;;;19245:54;;19108:20;;;;;19165:19;;;;;19195:32;;19108:20;;;19245:54;;19082:23;19245:54;19312:60;19327:15;19344:9;19355:16;19312:14;:60::i;:::-;19005:375;;;;:::o;22308:153::-;22418:9;22308:153;:::o;22469:572::-;22541:17;;;22533:78;;;;;;;;;;;;;;22652:13;22668:56;22675:9;22668:56;;;;;;;;;;;;;;;;;:6;:56::i;:::-;22652:72;;22749:85;22756:33;22769:11;;22782:6;22756:33;;:12;:33::i;:::-;22749:85;;;;;;;;;;;;;;;;;:6;:85::i;:::-;22735:99;;;;:11;:99;;;22918:13;;;;;:8;:13;;;;;;;;;;22912:70;;;;;;;;;;;;;;22918:13;;;;;22933:6;;22912:70;;;;;;;;:5;:70::i;:::-;22896:13;;;;;;;:8;:13;;;;;;:86;;;;;;;;;;;;;;;;22998:33;;22896:13;;;22998:33;;;;23024:6;;22998:33;;;;;;;;;;22469:572;;;:::o;21939:188::-;22025:6;22055:5;;;22087:12;22079:6;;;;;;;;;22071:29;;;;;;;;;;;;;;;-1:-1:-1;22118:1:0;21939:188;-1:-1:-1;;;;21939:188:0:o;20014:941::-;20119:6;20109:16;;:6;:16;;;;:30;;;;;20138:1;20129:6;:10;;;20109:30;20105:843;;;20160:20;;;;20156:383;;20220:22;;;20201:16;20220:22;;;:14;:22;;;;;;;;;20280:13;:60;;20339:1;20280:60;;;20296:19;;;;;;;:11;:19;;;;;;;;20316:13;;;20296:34;;;;;;;;;:40;;;;;;20280:60;20261:79;;20359:16;20378:69;20384:9;20395:6;20378:69;;;;;;;;;;;;;;;;;:5;:69::i;:::-;20359:88;;20466:57;20483:6;20491:9;20502;20513;20466:16;:57::i;:::-;20156:383;;;;20559:20;;;;20555:382;;20619:22;;;20600:16;20619:22;;;:14;:22;;;;;;;;;20679:13;:60;;20738:1;20679:60;;;20695:19;;;;;;;:11;:19;;;;;;;;20715:13;;;20695:34;;;;;;;;;:40;;;;;;20679:60;20660:79;;20758:16;20777:68;20783:9;20794:6;20777:68;;;;;;;;;;;;;;;;;:5;:68::i;:::-;20758:87;;20864:57;20881:6;20889:9;20900;20911;20864:16;:57::i;1163:181::-;1221:7;1253:5;;;1277:6;;;;1269:46;;;;;;;;;;;;;20963:630;21081:18;21102:77;21109:12;21102:77;;;;;;;;;;;;;;;;;:6;:77::i;:::-;21081:98;;21209:1;21194:12;:16;;;:85;;;;-1:-1:-1;21214:22:0;;;;;;;:11;:22;;;;;;;;:65;21237:16;;;21214:40;;;;;;;;;:50;:65;;;:50;;:65;21194:85;21190:329;;;21294:22;;;;;;;:11;:22;;;;;;;;21317:16;;;21294:40;;;;;;;;;:57;;;;;;;;;;;;21190:329;;;21419:33;;;;;;;;;;;;;;;;;;;;;;;;;21380:22;;;-1:-1:-1;21380:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21465:25;;;:14;:25;;;;;;;:44;;21380:72;21493:16;;21465:44;;;;;;;;;;;;;21190:329;21555:9;21534:51;;;21566:8;21576;21534:51;;;;;;;;;;;;;;;;20963:630;;;;;:::o;21601:161::-;21676:6;21714:12;21707:5;21703:9;;21695:32;;;;;;;;;;;;;;6777:16717;;;;;;;;;;-1:-1:-1;6777:16717:0;;;;;;;;:::o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:130;209:20;;234:33;209:20;234:33;;293:336;;;407:3;400:4;392:6;388:17;384:27;374:2;;425:1;422;415:12;374:2;-1:-1;445:20;;485:18;474:30;;471:2;;;517:1;514;507:12;471:2;551:4;543:6;539:17;527:29;;602:3;594:4;586:6;582:17;572:8;568:32;565:41;562:2;;;619:1;616;609:12;562:2;367:262;;;;;;774:128;840:20;;865:32;840:20;865:32;;909:126;974:20;;999:31;974:20;999:31;;1042:241;;1146:2;1134:9;1125:7;1121:23;1117:32;1114:2;;;1162:1;1159;1152:12;1114:2;1197:1;1214:53;1259:7;1239:9;1214:53;;;1204:63;1108:175;-1:-1;;;;1108:175;1290:366;;;1411:2;1399:9;1390:7;1386:23;1382:32;1379:2;;;1427:1;1424;1417:12;1379:2;1462:1;1479:53;1524:7;1504:9;1479:53;;;1469:63;;1441:97;1569:2;1587:53;1632:7;1623:6;1612:9;1608:22;1587:53;;;1577:63;;1548:98;1373:283;;;;;;1663:491;;;;1801:2;1789:9;1780:7;1776:23;1772:32;1769:2;;;1817:1;1814;1807:12;1769:2;1852:1;1869:53;1914:7;1894:9;1869:53;;;1859:63;;1831:97;1959:2;1977:53;2022:7;2013:6;2002:9;1998:22;1977:53;;;1967:63;;1938:98;2067:2;2085:53;2130:7;2121:6;2110:9;2106:22;2085:53;;;2075:63;;2046:98;1763:391;;;;;;2161:991;;;;;;;;2365:3;2353:9;2344:7;2340:23;2336:33;2333:2;;;2382:1;2379;2372:12;2333:2;2417:1;2434:53;2479:7;2459:9;2434:53;;;2424:63;;2396:97;2524:2;2542:53;2587:7;2578:6;2567:9;2563:22;2542:53;;;2532:63;;2503:98;2632:2;2650:53;2695:7;2686:6;2675:9;2671:22;2650:53;;;2640:63;;2611:98;2740:2;2758:53;2803:7;2794:6;2783:9;2779:22;2758:53;;;2748:63;;2719:98;2848:3;2867:51;2910:7;2901:6;2890:9;2886:22;2867:51;;;2857:61;;2827:97;2955:3;2974:53;3019:7;3010:6;2999:9;2995:22;2974:53;;;2964:63;;2934:99;3064:3;3083:53;3128:7;3119:6;3108:9;3104:22;3083:53;;;3073:63;;3043:99;2327:825;;;;;;;;;;;3159:490;;;;3299:2;3287:9;3278:7;3274:23;3270:32;3267:2;;;3315:1;3312;3305:12;3267:2;3350:1;3367:53;3412:7;3392:9;3367:53;;;3357:63;;3329:97;3485:2;3474:9;3470:18;3457:32;3509:18;3501:6;3498:30;3495:2;;;3541:1;3538;3531:12;3495:2;3569:64;3625:7;3616:6;3605:9;3601:22;3569:64;;;3559:74;;;;3436:203;3261:388;;;;;;3656:366;;;3777:2;3765:9;3756:7;3752:23;3748:32;3745:2;;;3793:1;3790;3783:12;3745:2;3828:1;3845:53;3890:7;3870:9;3845:53;;;3835:63;;3807:97;3935:2;3953:53;3998:7;3989:6;3978:9;3974:22;3953:53;;4029:865;;;;;;;4216:3;4204:9;4195:7;4191:23;4187:33;4184:2;;;4233:1;4230;4223:12;4184:2;4268:1;4285:53;4330:7;4310:9;4285:53;;;4275:63;;4247:97;4375:2;4393:53;4438:7;4429:6;4418:9;4414:22;4393:53;;;4383:63;;4354:98;4483:2;4501:53;4546:7;4537:6;4526:9;4522:22;4501:53;;;4491:63;;4462:98;4591:2;4609:51;4652:7;4643:6;4632:9;4628:22;4609:51;;;4599:61;;4570:96;4697:3;4716:53;4761:7;4752:6;4741:9;4737:22;4716:53;;;4706:63;;4676:99;4806:3;4825:53;4870:7;4861:6;4850:9;4846:22;4825:53;;;4815:63;;4785:99;4178:716;;;;;;;;;4901:364;;;5021:2;5009:9;5000:7;4996:23;4992:32;4989:2;;;5037:1;5034;5027:12;4989:2;5072:1;5089:53;5134:7;5114:9;5089:53;;;5079:63;;5051:97;5179:2;5197:52;5241:7;5232:6;5221:9;5217:22;5197:52;;5272:241;;5376:2;5364:9;5355:7;5351:23;5347:32;5344:2;;;5392:1;5389;5382:12;5344:2;5427:1;5444:53;5489:7;5469:9;5444:53;;5520:113;5603:24;5621:5;5603:24;;;5598:3;5591:37;5585:48;;;5640:104;5717:21;5732:5;5717:21;;5751:113;5834:24;5852:5;5834:24;;5871:152;5972:45;5992:24;6010:5;5992:24;;;5972:45;;6030:347;;6142:39;6175:5;6142:39;;;6193:71;6257:6;6252:3;6193:71;;;6186:78;;6269:52;6314:6;6309:3;6302:4;6295:5;6291:16;6269:52;;;6342:29;6364:6;6342:29;;;6333:39;;;;6122:255;-1:-1;;;6122:255;6731:385;;6891:67;6955:2;6950:3;6891:67;;;6991:34;6971:55;;7060:18;7055:2;7046:12;;7039:40;7107:2;7098:12;;6877:239;-1:-1;;6877:239;7125:398;;7303:84;7385:1;7380:3;7303:84;;;7420:66;7400:87;;7515:1;7506:11;;7289:234;-1:-1;;7289:234;7532:327;;7692:67;7756:2;7751:3;7692:67;;;7792:29;7772:50;;7850:2;7841:12;;7678:181;-1:-1;;7678:181;7868:376;;8028:67;8092:2;8087:3;8028:67;;;8128:34;8108:55;;8197:9;8192:2;8183:12;;8176:31;8235:2;8226:12;;8014:230;-1:-1;;8014:230;8253:332;;8413:67;8477:2;8472:3;8413:67;;;8513:34;8493:55;;8576:2;8567:12;;8399:186;-1:-1;;8399:186;8594:372;;8754:67;8818:2;8813:3;8754:67;;;8854:34;8834:55;;8923:5;8918:2;8909:12;;8902:27;8957:2;8948:12;;8740:226;-1:-1;;8740:226;8975:327;;9135:67;9199:2;9194:3;9135:67;;;9235:29;9215:50;;9293:2;9284:12;;9121:181;-1:-1;;9121:181;9311:376;;9471:67;9535:2;9530:3;9471:67;;;9571:34;9551:55;;9640:9;9635:2;9626:12;;9619:31;9678:2;9669:12;;9457:230;-1:-1;;9457:230;9696:492;;9874:85;9956:2;9951:3;9874:85;;;9992:34;9972:55;;10061:34;10056:2;10047:12;;10040:56;10130:20;10125:2;10116:12;;10109:42;10179:2;10170:12;;9860:328;-1:-1;;9860:328;10197:377;;10357:67;10421:2;10416:3;10357:67;;;10457:34;10437:55;;10526:10;10521:2;10512:12;;10505:32;10565:2;10556:12;;10343:231;-1:-1;;10343:231;10583:477;;10761:85;10843:2;10838:3;10761:85;;;10879:34;10859:55;;10948:34;10943:2;10934:12;;10927:56;11017:5;11012:2;11003:12;;10996:27;11051:2;11042:12;;10747:313;-1:-1;;10747:313;11069:398;;11229:67;11293:2;11288:3;11229:67;;;11329:34;11309:55;;11398:31;11393:2;11384:12;;11377:53;11458:2;11449:12;;11215:252;-1:-1;;11215:252;11476:332;;11636:67;11700:2;11695:3;11636:67;;;11736:34;11716:55;;11799:2;11790:12;;11622:186;-1:-1;;11622:186;11817:314;;11977:67;12041:2;12036:3;11977:67;;;12077:16;12057:37;;12122:2;12113:12;;11963:168;-1:-1;;11963:168;12140:396;;12300:67;12364:2;12359:3;12300:67;;;12400:34;12380:55;;12469:29;12464:2;12455:12;;12448:51;12527:2;12518:12;;12286:250;-1:-1;;12286:250;12545:371;;12705:67;12769:2;12764:3;12705:67;;;12805:34;12785:55;;12874:4;12869:2;12860:12;;12853:26;12907:2;12898:12;;12691:225;-1:-1;;12691:225;12925:431;;13103:85;13185:2;13180:3;13103:85;;;13221:34;13201:55;;13290:28;13285:2;13276:12;;13269:50;13347:2;13338:12;;13089:267;-1:-1;;13089:267;13484:110;13565:23;13582:5;13565:23;;13601:107;13680:22;13696:5;13680:22;;13715:124;13797:36;13827:5;13797:36;;13846:110;13927:23;13944:5;13927:23;;13963:650;;14218:148;14362:3;14218:148;;;14211:155;;14377:75;14448:3;14439:6;14377:75;;;14474:2;14469:3;14465:12;14458:19;;14488:75;14559:3;14550:6;14488:75;;;-1:-1;14585:2;14576:12;;14199:414;-1:-1;;14199:414;14620:372;;14819:148;14963:3;14819:148;;14999:372;;15198:148;15342:3;15198:148;;15378:372;;15577:148;15721:3;15577:148;;15757:213;15875:2;15860:18;;15889:71;15864:9;15933:6;15889:71;;15977:201;16089:2;16074:18;;16103:65;16078:9;16141:6;16103:65;;16185:213;16303:2;16288:18;;16317:71;16292:9;16361:6;16317:71;;16405:771;16663:3;16648:19;;16678:71;16652:9;16722:6;16678:71;;;16760:72;16828:2;16817:9;16813:18;16804:6;16760:72;;;16843;16911:2;16900:9;16896:18;16887:6;16843:72;;;16926;16994:2;16983:9;16979:18;16970:6;16926:72;;;17009:73;17077:3;17066:9;17062:19;17053:6;17009:73;;;17093;17161:3;17150:9;17146:19;17137:6;17093:73;;;16634:542;;;;;;;;;;17183:547;17385:3;17370:19;;17400:71;17374:9;17444:6;17400:71;;;17482:72;17550:2;17539:9;17535:18;17526:6;17482:72;;;17565;17633:2;17622:9;17618:18;17609:6;17565:72;;;17648;17716:2;17705:9;17701:18;17692:6;17648:72;;;17356:374;;;;;;;;17737:547;17939:3;17924:19;;17954:71;17928:9;17998:6;17954:71;;;18036:72;18104:2;18093:9;18089:18;18080:6;18036:72;;;18119;18187:2;18176:9;18172:18;18163:6;18119:72;;;18202;18270:2;18259:9;18255:18;18246:6;18202:72;;18291:539;18489:3;18474:19;;18504:71;18478:9;18548:6;18504:71;;;18586:68;18650:2;18639:9;18635:18;18626:6;18586:68;;18837:293;18971:2;18985:47;;;18956:18;;19046:74;18956:18;19106:6;19046:74;;19445:407;19636:2;19650:47;;;19621:18;;19711:131;19621:18;19711:131;;19859:407;20050:2;20064:47;;;20035:18;;20125:131;20035:18;20125:131;;20273:407;20464:2;20478:47;;;20449:18;;20539:131;20449:18;20539:131;;20687:407;20878:2;20892:47;;;20863:18;;20953:131;20863:18;20953:131;;21101:407;21292:2;21306:47;;;21277:18;;21367:131;21277:18;21367:131;;21515:407;21706:2;21720:47;;;21691:18;;21781:131;21691:18;21781:131;;21929:407;22120:2;22134:47;;;22105:18;;22195:131;22105:18;22195:131;;22343:407;22534:2;22548:47;;;22519:18;;22609:131;22519:18;22609:131;;22757:407;22948:2;22962:47;;;22933:18;;23023:131;22933:18;23023:131;;23171:407;23362:2;23376:47;;;23347:18;;23437:131;23347:18;23437:131;;23585:407;23776:2;23790:47;;;23761:18;;23851:131;23761:18;23851:131;;23999:407;24190:2;24204:47;;;24175:18;;24265:131;24175:18;24265:131;;24413:407;24604:2;24618:47;;;24589:18;;24679:131;24589:18;24679:131;;25047:209;25163:2;25148:18;;25177:69;25152:9;25219:6;25177:69;;25263:316;25405:2;25390:18;;25419:69;25394:9;25461:6;25419:69;;;25499:70;25565:2;25554:9;25550:18;25541:6;25499:70;;25586:205;25700:2;25685:18;;25714:67;25689:9;25754:6;25714:67;;25798:211;25915:2;25900:18;;25929:70;25904:9;25972:6;25929:70;;26016:209;26132:2;26117:18;;26146:69;26121:9;26188:6;26146:69;;26232:320;26376:2;26361:18;;26390:70;26365:9;26433:6;26390:70;;;26471:71;26538:2;26527:9;26523:18;26514:6;26471:71;;26559:118;26643:12;;26614:63;26814:163;26917:19;;;26966:4;26957:14;;26910:67;26986:145;27122:3;27100:31;-1:-1;27100:31;27139:91;;27201:24;27219:5;27201:24;;27237:85;27303:13;27296:21;;27279:43;27329:72;27391:5;27374:27;27408:121;27481:42;27470:54;;27453:76;27615:88;27687:10;27676:22;;27659:44;27710:81;27781:4;27770:16;;27753:38;27798:104;27870:26;27859:38;;27842:60;27909:106;;27987:23;28004:5;27987:23;;28023:268;28088:1;28095:101;28109:6;28106:1;28103:13;28095:101;;;28176:11;;;28170:18;28157:11;;;28150:39;28131:2;28124:10;28095:101;;;28211:6;28208:1;28205:13;28202:2;;;-1:-1;;28276:1;28258:16;;28251:27;28072:219;28380:97;28468:2;28448:14;28464:7;28444:28;;28428:49;28485:117;28554:24;28572:5;28554:24;;;28547:5;28544:35;28534:2;;28593:1;28590;28583:12;28609:117;28678:24;28696:5;28678:24;;28857:115;28925:23;28942:5;28925:23;;28979:113;29046:22;29062:5;29046:22;

Swarm Source

bzzr://04be273fa14404ba3c64be0b2176052ac3aa9bdff9c9aba20c652b582c3624f0
Loading