Token DeFi For Dummies

Overview [ERC-20]

Max Total Supply:
1,100 DEFIFD

Holders:
2

Transfers:
-

Profile Summary

 
Contract:
0xc325b0C0e7fC36e227C88b0a9e18cfA6809f68b60xc325b0C0e7fC36e227C88b0a9e18cfA6809f68b6

Decimals:
18
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Crowdfund

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-07-02
*/

// File: @openzeppelin/[email protected]/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/[email protected]/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/[email protected]/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/[email protected]/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: Crowdfund.sol

pragma solidity ^0.8.0;


contract Crowdfund is ERC20 {
    event LogReceive(address _from, uint256 amount);
    event LogWithdraw(address _to, uint256 amount);

    address public founder;
    uint256 public constant rate = 100;
    
    constructor() ERC20("DeFi For Dummies", "DEFIFD"){
        founder = msg.sender;
        _mint(founder, 1000*1000000000000000000);
    }
    
    receive() external payable {
        emit LogReceive(msg.sender, msg.value);
        _mint(msg.sender, msg.value * rate);
    }

    function withdraw(address payable _to, uint256 amount) public {
        require(msg.sender == founder, "not the founder");
        require(address(this).balance >= amount, "insufficient funds");
        _to.transfer(amount);
        emit LogWithdraw(_to, amount);
    }
}

Contract ABI

[{"inputs":[],"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":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogReceive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogWithdraw","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"founder","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280601081526020017f4465466920466f722044756d6d696573000000000000000000000000000000008152506040518060400160405280600681526020017f4445464946440000000000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620002b8565b508060049080519060200190620000af929190620002b8565b50505033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000130600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16683635c9adc5dea000006200013660201b60201c565b62000513565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620001a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200019f90620003c9565b60405180910390fd5b620001bc60008383620002ae60201b60201c565b8060026000828254620001d0919062000424565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000227919062000424565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200028e919062000492565b60405180910390a3620002aa60008383620002b360201b60201c565b5050565b505050565b505050565b828054620002c690620004de565b90600052602060002090601f016020900481019282620002ea576000855562000336565b82601f106200030557805160ff191683800117855562000336565b8280016001018555821562000336579182015b828111156200033557825182559160200191906001019062000318565b5b50905062000345919062000349565b5090565b5b80821115620003645760008160009055506001016200034a565b5090565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620003b1601f8362000368565b9150620003be8262000379565b602082019050919050565b60006020820190508181036000830152620003e481620003a2565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200043182620003eb565b91506200043e83620003eb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620004765762000475620003f5565b5b828201905092915050565b6200048c81620003eb565b82525050565b6000602082019050620004a9600083018462000481565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004f757607f821691505b6020821081036200050d576200050c620004af565b5b50919050565b6119d780620005236000396000f3fe6080604052600436106100e15760003560e01c80634d853ee51161007f578063a457c2d711610059578063a457c2d714610332578063a9059cbb1461036f578063dd62ed3e146103ac578063f3fef3a3146103e957610137565b80634d853ee51461029f57806370a08231146102ca57806395d89b411461030757610137565b806323b872dd116100bb57806323b872dd146101cf5780632c4e722e1461020c578063313ce56714610237578063395093511461026257610137565b806306fdde031461013c578063095ea7b31461016757806318160ddd146101a457610137565b36610137577f98c44cd71a4f8250380570aaf8bf1f0fd2a19bc3428a18a782e9e4d6c1928b133334604051610117929190610f5c565b60405180910390a1610135336064346101309190610fb4565b610412565b005b600080fd5b34801561014857600080fd5b50610151610571565b60405161015e91906110a7565b60405180910390f35b34801561017357600080fd5b5061018e60048036038101906101899190611126565b610603565b60405161019b9190611181565b60405180910390f35b3480156101b057600080fd5b506101b9610626565b6040516101c6919061119c565b60405180910390f35b3480156101db57600080fd5b506101f660048036038101906101f191906111b7565b610630565b6040516102039190611181565b60405180910390f35b34801561021857600080fd5b5061022161065f565b60405161022e919061119c565b60405180910390f35b34801561024357600080fd5b5061024c610664565b6040516102599190611226565b60405180910390f35b34801561026e57600080fd5b5061028960048036038101906102849190611126565b61066d565b6040516102969190611181565b60405180910390f35b3480156102ab57600080fd5b506102b46106a4565b6040516102c19190611241565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec919061125c565b6106ca565b6040516102fe919061119c565b60405180910390f35b34801561031357600080fd5b5061031c610712565b60405161032991906110a7565b60405180910390f35b34801561033e57600080fd5b5061035960048036038101906103549190611126565b6107a4565b6040516103669190611181565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190611126565b61081b565b6040516103a39190611181565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190611289565b61083e565b6040516103e0919061119c565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190611307565b6108c5565b005b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047890611393565b60405180910390fd5b61048d60008383610a1c565b806002600082825461049f91906113b3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104f491906113b3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610559919061119c565b60405180910390a361056d60008383610a21565b5050565b60606003805461058090611438565b80601f01602080910402602001604051908101604052809291908181526020018280546105ac90611438565b80156105f95780601f106105ce576101008083540402835291602001916105f9565b820191906000526020600020905b8154815290600101906020018083116105dc57829003601f168201915b5050505050905090565b60008061060e610a26565b905061061b818585610a2e565b600191505092915050565b6000600254905090565b60008061063b610a26565b9050610648858285610bf7565b610653858585610c83565b60019150509392505050565b606481565b60006012905090565b600080610678610a26565b905061069981858561068a858961083e565b61069491906113b3565b610a2e565b600191505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461072190611438565b80601f016020809104026020016040519081016040528092919081815260200182805461074d90611438565b801561079a5780601f1061076f5761010080835404028352916020019161079a565b820191906000526020600020905b81548152906001019060200180831161077d57829003601f168201915b5050505050905090565b6000806107af610a26565b905060006107bd828661083e565b905083811015610802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f9906114db565b60405180910390fd5b61080f8286868403610a2e565b60019250505092915050565b600080610826610a26565b9050610833818585610c83565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c90611547565b60405180910390fd5b80471015610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f906115b3565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156109de573d6000803e3d6000fd5b507f4ce7033d118120e254016dccf195288400b28fc8936425acd5f17ce2df3ab7088282604051610a10929190611632565b60405180910390a15050565b505050565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a94906116cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b039061175f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610bea919061119c565b60405180910390a3505050565b6000610c03848461083e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c7d5781811015610c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c66906117cb565b60405180910390fd5b610c7c8484848403610a2e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce99061185d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d58906118ef565b60405180910390fd5b610d6c838383610a1c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de990611981565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e8591906113b3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ee9919061119c565b60405180910390a3610efc848484610a21565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f2d82610f02565b9050919050565b610f3d81610f22565b82525050565b6000819050919050565b610f5681610f43565b82525050565b6000604082019050610f716000830185610f34565b610f7e6020830184610f4d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610fbf82610f43565b9150610fca83610f43565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561100357611002610f85565b5b828202905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561104857808201518184015260208101905061102d565b83811115611057576000848401525b50505050565b6000601f19601f8301169050919050565b60006110798261100e565b6110838185611019565b935061109381856020860161102a565b61109c8161105d565b840191505092915050565b600060208201905081810360008301526110c1818461106e565b905092915050565b600080fd5b6110d781610f22565b81146110e257600080fd5b50565b6000813590506110f4816110ce565b92915050565b61110381610f43565b811461110e57600080fd5b50565b600081359050611120816110fa565b92915050565b6000806040838503121561113d5761113c6110c9565b5b600061114b858286016110e5565b925050602061115c85828601611111565b9150509250929050565b60008115159050919050565b61117b81611166565b82525050565b60006020820190506111966000830184611172565b92915050565b60006020820190506111b16000830184610f4d565b92915050565b6000806000606084860312156111d0576111cf6110c9565b5b60006111de868287016110e5565b93505060206111ef868287016110e5565b925050604061120086828701611111565b9150509250925092565b600060ff82169050919050565b6112208161120a565b82525050565b600060208201905061123b6000830184611217565b92915050565b60006020820190506112566000830184610f34565b92915050565b600060208284031215611272576112716110c9565b5b6000611280848285016110e5565b91505092915050565b600080604083850312156112a05761129f6110c9565b5b60006112ae858286016110e5565b92505060206112bf858286016110e5565b9150509250929050565b60006112d482610f02565b9050919050565b6112e4816112c9565b81146112ef57600080fd5b50565b600081359050611301816112db565b92915050565b6000806040838503121561131e5761131d6110c9565b5b600061132c858286016112f2565b925050602061133d85828601611111565b9150509250929050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061137d601f83611019565b915061138882611347565b602082019050919050565b600060208201905081810360008301526113ac81611370565b9050919050565b60006113be82610f43565b91506113c983610f43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156113fe576113fd610f85565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061145057607f821691505b60208210810361146357611462611409565b5b50919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006114c5602583611019565b91506114d082611469565b604082019050919050565b600060208201905081810360008301526114f4816114b8565b9050919050565b7f6e6f742074686520666f756e6465720000000000000000000000000000000000600082015250565b6000611531600f83611019565b915061153c826114fb565b602082019050919050565b6000602082019050818103600083015261156081611524565b9050919050565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b600061159d601283611019565b91506115a882611567565b602082019050919050565b600060208201905081810360008301526115cc81611590565b9050919050565b6000819050919050565b60006115f86115f36115ee84610f02565b6115d3565b610f02565b9050919050565b600061160a826115dd565b9050919050565b600061161c826115ff565b9050919050565b61162c81611611565b82525050565b60006040820190506116476000830185611623565b6116546020830184610f4d565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006116b7602483611019565b91506116c28261165b565b604082019050919050565b600060208201905081810360008301526116e6816116aa565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611749602283611019565b9150611754826116ed565b604082019050919050565b600060208201905081810360008301526117788161173c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006117b5601d83611019565b91506117c08261177f565b602082019050919050565b600060208201905081810360008301526117e4816117a8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000611847602583611019565b9150611852826117eb565b604082019050919050565b600060208201905081810360008301526118768161183a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006118d9602383611019565b91506118e48261187d565b604082019050919050565b60006020820190508181036000830152611908816118cc565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061196b602683611019565b91506119768261190f565b604082019050919050565b6000602082019050818103600083015261199a8161195e565b905091905056fea264697066735822122096d110dab7dcc57307f993313771efead6fe5fe93cacdfe96081d62b53afed3164736f6c634300080e0033

Deployed ByteCode Sourcemap

17527:786:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17941:33;17952:10;17964:9;17941:33;;;;;;;:::i;:::-;;;;;;;;17985:35;17991:10;17731:3;18003:9;:16;;;;:::i;:::-;17985:5;:35::i;:::-;17527:786;;;;;6677:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9028:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7797:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9809:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17700:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7639:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10513:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17671:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7968:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6896:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11254:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8301:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8557:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18036:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13127:399;13230:1;13211:21;;:7;:21;;;13203:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13281:49;13310:1;13314:7;13323:6;13281:20;:49::i;:::-;13359:6;13343:12;;:22;;;;;;;:::i;:::-;;;;;;;;13398:6;13376:9;:18;13386:7;13376:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13441:7;13420:37;;13437:1;13420:37;;;13450:6;13420:37;;;;;;:::i;:::-;;;;;;;;13470:48;13498:1;13502:7;13511:6;13470:19;:48::i;:::-;13127:399;;:::o;6677:100::-;6731:13;6764:5;6757:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6677:100;:::o;9028:201::-;9111:4;9128:13;9144:12;:10;:12::i;:::-;9128:28;;9167:32;9176:5;9183:7;9192:6;9167:8;:32::i;:::-;9217:4;9210:11;;;9028:201;;;;:::o;7797:108::-;7858:7;7885:12;;7878:19;;7797:108;:::o;9809:295::-;9940:4;9957:15;9975:12;:10;:12::i;:::-;9957:30;;9998:38;10014:4;10020:7;10029:6;9998:15;:38::i;:::-;10047:27;10057:4;10063:2;10067:6;10047:9;:27::i;:::-;10092:4;10085:11;;;9809:295;;;;;:::o;17700:34::-;17731:3;17700:34;:::o;7639:93::-;7697:5;7722:2;7715:9;;7639:93;:::o;10513:238::-;10601:4;10618:13;10634:12;:10;:12::i;:::-;10618:28;;10657:64;10666:5;10673:7;10710:10;10682:25;10692:5;10699:7;10682:9;:25::i;:::-;:38;;;;:::i;:::-;10657:8;:64::i;:::-;10739:4;10732:11;;;10513:238;;;;:::o;17671:22::-;;;;;;;;;;;;;:::o;7968:127::-;8042:7;8069:9;:18;8079:7;8069:18;;;;;;;;;;;;;;;;8062:25;;7968:127;;;:::o;6896:104::-;6952:13;6985:7;6978:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6896:104;:::o;11254:436::-;11347:4;11364:13;11380:12;:10;:12::i;:::-;11364:28;;11403:24;11430:25;11440:5;11447:7;11430:9;:25::i;:::-;11403:52;;11494:15;11474:16;:35;;11466:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11587:60;11596:5;11603:7;11631:15;11612:16;:34;11587:8;:60::i;:::-;11678:4;11671:11;;;;11254:436;;;;:::o;8301:193::-;8380:4;8397:13;8413:12;:10;:12::i;:::-;8397:28;;8436;8446:5;8453:2;8457:6;8436:9;:28::i;:::-;8482:4;8475:11;;;8301:193;;;;:::o;8557:151::-;8646:7;8673:11;:18;8685:5;8673:18;;;;;;;;;;;;;;;:27;8692:7;8673:27;;;;;;;;;;;;;;;;8666:34;;8557:151;;;;:::o;18036:274::-;18131:7;;;;;;;;;;;18117:21;;:10;:21;;;18109:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18202:6;18177:21;:31;;18169:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18242:3;:12;;:20;18255:6;18242:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18278:24;18290:3;18295:6;18278:24;;;;;;;:::i;:::-;;;;;;;;18036:274;;:::o;16612:125::-;;;;:::o;17341:124::-;;;;:::o;685:98::-;738:7;765:10;758:17;;685:98;:::o;14888:380::-;15041:1;15024:19;;:5;:19;;;15016:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15122:1;15103:21;;:7;:21;;;15095:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15206:6;15176:11;:18;15188:5;15176:18;;;;;;;;;;;;;;;:27;15195:7;15176:27;;;;;;;;;;;;;;;:36;;;;15244:7;15228:32;;15237:5;15228:32;;;15253:6;15228:32;;;;;;:::i;:::-;;;;;;;;14888:380;;;:::o;15559:453::-;15694:24;15721:25;15731:5;15738:7;15721:9;:25::i;:::-;15694:52;;15781:17;15761:16;:37;15757:248;;15843:6;15823:16;:26;;15815:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15927:51;15936:5;15943:7;15971:6;15952:16;:25;15927:8;:51::i;:::-;15757:248;15683:329;15559:453;;;:::o;12169:671::-;12316:1;12300:18;;:4;:18;;;12292:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12393:1;12379:16;;:2;:16;;;12371:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12448:38;12469:4;12475:2;12479:6;12448:20;:38::i;:::-;12499:19;12521:9;:15;12531:4;12521:15;;;;;;;;;;;;;;;;12499:37;;12570:6;12555:11;:21;;12547:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12687:6;12673:11;:20;12655:9;:15;12665:4;12655:15;;;;;;;;;;;;;;;:38;;;;12732:6;12715:9;:13;12725:2;12715:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;12771:2;12756:26;;12765:4;12756:26;;;12775:6;12756:26;;;;;;:::i;:::-;;;;;;;;12795:37;12815:4;12821:2;12825:6;12795:19;:37::i;:::-;12281:559;12169:671;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:77::-;402:7;431:5;420:16;;365:77;;;:::o;448:118::-;535:24;553:5;535:24;:::i;:::-;530:3;523:37;448:118;;:::o;572:332::-;693:4;731:2;720:9;716:18;708:26;;744:71;812:1;801:9;797:17;788:6;744:71;:::i;:::-;825:72;893:2;882:9;878:18;869:6;825:72;:::i;:::-;572:332;;;;;:::o;910:180::-;958:77;955:1;948:88;1055:4;1052:1;1045:15;1079:4;1076:1;1069:15;1096:348;1136:7;1159:20;1177:1;1159:20;:::i;:::-;1154:25;;1193:20;1211:1;1193:20;:::i;:::-;1188:25;;1381:1;1313:66;1309:74;1306:1;1303:81;1298:1;1291:9;1284:17;1280:105;1277:131;;;1388:18;;:::i;:::-;1277:131;1436:1;1433;1429:9;1418:20;;1096:348;;;;:::o;1450:99::-;1502:6;1536:5;1530:12;1520:22;;1450:99;;;:::o;1555:169::-;1639:11;1673:6;1668:3;1661:19;1713:4;1708:3;1704:14;1689:29;;1555:169;;;;:::o;1730:307::-;1798:1;1808:113;1822:6;1819:1;1816:13;1808:113;;;1907:1;1902:3;1898:11;1892:18;1888:1;1883:3;1879:11;1872:39;1844:2;1841:1;1837:10;1832:15;;1808:113;;;1939:6;1936:1;1933:13;1930:101;;;2019:1;2010:6;2005:3;2001:16;1994:27;1930:101;1779:258;1730:307;;;:::o;2043:102::-;2084:6;2135:2;2131:7;2126:2;2119:5;2115:14;2111:28;2101:38;;2043:102;;;:::o;2151:364::-;2239:3;2267:39;2300:5;2267:39;:::i;:::-;2322:71;2386:6;2381:3;2322:71;:::i;:::-;2315:78;;2402:52;2447:6;2442:3;2435:4;2428:5;2424:16;2402:52;:::i;:::-;2479:29;2501:6;2479:29;:::i;:::-;2474:3;2470:39;2463:46;;2243:272;2151:364;;;;:::o;2521:313::-;2634:4;2672:2;2661:9;2657:18;2649:26;;2721:9;2715:4;2711:20;2707:1;2696:9;2692:17;2685:47;2749:78;2822:4;2813:6;2749:78;:::i;:::-;2741:86;;2521:313;;;;:::o;2921:117::-;3030:1;3027;3020:12;3167:122;3240:24;3258:5;3240:24;:::i;:::-;3233:5;3230:35;3220:63;;3279:1;3276;3269:12;3220:63;3167:122;:::o;3295:139::-;3341:5;3379:6;3366:20;3357:29;;3395:33;3422:5;3395:33;:::i;:::-;3295:139;;;;:::o;3440:122::-;3513:24;3531:5;3513:24;:::i;:::-;3506:5;3503:35;3493:63;;3552:1;3549;3542:12;3493:63;3440:122;:::o;3568:139::-;3614:5;3652:6;3639:20;3630:29;;3668:33;3695:5;3668:33;:::i;:::-;3568:139;;;;:::o;3713:474::-;3781:6;3789;3838:2;3826:9;3817:7;3813:23;3809:32;3806:119;;;3844:79;;:::i;:::-;3806:119;3964:1;3989:53;4034:7;4025:6;4014:9;4010:22;3989:53;:::i;:::-;3979:63;;3935:117;4091:2;4117:53;4162:7;4153:6;4142:9;4138:22;4117:53;:::i;:::-;4107:63;;4062:118;3713:474;;;;;:::o;4193:90::-;4227:7;4270:5;4263:13;4256:21;4245:32;;4193:90;;;:::o;4289:109::-;4370:21;4385:5;4370:21;:::i;:::-;4365:3;4358:34;4289:109;;:::o;4404:210::-;4491:4;4529:2;4518:9;4514:18;4506:26;;4542:65;4604:1;4593:9;4589:17;4580:6;4542:65;:::i;:::-;4404:210;;;;:::o;4620:222::-;4713:4;4751:2;4740:9;4736:18;4728:26;;4764:71;4832:1;4821:9;4817:17;4808:6;4764:71;:::i;:::-;4620:222;;;;:::o;4848:619::-;4925:6;4933;4941;4990:2;4978:9;4969:7;4965:23;4961:32;4958:119;;;4996:79;;:::i;:::-;4958:119;5116:1;5141:53;5186:7;5177:6;5166:9;5162:22;5141:53;:::i;:::-;5131:63;;5087:117;5243:2;5269:53;5314:7;5305:6;5294:9;5290:22;5269:53;:::i;:::-;5259:63;;5214:118;5371:2;5397:53;5442:7;5433:6;5422:9;5418:22;5397:53;:::i;:::-;5387:63;;5342:118;4848:619;;;;;:::o;5473:86::-;5508:7;5548:4;5541:5;5537:16;5526:27;;5473:86;;;:::o;5565:112::-;5648:22;5664:5;5648:22;:::i;:::-;5643:3;5636:35;5565:112;;:::o;5683:214::-;5772:4;5810:2;5799:9;5795:18;5787:26;;5823:67;5887:1;5876:9;5872:17;5863:6;5823:67;:::i;:::-;5683:214;;;;:::o;5903:222::-;5996:4;6034:2;6023:9;6019:18;6011:26;;6047:71;6115:1;6104:9;6100:17;6091:6;6047:71;:::i;:::-;5903:222;;;;:::o;6131:329::-;6190:6;6239:2;6227:9;6218:7;6214:23;6210:32;6207:119;;;6245:79;;:::i;:::-;6207:119;6365:1;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6336:117;6131:329;;;;:::o;6466:474::-;6534:6;6542;6591:2;6579:9;6570:7;6566:23;6562:32;6559:119;;;6597:79;;:::i;:::-;6559:119;6717:1;6742:53;6787:7;6778:6;6767:9;6763:22;6742:53;:::i;:::-;6732:63;;6688:117;6844:2;6870:53;6915:7;6906:6;6895:9;6891:22;6870:53;:::i;:::-;6860:63;;6815:118;6466:474;;;;;:::o;6946:104::-;6991:7;7020:24;7038:5;7020:24;:::i;:::-;7009:35;;6946:104;;;:::o;7056:138::-;7137:32;7163:5;7137:32;:::i;:::-;7130:5;7127:43;7117:71;;7184:1;7181;7174:12;7117:71;7056:138;:::o;7200:155::-;7254:5;7292:6;7279:20;7270:29;;7308:41;7343:5;7308:41;:::i;:::-;7200:155;;;;:::o;7361:490::-;7437:6;7445;7494:2;7482:9;7473:7;7469:23;7465:32;7462:119;;;7500:79;;:::i;:::-;7462:119;7620:1;7645:61;7698:7;7689:6;7678:9;7674:22;7645:61;:::i;:::-;7635:71;;7591:125;7755:2;7781:53;7826:7;7817:6;7806:9;7802:22;7781:53;:::i;:::-;7771:63;;7726:118;7361:490;;;;;:::o;7857:181::-;7997:33;7993:1;7985:6;7981:14;7974:57;7857:181;:::o;8044:366::-;8186:3;8207:67;8271:2;8266:3;8207:67;:::i;:::-;8200:74;;8283:93;8372:3;8283:93;:::i;:::-;8401:2;8396:3;8392:12;8385:19;;8044:366;;;:::o;8416:419::-;8582:4;8620:2;8609:9;8605:18;8597:26;;8669:9;8663:4;8659:20;8655:1;8644:9;8640:17;8633:47;8697:131;8823:4;8697:131;:::i;:::-;8689:139;;8416:419;;;:::o;8841:305::-;8881:3;8900:20;8918:1;8900:20;:::i;:::-;8895:25;;8934:20;8952:1;8934:20;:::i;:::-;8929:25;;9088:1;9020:66;9016:74;9013:1;9010:81;9007:107;;;9094:18;;:::i;:::-;9007:107;9138:1;9135;9131:9;9124:16;;8841:305;;;;:::o;9152:180::-;9200:77;9197:1;9190:88;9297:4;9294:1;9287:15;9321:4;9318:1;9311:15;9338:320;9382:6;9419:1;9413:4;9409:12;9399:22;;9466:1;9460:4;9456:12;9487:18;9477:81;;9543:4;9535:6;9531:17;9521:27;;9477:81;9605:2;9597:6;9594:14;9574:18;9571:38;9568:84;;9624:18;;:::i;:::-;9568:84;9389:269;9338:320;;;:::o;9664:224::-;9804:34;9800:1;9792:6;9788:14;9781:58;9873:7;9868:2;9860:6;9856:15;9849:32;9664:224;:::o;9894:366::-;10036:3;10057:67;10121:2;10116:3;10057:67;:::i;:::-;10050:74;;10133:93;10222:3;10133:93;:::i;:::-;10251:2;10246:3;10242:12;10235:19;;9894:366;;;:::o;10266:419::-;10432:4;10470:2;10459:9;10455:18;10447:26;;10519:9;10513:4;10509:20;10505:1;10494:9;10490:17;10483:47;10547:131;10673:4;10547:131;:::i;:::-;10539:139;;10266:419;;;:::o;10691:165::-;10831:17;10827:1;10819:6;10815:14;10808:41;10691:165;:::o;10862:366::-;11004:3;11025:67;11089:2;11084:3;11025:67;:::i;:::-;11018:74;;11101:93;11190:3;11101:93;:::i;:::-;11219:2;11214:3;11210:12;11203:19;;10862:366;;;:::o;11234:419::-;11400:4;11438:2;11427:9;11423:18;11415:26;;11487:9;11481:4;11477:20;11473:1;11462:9;11458:17;11451:47;11515:131;11641:4;11515:131;:::i;:::-;11507:139;;11234:419;;;:::o;11659:168::-;11799:20;11795:1;11787:6;11783:14;11776:44;11659:168;:::o;11833:366::-;11975:3;11996:67;12060:2;12055:3;11996:67;:::i;:::-;11989:74;;12072:93;12161:3;12072:93;:::i;:::-;12190:2;12185:3;12181:12;12174:19;;11833:366;;;:::o;12205:419::-;12371:4;12409:2;12398:9;12394:18;12386:26;;12458:9;12452:4;12448:20;12444:1;12433:9;12429:17;12422:47;12486:131;12612:4;12486:131;:::i;:::-;12478:139;;12205:419;;;:::o;12630:60::-;12658:3;12679:5;12672:12;;12630:60;;;:::o;12696:142::-;12746:9;12779:53;12797:34;12806:24;12824:5;12806:24;:::i;:::-;12797:34;:::i;:::-;12779:53;:::i;:::-;12766:66;;12696:142;;;:::o;12844:126::-;12894:9;12927:37;12958:5;12927:37;:::i;:::-;12914:50;;12844:126;;;:::o;12976:134::-;13034:9;13067:37;13098:5;13067:37;:::i;:::-;13054:50;;12976:134;;;:::o;13116:147::-;13211:45;13250:5;13211:45;:::i;:::-;13206:3;13199:58;13116:147;;:::o;13269:348::-;13398:4;13436:2;13425:9;13421:18;13413:26;;13449:79;13525:1;13514:9;13510:17;13501:6;13449:79;:::i;:::-;13538:72;13606:2;13595:9;13591:18;13582:6;13538:72;:::i;:::-;13269:348;;;;;:::o;13623:223::-;13763:34;13759:1;13751:6;13747:14;13740:58;13832:6;13827:2;13819:6;13815:15;13808:31;13623:223;:::o;13852:366::-;13994:3;14015:67;14079:2;14074:3;14015:67;:::i;:::-;14008:74;;14091:93;14180:3;14091:93;:::i;:::-;14209:2;14204:3;14200:12;14193:19;;13852:366;;;:::o;14224:419::-;14390:4;14428:2;14417:9;14413:18;14405:26;;14477:9;14471:4;14467:20;14463:1;14452:9;14448:17;14441:47;14505:131;14631:4;14505:131;:::i;:::-;14497:139;;14224:419;;;:::o;14649:221::-;14789:34;14785:1;14777:6;14773:14;14766:58;14858:4;14853:2;14845:6;14841:15;14834:29;14649:221;:::o;14876:366::-;15018:3;15039:67;15103:2;15098:3;15039:67;:::i;:::-;15032:74;;15115:93;15204:3;15115:93;:::i;:::-;15233:2;15228:3;15224:12;15217:19;;14876:366;;;:::o;15248:419::-;15414:4;15452:2;15441:9;15437:18;15429:26;;15501:9;15495:4;15491:20;15487:1;15476:9;15472:17;15465:47;15529:131;15655:4;15529:131;:::i;:::-;15521:139;;15248:419;;;:::o;15673:179::-;15813:31;15809:1;15801:6;15797:14;15790:55;15673:179;:::o;15858:366::-;16000:3;16021:67;16085:2;16080:3;16021:67;:::i;:::-;16014:74;;16097:93;16186:3;16097:93;:::i;:::-;16215:2;16210:3;16206:12;16199:19;;15858:366;;;:::o;16230:419::-;16396:4;16434:2;16423:9;16419:18;16411:26;;16483:9;16477:4;16473:20;16469:1;16458:9;16454:17;16447:47;16511:131;16637:4;16511:131;:::i;:::-;16503:139;;16230:419;;;:::o;16655:224::-;16795:34;16791:1;16783:6;16779:14;16772:58;16864:7;16859:2;16851:6;16847:15;16840:32;16655:224;:::o;16885:366::-;17027:3;17048:67;17112:2;17107:3;17048:67;:::i;:::-;17041:74;;17124:93;17213:3;17124:93;:::i;:::-;17242:2;17237:3;17233:12;17226:19;;16885:366;;;:::o;17257:419::-;17423:4;17461:2;17450:9;17446:18;17438:26;;17510:9;17504:4;17500:20;17496:1;17485:9;17481:17;17474:47;17538:131;17664:4;17538:131;:::i;:::-;17530:139;;17257:419;;;:::o;17682:222::-;17822:34;17818:1;17810:6;17806:14;17799:58;17891:5;17886:2;17878:6;17874:15;17867:30;17682:222;:::o;17910:366::-;18052:3;18073:67;18137:2;18132:3;18073:67;:::i;:::-;18066:74;;18149:93;18238:3;18149:93;:::i;:::-;18267:2;18262:3;18258:12;18251:19;;17910:366;;;:::o;18282:419::-;18448:4;18486:2;18475:9;18471:18;18463:26;;18535:9;18529:4;18525:20;18521:1;18510:9;18506:17;18499:47;18563:131;18689:4;18563:131;:::i;:::-;18555:139;;18282:419;;;:::o;18707:225::-;18847:34;18843:1;18835:6;18831:14;18824:58;18916:8;18911:2;18903:6;18899:15;18892:33;18707:225;:::o;18938:366::-;19080:3;19101:67;19165:2;19160:3;19101:67;:::i;:::-;19094:74;;19177:93;19266:3;19177:93;:::i;:::-;19295:2;19290:3;19286:12;19279:19;;18938:366;;;:::o;19310:419::-;19476:4;19514:2;19503:9;19499:18;19491:26;;19563:9;19557:4;19553:20;19549:1;19538:9;19534:17;19527:47;19591:131;19717:4;19591:131;:::i;:::-;19583:139;;19310:419;;;:::o

Swarm Source

ipfs://96d110dab7dcc57307f993313771efead6fe5fe93cacdfe96081d62b53afed31

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