ETH Price: $3,272.08 (+0.70%)
Gas: 1 Gwei

Token

AI-Talk2Earn (AI-T2E)
 

Overview

Max Total Supply

1,000,000,000 AI-T2E

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
thedefisquad.eth
Balance
6,726,421.494895342 AI-T2E

Value
$0.00
0x74BC89a9e831ab5f33b90607Dd9eB5E01452A064
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
AITalk2Earn

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

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

// SPDX-License-Identifier: UNLICENSED

/*
*  .----------------.  .----------------.  .----------------.  .----------------.  .----------------.  .----------------. 
* | .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. |
* | |      __      | || |     _____    | || |              | || |  _________   | || |    _____     | || |  _________   | |
* | |     /  \     | || |    |_   _|   | || |              | || | |  _   _  |  | || |   / ___ `.   | || | |_   ___  |  | |
* | |    / /\ \    | || |      | |     | || |    ______    | || | |_/ | | \_|  | || |  |_/___) |   | || |   | |_  \_|  | |
* | |   / ____ \   | || |      | |     | || |   |______|   | || |     | |      | || |   .'____.'   | || |   |  _|  _   | |
* | | _/ /    \ \_ | || |     _| |_    | || |              | || |    _| |_     | || |  / /____     | || |  _| |___/ |  | |
* | ||____|  |____|| || |    |_____|   | || |              | || |   |_____|    | || |  |_______|   | || | |_________|  | |
* | |              | || |              | || |              | || |              | || |              | || |              | |
* | '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' |
*  '----------------'  '----------------'  '----------------'  '----------------'  '----------------'  '----------------' 

* Welcome To Talk2EarnAI !
* Harnessing AI to Unlock a Brighter Future, Unlock Your Potential with AI

* Access Bot from here - https://t.me/AIT2E_Bot
* Access Bot to creat 18+ ART from here - https://t.me/AI_T2E_NSFW_Bot

Website: https://Talk2Earn.ai/
Twitter: https://twitter.com/AI_T2E
Discord: http://discord.io/AI_T2E
Telegram Group: https://t.me/AI_T2E
Telegram Channel: https://t.me/AI_T2E_News
Telegram ART Group: https://t.me/AI_T2E_18
*/


pragma solidity 0.8.16;

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function allPairsLength() external view returns (uint256);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

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

/**
 * @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 decimals places of the token.
     */
    function decimals() external view returns (uint8);

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

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @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.openzeppelin.com/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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

    /**
     * @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)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @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)
        external
        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
    ) external virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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)
        external
        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 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)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(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");

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(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);
            }
        }
    }

    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");

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }
}

/**
 * @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.openzeppelin.com/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 AITalk2Earn is ERC20, Ownable {
    uint8 private _decimals = 9;
    uint256 private _supply = 1 * 10**9;
    uint256 public taxMarketing = 20;

    address public marketingWallet = 0xe6AbE935B952531D53359c5e795Ac636637ff385;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;
    uint256 public _marketingReserves = 0;
    mapping(address => bool) public _isExcludedFromFee;
    uint256 public numTokensCap = 100000 * 10**_decimals;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwap = false;

    modifier swaping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    /**
     * @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() ERC20("AI-Talk2Earn", "AI-T2E") {
        _mint(msg.sender, (_supply * 10**_decimals));

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[marketingWallet] = true;
    }


    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * 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 override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(balanceOf(from) >= amount, "ERC20: transfer amount exceeds balance");

        if ((from == uniswapV2Pair || to == uniswapV2Pair) && !inSwap) {
            if (from != uniswapV2Pair) {
                if ((_marketingReserves) >= numTokensCap) {
                    _swapForETH(numTokensCap);
                    _marketingReserves -= numTokensCap;
                    bool sent = payable(marketingWallet).send(address(this).balance);
                    require(sent, "T2E: Failed to send ETH");
                }
            }

            uint256 transferAmount = takeFee(from, to, amount);
            super._transfer(from, to, transferAmount);
        } 
        else {
            super._transfer(from, to, amount);
        }
    }

    function takeFee(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 transferAmount;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            transferAmount = amount;
        } 
        else {
            uint256 tax = ((amount * taxMarketing) / 1000);
            transferAmount = amount - tax;
            _marketingReserves += tax;

            super._transfer(from, address(this), (tax));
        }
        return transferAmount;
    }
    
    function setExcludedFromFee(address _address, bool _status) external onlyOwner {
        require(_isExcludedFromFee[_address] != _status, "T2E: already set to current statuw");
        _isExcludedFromFee[_address] = _status;
    }

    function _swapForETH(uint256 tokenAmount) private swaping {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function setMarketingReceiver(address _address) public onlyOwner returns (bool) {
        require(_address != DEAD, "T2E: LP Pair cannot be the Dead wallet!");
        require(_address != address(0), "T2E: LP Pair cannot be the 0 wallet!");
        marketingWallet = _address;
        return true;
    }

    function setTax(uint256 _taxMarketing) public onlyOwner returns (bool) {
        require(_taxMarketing <= 100, "T2E: tax must not be greater than 10%");
        taxMarketing = _taxMarketing;
        return true;
    }

    function setFeeLevel(uint256 _amount) public onlyOwner returns (bool) {
        require(_amount <= (_supply / 100) * 2, "T2E: Cannot tax more than 2% of the supply at once!");
        numTokensCap = _amount * 10**_decimals;

        return true;
    }

    receive() external payable {}
}

Contract Security Audit

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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[{"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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setFeeLevel","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setMarketingReceiver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxMarketing","type":"uint256"}],"name":"setTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526009600560146101000a81548160ff021916908360ff160217905550633b9aca00600655601460075573e6abe935b952531d53359c5e795ac636637ff385600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600a55600560149054906101000a900460ff16600a620000e89190620008e6565b620186a0620000f8919062000937565b600c556000600d60146101000a81548160ff0219169083151502179055503480156200012357600080fd5b506040518060400160405280600c81526020017f41492d54616c6b324561726e00000000000000000000000000000000000000008152506040518060400160405280600681526020017f41492d54324500000000000000000000000000000000000000000000000000008152508160039081620001a1919062000c08565b508060049081620001b3919062000c08565b505050620001d6620001ca6200053960201b60201c565b6200054160201b60201c565b6200021433600560149054906101000a900460ff16600a620001f99190620008e6565b60065462000208919062000937565b6200060760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000279573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029f919062000d59565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000307573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032d919062000d59565b6040518363ffffffff1660e01b81526004016200034c92919062000d9c565b6020604051808303816000875af11580156200036c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000392919062000d59565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600b600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062000eb5565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000679576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006709062000e2a565b60405180910390fd5b80600260008282546200068d919062000e4c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000740919062000e98565b60405180910390a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620007da57808604811115620007b257620007b16200074c565b5b6001851615620007c25780820291505b8081029050620007d2856200077b565b945062000792565b94509492505050565b600082620007f55760019050620008c8565b81620008055760009050620008c8565b81600181146200081e576002811462000829576200085f565b6001915050620008c8565b60ff8411156200083e576200083d6200074c565b5b8360020a9150848211156200085857620008576200074c565b5b50620008c8565b5060208310610133831016604e8410600b8410161715620008995782820a9050838111156200089357620008926200074c565b5b620008c8565b620008a8848484600162000788565b92509050818404811115620008c257620008c16200074c565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620008f382620008cf565b91506200090083620008d9565b92506200092f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620007e3565b905092915050565b60006200094482620008cf565b91506200095183620008cf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200098d576200098c6200074c565b5b828202905092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a1a57607f821691505b60208210810362000a305762000a2f620009d2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a9a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a5b565b62000aa6868362000a5b565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000ae962000ae362000add84620008cf565b62000abe565b620008cf565b9050919050565b6000819050919050565b62000b058362000ac8565b62000b1d62000b148262000af0565b84845462000a68565b825550505050565b600090565b62000b3462000b25565b62000b4181848462000afa565b505050565b5b8181101562000b695762000b5d60008262000b2a565b60018101905062000b47565b5050565b601f82111562000bb85762000b828162000a36565b62000b8d8462000a4b565b8101602085101562000b9d578190505b62000bb562000bac8562000a4b565b83018262000b46565b50505b505050565b600082821c905092915050565b600062000bdd6000198460080262000bbd565b1980831691505092915050565b600062000bf8838362000bca565b9150826002028217905092915050565b62000c138262000998565b67ffffffffffffffff81111562000c2f5762000c2e620009a3565b5b62000c3b825462000a01565b62000c4882828562000b6d565b600060209050601f83116001811462000c80576000841562000c6b578287015190505b62000c77858262000bea565b86555062000ce7565b601f19841662000c908662000a36565b60005b8281101562000cba5784890151825560018201915060208501945060208101905062000c93565b8683101562000cda578489015162000cd6601f89168262000bca565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d218262000cf4565b9050919050565b62000d338162000d14565b811462000d3f57600080fd5b50565b60008151905062000d538162000d28565b92915050565b60006020828403121562000d725762000d7162000cef565b5b600062000d828482850162000d42565b91505092915050565b62000d968162000d14565b82525050565b600060408201905062000db3600083018562000d8b565b62000dc2602083018462000d8b565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e12601f8362000dc9565b915062000e1f8262000dda565b602082019050919050565b6000602082019050818103600083015262000e458162000e03565b9050919050565b600062000e5982620008cf565b915062000e6683620008cf565b925082820190508082111562000e815762000e806200074c565b5b92915050565b62000e9281620008cf565b82525050565b600060208201905062000eaf600083018462000e87565b92915050565b608051612c8162000ee66000396000818161070e015281816115c6015281816116a701526116ce0152612c816000f3fe60806040526004361061016a5760003560e01c8063715018a6116100d1578063a457c2d71161008a578063dd62ed3e11610064578063dd62ed3e14610589578063e0b4933c146105c6578063e2314bea14610603578063f2fde38b1461062e57610171565b8063a457c2d7146104e4578063a9059cbb14610521578063c0fdea571461055e57610171565b8063715018a6146103d257806375b62532146103e957806375f0a87414610426578063768dc710146104515780638da5cb5b1461048e57806395d89b41146104b957610171565b8063313ce56711610123578063313ce567146102ae57806339509351146102d957806344ff37161461031657806349bd5a5e146103415780636612e66f1461036c57806370a082311461039557610171565b806306fdde0314610176578063095ea7b3146101a15780631694505e146101de57806318160ddd1461020957806323b872dd146102345780632e5bb6ff1461027157610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b610657565b6040516101989190611b7e565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c39190611c39565b6106e9565b6040516101d59190611c94565b60405180910390f35b3480156101ea57600080fd5b506101f361070c565b6040516102009190611d0e565b60405180910390f35b34801561021557600080fd5b5061021e610730565b60405161022b9190611d38565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190611d53565b61073a565b6040516102689190611c94565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190611da6565b610769565b6040516102a59190611c94565b60405180910390f35b3480156102ba57600080fd5b506102c36107c7565b6040516102d09190611def565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190611c39565b6107d0565b60405161030d9190611c94565b60405180910390f35b34801561032257600080fd5b5061032b610807565b6040516103389190611d38565b60405180910390f35b34801561034d57600080fd5b5061035661080d565b6040516103639190611e19565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e9190611e60565b610833565b005b3480156103a157600080fd5b506103bc60048036038101906103b79190611ea0565b610928565b6040516103c99190611d38565b60405180910390f35b3480156103de57600080fd5b506103e7610970565b005b3480156103f557600080fd5b50610410600480360381019061040b9190611ea0565b610984565b60405161041d9190611c94565b60405180910390f35b34801561043257600080fd5b5061043b610ad7565b6040516104489190611e19565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190611ea0565b610afd565b6040516104859190611c94565b60405180910390f35b34801561049a57600080fd5b506104a3610b1d565b6040516104b09190611e19565b60405180910390f35b3480156104c557600080fd5b506104ce610b47565b6040516104db9190611b7e565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190611c39565b610bd9565b6040516105189190611c94565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190611c39565b610c50565b6040516105559190611c94565b60405180910390f35b34801561056a57600080fd5b50610573610c73565b6040516105809190611d38565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190611ecd565b610c79565b6040516105bd9190611d38565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190611da6565b610d00565b6040516105fa9190611c94565b60405180910390f35b34801561060f57600080fd5b50610618610d9d565b6040516106259190611d38565b60405180910390f35b34801561063a57600080fd5b5061065560048036038101906106509190611ea0565b610da3565b005b60606003805461066690611f3c565b80601f016020809104026020016040519081016040528092919081815260200182805461069290611f3c565b80156106df5780601f106106b4576101008083540402835291602001916106df565b820191906000526020600020905b8154815290600101906020018083116106c257829003601f168201915b5050505050905090565b6000806106f4610e26565b9050610701818585610e2e565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600080610745610e26565b9050610752858285610ff7565b61075d858585611083565b60019150509392505050565b60006107736113c8565b60648211156107b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ae90611fdf565b60405180910390fd5b8160078190555060019050919050565b60006009905090565b6000806107db610e26565b90506107fc8185856107ed8589610c79565b6107f7919061202e565b610e2e565b600191505092915050565b600c5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61083b6113c8565b801515600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036108cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c4906120d4565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109786113c8565b6109826000611446565b565b600061098e6113c8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1590612166565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a84906121f8565b60405180910390fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610b5690611f3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8290611f3c565b8015610bcf5780601f10610ba457610100808354040283529160200191610bcf565b820191906000526020600020905b815481529060010190602001808311610bb257829003601f168201915b5050505050905090565b600080610be4610e26565b90506000610bf28286610c79565b905083811015610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e9061228a565b60405180910390fd5b610c448286868403610e2e565b60019250505092915050565b600080610c5b610e26565b9050610c68818585611083565b600191505092915050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610d0a6113c8565b60026064600654610d1b91906122d9565b610d25919061230a565b821115610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e906123d6565b60405180910390fd5b600560149054906101000a900460ff16600a610d839190612529565b82610d8e919061230a565b600c8190555060019050919050565b60075481565b610dab6113c8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e11906125e6565b60405180910390fd5b610e2381611446565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9490612678565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f039061270a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fea9190611d38565b60405180910390a3505050565b60006110038484610c79565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461107d578181101561106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106690612776565b60405180910390fd5b61107c8484848403610e2e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990612808565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611161576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111589061289a565b60405180910390fd5b8061116b84610928565b10156111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a39061292c565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806112555750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561126e5750600d60149054906101000a900460ff16155b156113b757600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461139757600c54600a5410611396576112de600c5461150c565b600c54600a60008282546112f2919061294c565b925050819055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050905080611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b906129cc565b60405180910390fd5b505b5b60006113a484848461177f565b90506113b184848361188e565b506113c3565b6113c283838361188e565b5b505050565b6113d0610e26565b73ffffffffffffffffffffffffffffffffffffffff166113ee610b1d565b73ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90612a38565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600d60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561154457611543612a58565b5b6040519080825280602002602001820160405280156115725781602001602082028036833780820191505090505b509050308160008151811061158a57611589612a87565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561162f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116539190612acb565b8160018151811061166757611666612a87565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506116cc307f000000000000000000000000000000000000000000000000000000000000000084610e2e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161172e959493929190612bf1565b600060405180830381600087803b15801561174857600080fd5b505af115801561175c573d6000803e3d6000fd5b50505050506000600d60146101000a81548160ff02191690831515021790555050565b600080600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118235750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561183057829050611883565b60006103e860075485611843919061230a565b61184d91906122d9565b9050808461185b919061294c565b915080600a600082825461186f919061202e565b9250508190555061188186308361188e565b505b809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f490612808565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361196c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119639061289a565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e99061292c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ae09190611d38565b60405180910390a350505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b28578082015181840152602081019050611b0d565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b5082611aee565b611b5a8185611af9565b9350611b6a818560208601611b0a565b611b7381611b34565b840191505092915050565b60006020820190508181036000830152611b988184611b45565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bd082611ba5565b9050919050565b611be081611bc5565b8114611beb57600080fd5b50565b600081359050611bfd81611bd7565b92915050565b6000819050919050565b611c1681611c03565b8114611c2157600080fd5b50565b600081359050611c3381611c0d565b92915050565b60008060408385031215611c5057611c4f611ba0565b5b6000611c5e85828601611bee565b9250506020611c6f85828601611c24565b9150509250929050565b60008115159050919050565b611c8e81611c79565b82525050565b6000602082019050611ca96000830184611c85565b92915050565b6000819050919050565b6000611cd4611ccf611cca84611ba5565b611caf565b611ba5565b9050919050565b6000611ce682611cb9565b9050919050565b6000611cf882611cdb565b9050919050565b611d0881611ced565b82525050565b6000602082019050611d236000830184611cff565b92915050565b611d3281611c03565b82525050565b6000602082019050611d4d6000830184611d29565b92915050565b600080600060608486031215611d6c57611d6b611ba0565b5b6000611d7a86828701611bee565b9350506020611d8b86828701611bee565b9250506040611d9c86828701611c24565b9150509250925092565b600060208284031215611dbc57611dbb611ba0565b5b6000611dca84828501611c24565b91505092915050565b600060ff82169050919050565b611de981611dd3565b82525050565b6000602082019050611e046000830184611de0565b92915050565b611e1381611bc5565b82525050565b6000602082019050611e2e6000830184611e0a565b92915050565b611e3d81611c79565b8114611e4857600080fd5b50565b600081359050611e5a81611e34565b92915050565b60008060408385031215611e7757611e76611ba0565b5b6000611e8585828601611bee565b9250506020611e9685828601611e4b565b9150509250929050565b600060208284031215611eb657611eb5611ba0565b5b6000611ec484828501611bee565b91505092915050565b60008060408385031215611ee457611ee3611ba0565b5b6000611ef285828601611bee565b9250506020611f0385828601611bee565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f5457607f821691505b602082108103611f6757611f66611f0d565b5b50919050565b7f5432453a20746178206d757374206e6f7420626520677265617465722074686160008201527f6e20313025000000000000000000000000000000000000000000000000000000602082015250565b6000611fc9602583611af9565b9150611fd482611f6d565b604082019050919050565b60006020820190508181036000830152611ff881611fbc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061203982611c03565b915061204483611c03565b925082820190508082111561205c5761205b611fff565b5b92915050565b7f5432453a20616c72656164792073657420746f2063757272656e74207374617460008201527f7577000000000000000000000000000000000000000000000000000000000000602082015250565b60006120be602283611af9565b91506120c982612062565b604082019050919050565b600060208201905081810360008301526120ed816120b1565b9050919050565b7f5432453a204c5020506169722063616e6e6f742062652074686520446561642060008201527f77616c6c65742100000000000000000000000000000000000000000000000000602082015250565b6000612150602783611af9565b915061215b826120f4565b604082019050919050565b6000602082019050818103600083015261217f81612143565b9050919050565b7f5432453a204c5020506169722063616e6e6f742062652074686520302077616c60008201527f6c65742100000000000000000000000000000000000000000000000000000000602082015250565b60006121e2602483611af9565b91506121ed82612186565b604082019050919050565b60006020820190508181036000830152612211816121d5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612274602583611af9565b915061227f82612218565b604082019050919050565b600060208201905081810360008301526122a381612267565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122e482611c03565b91506122ef83611c03565b9250826122ff576122fe6122aa565b5b828204905092915050565b600061231582611c03565b915061232083611c03565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561235957612358611fff565b5b828202905092915050565b7f5432453a2043616e6e6f7420746178206d6f7265207468616e203225206f662060008201527f74686520737570706c79206174206f6e63652100000000000000000000000000602082015250565b60006123c0603383611af9565b91506123cb82612364565b604082019050919050565b600060208201905081810360008301526123ef816123b3565b9050919050565b60008160011c9050919050565b6000808291508390505b600185111561244d5780860481111561242957612428611fff565b5b60018516156124385780820291505b8081029050612446856123f6565b945061240d565b94509492505050565b6000826124665760019050612522565b816124745760009050612522565b816001811461248a5760028114612494576124c3565b6001915050612522565b60ff8411156124a6576124a5611fff565b5b8360020a9150848211156124bd576124bc611fff565b5b50612522565b5060208310610133831016604e8410600b84101617156124f85782820a9050838111156124f3576124f2611fff565b5b612522565b6125058484846001612403565b9250905081840481111561251c5761251b611fff565b5b81810290505b9392505050565b600061253482611c03565b915061253f83611dd3565b925061256c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612456565b905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006125d0602683611af9565b91506125db82612574565b604082019050919050565b600060208201905081810360008301526125ff816125c3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612662602483611af9565b915061266d82612606565b604082019050919050565b6000602082019050818103600083015261269181612655565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006126f4602283611af9565b91506126ff82612698565b604082019050919050565b60006020820190508181036000830152612723816126e7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612760601d83611af9565b915061276b8261272a565b602082019050919050565b6000602082019050818103600083015261278f81612753565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006127f2602583611af9565b91506127fd82612796565b604082019050919050565b60006020820190508181036000830152612821816127e5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612884602383611af9565b915061288f82612828565b604082019050919050565b600060208201905081810360008301526128b381612877565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612916602683611af9565b9150612921826128ba565b604082019050919050565b6000602082019050818103600083015261294581612909565b9050919050565b600061295782611c03565b915061296283611c03565b925082820390508181111561297a57612979611fff565b5b92915050565b7f5432453a204661696c656420746f2073656e6420455448000000000000000000600082015250565b60006129b6601783611af9565b91506129c182612980565b602082019050919050565b600060208201905081810360008301526129e5816129a9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a22602083611af9565b9150612a2d826129ec565b602082019050919050565b60006020820190508181036000830152612a5181612a15565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612ac581611bd7565b92915050565b600060208284031215612ae157612ae0611ba0565b5b6000612aef84828501612ab6565b91505092915050565b6000819050919050565b6000612b1d612b18612b1384612af8565b611caf565b611c03565b9050919050565b612b2d81612b02565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b6881611bc5565b82525050565b6000612b7a8383612b5f565b60208301905092915050565b6000602082019050919050565b6000612b9e82612b33565b612ba88185612b3e565b9350612bb383612b4f565b8060005b83811015612be4578151612bcb8882612b6e565b9750612bd683612b86565b925050600181019050612bb7565b5085935050505092915050565b600060a082019050612c066000830188611d29565b612c136020830187612b24565b8181036040830152612c258186612b93565b9050612c346060830185611e0a565b612c416080830184611d29565b969550505050505056fea2646970667358221220367ea6e6cbd1eb1e634bcfe555140feded96df617bbc487652754e612a9576bd64736f6c63430008100033

Deployed Bytecode

0x60806040526004361061016a5760003560e01c8063715018a6116100d1578063a457c2d71161008a578063dd62ed3e11610064578063dd62ed3e14610589578063e0b4933c146105c6578063e2314bea14610603578063f2fde38b1461062e57610171565b8063a457c2d7146104e4578063a9059cbb14610521578063c0fdea571461055e57610171565b8063715018a6146103d257806375b62532146103e957806375f0a87414610426578063768dc710146104515780638da5cb5b1461048e57806395d89b41146104b957610171565b8063313ce56711610123578063313ce567146102ae57806339509351146102d957806344ff37161461031657806349bd5a5e146103415780636612e66f1461036c57806370a082311461039557610171565b806306fdde0314610176578063095ea7b3146101a15780631694505e146101de57806318160ddd1461020957806323b872dd146102345780632e5bb6ff1461027157610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b610657565b6040516101989190611b7e565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c39190611c39565b6106e9565b6040516101d59190611c94565b60405180910390f35b3480156101ea57600080fd5b506101f361070c565b6040516102009190611d0e565b60405180910390f35b34801561021557600080fd5b5061021e610730565b60405161022b9190611d38565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190611d53565b61073a565b6040516102689190611c94565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190611da6565b610769565b6040516102a59190611c94565b60405180910390f35b3480156102ba57600080fd5b506102c36107c7565b6040516102d09190611def565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb9190611c39565b6107d0565b60405161030d9190611c94565b60405180910390f35b34801561032257600080fd5b5061032b610807565b6040516103389190611d38565b60405180910390f35b34801561034d57600080fd5b5061035661080d565b6040516103639190611e19565b60405180910390f35b34801561037857600080fd5b50610393600480360381019061038e9190611e60565b610833565b005b3480156103a157600080fd5b506103bc60048036038101906103b79190611ea0565b610928565b6040516103c99190611d38565b60405180910390f35b3480156103de57600080fd5b506103e7610970565b005b3480156103f557600080fd5b50610410600480360381019061040b9190611ea0565b610984565b60405161041d9190611c94565b60405180910390f35b34801561043257600080fd5b5061043b610ad7565b6040516104489190611e19565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190611ea0565b610afd565b6040516104859190611c94565b60405180910390f35b34801561049a57600080fd5b506104a3610b1d565b6040516104b09190611e19565b60405180910390f35b3480156104c557600080fd5b506104ce610b47565b6040516104db9190611b7e565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190611c39565b610bd9565b6040516105189190611c94565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190611c39565b610c50565b6040516105559190611c94565b60405180910390f35b34801561056a57600080fd5b50610573610c73565b6040516105809190611d38565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190611ecd565b610c79565b6040516105bd9190611d38565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190611da6565b610d00565b6040516105fa9190611c94565b60405180910390f35b34801561060f57600080fd5b50610618610d9d565b6040516106259190611d38565b60405180910390f35b34801561063a57600080fd5b5061065560048036038101906106509190611ea0565b610da3565b005b60606003805461066690611f3c565b80601f016020809104026020016040519081016040528092919081815260200182805461069290611f3c565b80156106df5780601f106106b4576101008083540402835291602001916106df565b820191906000526020600020905b8154815290600101906020018083116106c257829003601f168201915b5050505050905090565b6000806106f4610e26565b9050610701818585610e2e565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600080610745610e26565b9050610752858285610ff7565b61075d858585611083565b60019150509392505050565b60006107736113c8565b60648211156107b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ae90611fdf565b60405180910390fd5b8160078190555060019050919050565b60006009905090565b6000806107db610e26565b90506107fc8185856107ed8589610c79565b6107f7919061202e565b610e2e565b600191505092915050565b600c5481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61083b6113c8565b801515600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036108cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c4906120d4565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109786113c8565b6109826000611446565b565b600061098e6113c8565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1590612166565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a84906121f8565b60405180910390fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610b5690611f3c565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8290611f3c565b8015610bcf5780601f10610ba457610100808354040283529160200191610bcf565b820191906000526020600020905b815481529060010190602001808311610bb257829003601f168201915b5050505050905090565b600080610be4610e26565b90506000610bf28286610c79565b905083811015610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e9061228a565b60405180910390fd5b610c448286868403610e2e565b60019250505092915050565b600080610c5b610e26565b9050610c68818585611083565b600191505092915050565b600a5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610d0a6113c8565b60026064600654610d1b91906122d9565b610d25919061230a565b821115610d67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5e906123d6565b60405180910390fd5b600560149054906101000a900460ff16600a610d839190612529565b82610d8e919061230a565b600c8190555060019050919050565b60075481565b610dab6113c8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e11906125e6565b60405180910390fd5b610e2381611446565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9490612678565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f039061270a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610fea9190611d38565b60405180910390a3505050565b60006110038484610c79565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461107d578181101561106f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106690612776565b60405180910390fd5b61107c8484848403610e2e565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990612808565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611161576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111589061289a565b60405180910390fd5b8061116b84610928565b10156111ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a39061292c565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806112555750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561126e5750600d60149054906101000a900460ff16155b156113b757600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461139757600c54600a5410611396576112de600c5461150c565b600c54600a60008282546112f2919061294c565b925050819055506000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050905080611394576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138b906129cc565b60405180910390fd5b505b5b60006113a484848461177f565b90506113b184848361188e565b506113c3565b6113c283838361188e565b5b505050565b6113d0610e26565b73ffffffffffffffffffffffffffffffffffffffff166113ee610b1d565b73ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90612a38565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600d60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561154457611543612a58565b5b6040519080825280602002602001820160405280156115725781602001602082028036833780820191505090505b509050308160008151811061158a57611589612a87565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561162f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116539190612acb565b8160018151811061166757611666612a87565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506116cc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610e2e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161172e959493929190612bf1565b600060405180830381600087803b15801561174857600080fd5b505af115801561175c573d6000803e3d6000fd5b50505050506000600d60146101000a81548160ff02191690831515021790555050565b600080600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118235750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561183057829050611883565b60006103e860075485611843919061230a565b61184d91906122d9565b9050808461185b919061294c565b915080600a600082825461186f919061202e565b9250508190555061188186308361188e565b505b809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f490612808565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361196c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119639061289a565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156119f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e99061292c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ae09190611d38565b60405180910390a350505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b28578082015181840152602081019050611b0d565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b5082611aee565b611b5a8185611af9565b9350611b6a818560208601611b0a565b611b7381611b34565b840191505092915050565b60006020820190508181036000830152611b988184611b45565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bd082611ba5565b9050919050565b611be081611bc5565b8114611beb57600080fd5b50565b600081359050611bfd81611bd7565b92915050565b6000819050919050565b611c1681611c03565b8114611c2157600080fd5b50565b600081359050611c3381611c0d565b92915050565b60008060408385031215611c5057611c4f611ba0565b5b6000611c5e85828601611bee565b9250506020611c6f85828601611c24565b9150509250929050565b60008115159050919050565b611c8e81611c79565b82525050565b6000602082019050611ca96000830184611c85565b92915050565b6000819050919050565b6000611cd4611ccf611cca84611ba5565b611caf565b611ba5565b9050919050565b6000611ce682611cb9565b9050919050565b6000611cf882611cdb565b9050919050565b611d0881611ced565b82525050565b6000602082019050611d236000830184611cff565b92915050565b611d3281611c03565b82525050565b6000602082019050611d4d6000830184611d29565b92915050565b600080600060608486031215611d6c57611d6b611ba0565b5b6000611d7a86828701611bee565b9350506020611d8b86828701611bee565b9250506040611d9c86828701611c24565b9150509250925092565b600060208284031215611dbc57611dbb611ba0565b5b6000611dca84828501611c24565b91505092915050565b600060ff82169050919050565b611de981611dd3565b82525050565b6000602082019050611e046000830184611de0565b92915050565b611e1381611bc5565b82525050565b6000602082019050611e2e6000830184611e0a565b92915050565b611e3d81611c79565b8114611e4857600080fd5b50565b600081359050611e5a81611e34565b92915050565b60008060408385031215611e7757611e76611ba0565b5b6000611e8585828601611bee565b9250506020611e9685828601611e4b565b9150509250929050565b600060208284031215611eb657611eb5611ba0565b5b6000611ec484828501611bee565b91505092915050565b60008060408385031215611ee457611ee3611ba0565b5b6000611ef285828601611bee565b9250506020611f0385828601611bee565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611f5457607f821691505b602082108103611f6757611f66611f0d565b5b50919050565b7f5432453a20746178206d757374206e6f7420626520677265617465722074686160008201527f6e20313025000000000000000000000000000000000000000000000000000000602082015250565b6000611fc9602583611af9565b9150611fd482611f6d565b604082019050919050565b60006020820190508181036000830152611ff881611fbc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061203982611c03565b915061204483611c03565b925082820190508082111561205c5761205b611fff565b5b92915050565b7f5432453a20616c72656164792073657420746f2063757272656e74207374617460008201527f7577000000000000000000000000000000000000000000000000000000000000602082015250565b60006120be602283611af9565b91506120c982612062565b604082019050919050565b600060208201905081810360008301526120ed816120b1565b9050919050565b7f5432453a204c5020506169722063616e6e6f742062652074686520446561642060008201527f77616c6c65742100000000000000000000000000000000000000000000000000602082015250565b6000612150602783611af9565b915061215b826120f4565b604082019050919050565b6000602082019050818103600083015261217f81612143565b9050919050565b7f5432453a204c5020506169722063616e6e6f742062652074686520302077616c60008201527f6c65742100000000000000000000000000000000000000000000000000000000602082015250565b60006121e2602483611af9565b91506121ed82612186565b604082019050919050565b60006020820190508181036000830152612211816121d5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612274602583611af9565b915061227f82612218565b604082019050919050565b600060208201905081810360008301526122a381612267565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122e482611c03565b91506122ef83611c03565b9250826122ff576122fe6122aa565b5b828204905092915050565b600061231582611c03565b915061232083611c03565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561235957612358611fff565b5b828202905092915050565b7f5432453a2043616e6e6f7420746178206d6f7265207468616e203225206f662060008201527f74686520737570706c79206174206f6e63652100000000000000000000000000602082015250565b60006123c0603383611af9565b91506123cb82612364565b604082019050919050565b600060208201905081810360008301526123ef816123b3565b9050919050565b60008160011c9050919050565b6000808291508390505b600185111561244d5780860481111561242957612428611fff565b5b60018516156124385780820291505b8081029050612446856123f6565b945061240d565b94509492505050565b6000826124665760019050612522565b816124745760009050612522565b816001811461248a5760028114612494576124c3565b6001915050612522565b60ff8411156124a6576124a5611fff565b5b8360020a9150848211156124bd576124bc611fff565b5b50612522565b5060208310610133831016604e8410600b84101617156124f85782820a9050838111156124f3576124f2611fff565b5b612522565b6125058484846001612403565b9250905081840481111561251c5761251b611fff565b5b81810290505b9392505050565b600061253482611c03565b915061253f83611dd3565b925061256c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612456565b905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006125d0602683611af9565b91506125db82612574565b604082019050919050565b600060208201905081810360008301526125ff816125c3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612662602483611af9565b915061266d82612606565b604082019050919050565b6000602082019050818103600083015261269181612655565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006126f4602283611af9565b91506126ff82612698565b604082019050919050565b60006020820190508181036000830152612723816126e7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612760601d83611af9565b915061276b8261272a565b602082019050919050565b6000602082019050818103600083015261278f81612753565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006127f2602583611af9565b91506127fd82612796565b604082019050919050565b60006020820190508181036000830152612821816127e5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612884602383611af9565b915061288f82612828565b604082019050919050565b600060208201905081810360008301526128b381612877565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612916602683611af9565b9150612921826128ba565b604082019050919050565b6000602082019050818103600083015261294581612909565b9050919050565b600061295782611c03565b915061296283611c03565b925082820390508181111561297a57612979611fff565b5b92915050565b7f5432453a204661696c656420746f2073656e6420455448000000000000000000600082015250565b60006129b6601783611af9565b91506129c182612980565b602082019050919050565b600060208201905081810360008301526129e5816129a9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612a22602083611af9565b9150612a2d826129ec565b602082019050919050565b60006020820190508181036000830152612a5181612a15565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612ac581611bd7565b92915050565b600060208284031215612ae157612ae0611ba0565b5b6000612aef84828501612ab6565b91505092915050565b6000819050919050565b6000612b1d612b18612b1384612af8565b611caf565b611c03565b9050919050565b612b2d81612b02565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b6881611bc5565b82525050565b6000612b7a8383612b5f565b60208301905092915050565b6000602082019050919050565b6000612b9e82612b33565b612ba88185612b3e565b9350612bb383612b4f565b8060005b83811015612be4578151612bcb8882612b6e565b9750612bd683612b86565b925050600181019050612bb7565b5085935050505092915050565b600060a082019050612c066000830188611d29565b612c136020830187612b24565b8181036040830152612c258186612b93565b9050612c346060830185611e0a565b612c416080830184611d29565b969550505050505056fea2646970667358221220367ea6e6cbd1eb1e634bcfe555140feded96df617bbc487652754e612a9576bd64736f6c63430008100033

Deployed Bytecode Sourcemap

30059:5155:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19778:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22052:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30538:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20916:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22876:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34689:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20759:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24592:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30477:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30596:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33646:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19943:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17037:103;;;;;;;;;;;;;:::i;:::-;;34373:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30222:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30420:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16389:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19602:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23676:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21496:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30376:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21089:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34918:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30181:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17295:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19778:102;19834:13;19867:5;19860:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19778:102;:::o;22052:244::-;22173:4;22195:13;22211:12;:10;:12::i;:::-;22195:28;;22234:32;22243:5;22250:7;22259:6;22234:8;:32::i;:::-;22284:4;22277:11;;;22052:244;;;;:::o;30538:51::-;;;:::o;20916:110::-;20979:7;21006:12;;20999:19;;20916:110;:::o;22876:297::-;23009:4;23026:15;23044:12;:10;:12::i;:::-;23026:30;;23067:38;23083:4;23089:7;23098:6;23067:15;:38::i;:::-;23116:27;23126:4;23132:2;23136:6;23116:9;:27::i;:::-;23161:4;23154:11;;;22876:297;;;;;:::o;34689:221::-;34754:4;16275:13;:11;:13::i;:::-;34796:3:::1;34779:13;:20;;34771:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34867:13;34852:12;:28;;;;34898:4;34891:11;;34689:221:::0;;;:::o;20759:92::-;20817:5;20842:1;20835:8;;20759:92;:::o;24592:272::-;24709:4;24731:13;24747:12;:10;:12::i;:::-;24731:28;;24770:64;24779:5;24786:7;24823:10;24795:25;24805:5;24812:7;24795:9;:25::i;:::-;:38;;;;:::i;:::-;24770:8;:64::i;:::-;24852:4;24845:11;;;24592:272;;;;:::o;30477:52::-;;;;:::o;30596:28::-;;;;;;;;;;;;;:::o;33646:233::-;16275:13;:11;:13::i;:::-;33776:7:::1;33744:39;;:18;:28;33763:8;33744:28;;;;;;;;;;;;;;;;;;;;;;;;;:39;;::::0;33736:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33864:7;33833:18;:28;33852:8;33833:28;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;33646:233:::0;;:::o;19943:177::-;20062:7;20094:9;:18;20104:7;20094:18;;;;;;;;;;;;;;;;20087:25;;19943:177;;;:::o;17037:103::-;16275:13;:11;:13::i;:::-;17102:30:::1;17129:1;17102:18;:30::i;:::-;17037:103::o:0;34373:308::-;34447:4;16275:13;:11;:13::i;:::-;34484:4:::1;;;;;;;;;;;34472:16;;:8;:16;;::::0;34464:68:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34571:1;34551:22;;:8;:22;;::::0;34543:71:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34643:8;34625:15;;:26;;;;;;;;;;;;;;;;;;34669:4;34662:11;;34373:308:::0;;;:::o;30222:75::-;;;;;;;;;;;;;:::o;30420:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;16389:87::-;16435:7;16462:6;;;;;;;;;;;16455:13;;16389:87;:::o;19602:106::-;19660:13;19693:7;19686:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19602:106;:::o;23676:507::-;23798:4;23820:13;23836:12;:10;:12::i;:::-;23820:28;;23859:24;23886:25;23896:5;23903:7;23886:9;:25::i;:::-;23859:52;;23964:15;23944:16;:35;;23922:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;24080:60;24089:5;24096:7;24124:15;24105:16;:34;24080:8;:60::i;:::-;24171:4;24164:11;;;;23676:507;;;;:::o;21496:236::-;21613:4;21635:13;21651:12;:10;:12::i;:::-;21635:28;;21674;21684:5;21691:2;21695:6;21674:9;:28::i;:::-;21720:4;21713:11;;;21496:236;;;;:::o;30376:37::-;;;;:::o;21089:201::-;21223:7;21255:11;:18;21267:5;21255:18;;;;;;;;;;;;;;;:27;21274:7;21255:27;;;;;;;;;;;;;;;;21248:34;;21089:201;;;;:::o;34918:256::-;34982:4;16275:13;:11;:13::i;:::-;35036:1:::1;35029:3;35019:7;;:13;;;;:::i;:::-;35018:19;;;;:::i;:::-;35007:7;:30;;34999:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;35133:9;;;;;;;;;;;35129:2;:13;;;;:::i;:::-;35119:7;:23;;;;:::i;:::-;35104:12;:38;;;;35162:4;35155:11;;34918:256:::0;;;:::o;30181:32::-;;;;:::o;17295:238::-;16275:13;:11;:13::i;:::-;17418:1:::1;17398:22;;:8;:22;;::::0;17376:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;17497:28;17516:8;17497:18;:28::i;:::-;17295:238:::0;:::o;15182:98::-;15235:7;15262:10;15255:17;;15182:98;:::o;26899:380::-;27052:1;27035:19;;:5;:19;;;27027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27133:1;27114:21;;:7;:21;;;27106:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27217:6;27187:11;:18;27199:5;27187:18;;;;;;;;;;;;;;;:27;27206:7;27187:27;;;;;;;;;;;;;;;:36;;;;27255:7;27239:32;;27248:5;27239:32;;;27264:6;27239:32;;;;;;:::i;:::-;;;;;;;;26899:380;;;:::o;27570:502::-;27705:24;27732:25;27742:5;27749:7;27732:9;:25::i;:::-;27705:52;;27792:17;27772:16;:37;27768:297;;27872:6;27852:16;:26;;27826:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27987:51;27996:5;28003:7;28031:6;28012:16;:25;27987:8;:51::i;:::-;27768:297;27694:378;27570:502;;;:::o;32112:1006::-;32226:1;32210:18;;:4;:18;;;32202:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32303:1;32289:16;;:2;:16;;;32281:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32383:6;32364:15;32374:4;32364:9;:15::i;:::-;:25;;32356:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32458:13;;;;;;;;;;;32450:21;;:4;:21;;;:44;;;;32481:13;;;;;;;;;;;32475:19;;:2;:19;;;32450:44;32449:57;;;;;32500:6;;;;;;;;;;;32499:7;32449:57;32445:666;;;32535:13;;;;;;;;;;;32527:21;;:4;:21;;;32523:378;;32597:12;;32574:18;;32573:36;32569:317;;32634:25;32646:12;;32634:11;:25::i;:::-;32704:12;;32682:18;;:34;;;;;;;:::i;:::-;;;;;;;;32739:9;32759:15;;;;;;;;;;;32751:29;;:52;32781:21;32751:52;;;;;;;;;;;;;;;;;;;;;;;32739:64;;32834:4;32826:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;32611:275;32569:317;32523:378;32917:22;32942:25;32950:4;32956:2;32960:6;32942:7;:25::i;:::-;32917:50;;32982:41;32998:4;33004:2;33008:14;32982:15;:41::i;:::-;32508:527;32445:666;;;33066:33;33082:4;33088:2;33092:6;33066:15;:33::i;:::-;32445:666;32112:1006;;;:::o;16554:132::-;16629:12;:10;:12::i;:::-;16618:23;;:7;:5;:7::i;:::-;:23;;;16610:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16554:132::o;17693:191::-;17767:16;17786:6;;;;;;;;;;;17767:25;;17812:8;17803:6;;:17;;;;;;;;;;;;;;;;;;17867:8;17836:40;;17857:8;17836:40;;;;;;;;;;;;17756:128;17693:191;:::o;33887:478::-;30704:4;30695:6;;:13;;;;;;;;;;;;;;;;;;33956:21:::1;33994:1;33980:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33956:40;;34025:4;34007;34012:1;34007:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34051:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34041:4;34046:1;34041:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34086:62;34103:4;34118:15;34136:11;34086:8;:62::i;:::-;34161:15;:66;;;34242:11;34268:1;34284:4;34311;34331:15;34161:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33945:420;30740:5:::0;30731:6;;:14;;;;;;;;;;;;;;;;;;33887:478;:::o;33126:508::-;33203:7;33223:22;33260:18;:24;33279:4;33260:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;33288:18;:22;33307:2;33288:22;;;;;;;;;;;;;;;;;;;;;;;;;33260:50;33256:339;;;33344:6;33327:23;;33256:339;;;33393:11;33434:4;33418:12;;33409:6;:21;;;;:::i;:::-;33408:30;;;;:::i;:::-;33393:46;;33480:3;33471:6;:12;;;;:::i;:::-;33454:29;;33520:3;33498:18;;:25;;;;;;;:::i;:::-;;;;;;;;33540:43;33556:4;33570;33578:3;33540:15;:43::i;:::-;33378:217;33256:339;33612:14;33605:21;;;33126:508;;;;;:::o;28080:776::-;28227:1;28211:18;;:4;:18;;;28203:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28304:1;28290:16;;:2;:16;;;28282:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28359:19;28381:9;:15;28391:4;28381:15;;;;;;;;;;;;;;;;28359:37;;28444:6;28429:11;:21;;28407:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;28584:6;28570:11;:20;28552:9;:15;28562:4;28552:15;;;;;;;;;;;;;;;:38;;;;28787:6;28770:9;:13;28780:2;28770:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;28837:2;28822:26;;28831:4;28822:26;;;28841:6;28822:26;;;;;;:::i;:::-;;;;;;;;28192:664;28080:776;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:152::-;3868:9;3901:37;3932:5;3901:37;:::i;:::-;3888:50;;3792:152;;;:::o;3950:183::-;4063:63;4120:5;4063:63;:::i;:::-;4058:3;4051:76;3950:183;;:::o;4139:274::-;4258:4;4296:2;4285:9;4281:18;4273:26;;4309:97;4403:1;4392:9;4388:17;4379:6;4309:97;:::i;:::-;4139:274;;;;:::o;4419:118::-;4506:24;4524:5;4506:24;:::i;:::-;4501:3;4494:37;4419:118;;:::o;4543:222::-;4636:4;4674:2;4663:9;4659:18;4651:26;;4687:71;4755:1;4744:9;4740:17;4731:6;4687:71;:::i;:::-;4543:222;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:329::-;5455:6;5504:2;5492:9;5483:7;5479:23;5475:32;5472:119;;;5510:79;;:::i;:::-;5472:119;5630:1;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5601:117;5396:329;;;;:::o;5731:86::-;5766:7;5806:4;5799:5;5795:16;5784:27;;5731:86;;;:::o;5823:112::-;5906:22;5922:5;5906:22;:::i;:::-;5901:3;5894:35;5823:112;;:::o;5941:214::-;6030:4;6068:2;6057:9;6053:18;6045:26;;6081:67;6145:1;6134:9;6130:17;6121:6;6081:67;:::i;:::-;5941:214;;;;:::o;6161:118::-;6248:24;6266:5;6248:24;:::i;:::-;6243:3;6236:37;6161:118;;:::o;6285:222::-;6378:4;6416:2;6405:9;6401:18;6393:26;;6429:71;6497:1;6486:9;6482:17;6473:6;6429:71;:::i;:::-;6285:222;;;;:::o;6513:116::-;6583:21;6598:5;6583:21;:::i;:::-;6576:5;6573:32;6563:60;;6619:1;6616;6609:12;6563:60;6513:116;:::o;6635:133::-;6678:5;6716:6;6703:20;6694:29;;6732:30;6756:5;6732:30;:::i;:::-;6635:133;;;;:::o;6774:468::-;6839:6;6847;6896:2;6884:9;6875:7;6871:23;6867:32;6864:119;;;6902:79;;:::i;:::-;6864:119;7022:1;7047:53;7092:7;7083:6;7072:9;7068:22;7047:53;:::i;:::-;7037:63;;6993:117;7149:2;7175:50;7217:7;7208:6;7197:9;7193:22;7175:50;:::i;:::-;7165:60;;7120:115;6774:468;;;;;:::o;7248:329::-;7307:6;7356:2;7344:9;7335:7;7331:23;7327:32;7324:119;;;7362:79;;:::i;:::-;7324:119;7482:1;7507:53;7552:7;7543:6;7532:9;7528:22;7507:53;:::i;:::-;7497:63;;7453:117;7248:329;;;;:::o;7583:474::-;7651:6;7659;7708:2;7696:9;7687:7;7683:23;7679:32;7676:119;;;7714:79;;:::i;:::-;7676:119;7834:1;7859:53;7904:7;7895:6;7884:9;7880:22;7859:53;:::i;:::-;7849:63;;7805:117;7961:2;7987:53;8032:7;8023:6;8012:9;8008:22;7987:53;:::i;:::-;7977:63;;7932:118;7583:474;;;;;:::o;8063:180::-;8111:77;8108:1;8101:88;8208:4;8205:1;8198:15;8232:4;8229:1;8222:15;8249:320;8293:6;8330:1;8324:4;8320:12;8310:22;;8377:1;8371:4;8367:12;8398:18;8388:81;;8454:4;8446:6;8442:17;8432:27;;8388:81;8516:2;8508:6;8505:14;8485:18;8482:38;8479:84;;8535:18;;:::i;:::-;8479:84;8300:269;8249:320;;;:::o;8575:224::-;8715:34;8711:1;8703:6;8699:14;8692:58;8784:7;8779:2;8771:6;8767:15;8760:32;8575:224;:::o;8805:366::-;8947:3;8968:67;9032:2;9027:3;8968:67;:::i;:::-;8961:74;;9044:93;9133:3;9044:93;:::i;:::-;9162:2;9157:3;9153:12;9146:19;;8805:366;;;:::o;9177:419::-;9343:4;9381:2;9370:9;9366:18;9358:26;;9430:9;9424:4;9420:20;9416:1;9405:9;9401:17;9394:47;9458:131;9584:4;9458:131;:::i;:::-;9450:139;;9177:419;;;:::o;9602:180::-;9650:77;9647:1;9640:88;9747:4;9744:1;9737:15;9771:4;9768:1;9761:15;9788:191;9828:3;9847:20;9865:1;9847:20;:::i;:::-;9842:25;;9881:20;9899:1;9881:20;:::i;:::-;9876:25;;9924:1;9921;9917:9;9910:16;;9945:3;9942:1;9939:10;9936:36;;;9952:18;;:::i;:::-;9936:36;9788:191;;;;:::o;9985:221::-;10125:34;10121:1;10113:6;10109:14;10102:58;10194:4;10189:2;10181:6;10177:15;10170:29;9985:221;:::o;10212:366::-;10354:3;10375:67;10439:2;10434:3;10375:67;:::i;:::-;10368:74;;10451:93;10540:3;10451:93;:::i;:::-;10569:2;10564:3;10560:12;10553:19;;10212:366;;;:::o;10584:419::-;10750:4;10788:2;10777:9;10773:18;10765:26;;10837:9;10831:4;10827:20;10823:1;10812:9;10808:17;10801:47;10865:131;10991:4;10865:131;:::i;:::-;10857:139;;10584:419;;;:::o;11009:226::-;11149:34;11145:1;11137:6;11133:14;11126:58;11218:9;11213:2;11205:6;11201:15;11194:34;11009:226;:::o;11241:366::-;11383:3;11404:67;11468:2;11463:3;11404:67;:::i;:::-;11397:74;;11480:93;11569:3;11480:93;:::i;:::-;11598:2;11593:3;11589:12;11582:19;;11241:366;;;:::o;11613:419::-;11779:4;11817:2;11806:9;11802:18;11794:26;;11866:9;11860:4;11856:20;11852:1;11841:9;11837:17;11830:47;11894:131;12020:4;11894:131;:::i;:::-;11886:139;;11613:419;;;:::o;12038:223::-;12178:34;12174:1;12166:6;12162:14;12155:58;12247:6;12242:2;12234:6;12230:15;12223:31;12038:223;:::o;12267:366::-;12409:3;12430:67;12494:2;12489:3;12430:67;:::i;:::-;12423:74;;12506:93;12595:3;12506:93;:::i;:::-;12624:2;12619:3;12615:12;12608:19;;12267:366;;;:::o;12639:419::-;12805:4;12843:2;12832:9;12828:18;12820:26;;12892:9;12886:4;12882:20;12878:1;12867:9;12863:17;12856:47;12920:131;13046:4;12920:131;:::i;:::-;12912:139;;12639:419;;;:::o;13064:224::-;13204:34;13200:1;13192:6;13188:14;13181:58;13273:7;13268:2;13260:6;13256:15;13249:32;13064:224;:::o;13294:366::-;13436:3;13457:67;13521:2;13516:3;13457:67;:::i;:::-;13450:74;;13533:93;13622:3;13533:93;:::i;:::-;13651:2;13646:3;13642:12;13635:19;;13294:366;;;:::o;13666:419::-;13832:4;13870:2;13859:9;13855:18;13847:26;;13919:9;13913:4;13909:20;13905:1;13894:9;13890:17;13883:47;13947:131;14073:4;13947:131;:::i;:::-;13939:139;;13666:419;;;:::o;14091:180::-;14139:77;14136:1;14129:88;14236:4;14233:1;14226:15;14260:4;14257:1;14250:15;14277:185;14317:1;14334:20;14352:1;14334:20;:::i;:::-;14329:25;;14368:20;14386:1;14368:20;:::i;:::-;14363:25;;14407:1;14397:35;;14412:18;;:::i;:::-;14397:35;14454:1;14451;14447:9;14442:14;;14277:185;;;;:::o;14468:348::-;14508:7;14531:20;14549:1;14531:20;:::i;:::-;14526:25;;14565:20;14583:1;14565:20;:::i;:::-;14560:25;;14753:1;14685:66;14681:74;14678:1;14675:81;14670:1;14663:9;14656:17;14652:105;14649:131;;;14760:18;;:::i;:::-;14649:131;14808:1;14805;14801:9;14790:20;;14468:348;;;;:::o;14822:238::-;14962:34;14958:1;14950:6;14946:14;14939:58;15031:21;15026:2;15018:6;15014:15;15007:46;14822:238;:::o;15066:366::-;15208:3;15229:67;15293:2;15288:3;15229:67;:::i;:::-;15222:74;;15305:93;15394:3;15305:93;:::i;:::-;15423:2;15418:3;15414:12;15407:19;;15066:366;;;:::o;15438:419::-;15604:4;15642:2;15631:9;15627:18;15619:26;;15691:9;15685:4;15681:20;15677:1;15666:9;15662:17;15655:47;15719:131;15845:4;15719:131;:::i;:::-;15711:139;;15438:419;;;:::o;15863:102::-;15905:8;15952:5;15949:1;15945:13;15924:34;;15863:102;;;:::o;15971:848::-;16032:5;16039:4;16063:6;16054:15;;16087:5;16078:14;;16101:712;16122:1;16112:8;16109:15;16101:712;;;16217:4;16212:3;16208:14;16202:4;16199:24;16196:50;;;16226:18;;:::i;:::-;16196:50;16276:1;16266:8;16262:16;16259:451;;;16691:4;16684:5;16680:16;16671:25;;16259:451;16741:4;16735;16731:15;16723:23;;16771:32;16794:8;16771:32;:::i;:::-;16759:44;;16101:712;;;15971:848;;;;;;;:::o;16825:1073::-;16879:5;17070:8;17060:40;;17091:1;17082:10;;17093:5;;17060:40;17119:4;17109:36;;17136:1;17127:10;;17138:5;;17109:36;17205:4;17253:1;17248:27;;;;17289:1;17284:191;;;;17198:277;;17248:27;17266:1;17257:10;;17268:5;;;17284:191;17329:3;17319:8;17316:17;17313:43;;;17336:18;;:::i;:::-;17313:43;17385:8;17382:1;17378:16;17369:25;;17420:3;17413:5;17410:14;17407:40;;;17427:18;;:::i;:::-;17407:40;17460:5;;;17198:277;;17584:2;17574:8;17571:16;17565:3;17559:4;17556:13;17552:36;17534:2;17524:8;17521:16;17516:2;17510:4;17507:12;17503:35;17487:111;17484:246;;;17640:8;17634:4;17630:19;17621:28;;17675:3;17668:5;17665:14;17662:40;;;17682:18;;:::i;:::-;17662:40;17715:5;;17484:246;17755:42;17793:3;17783:8;17777:4;17774:1;17755:42;:::i;:::-;17740:57;;;;17829:4;17824:3;17820:14;17813:5;17810:25;17807:51;;;17838:18;;:::i;:::-;17807:51;17887:4;17880:5;17876:16;17867:25;;16825:1073;;;;;;:::o;17904:281::-;17962:5;17986:23;18004:4;17986:23;:::i;:::-;17978:31;;18030:25;18046:8;18030:25;:::i;:::-;18018:37;;18074:104;18111:66;18101:8;18095:4;18074:104;:::i;:::-;18065:113;;17904:281;;;;:::o;18191:225::-;18331:34;18327:1;18319:6;18315:14;18308:58;18400:8;18395:2;18387:6;18383:15;18376:33;18191:225;:::o;18422:366::-;18564:3;18585:67;18649:2;18644:3;18585:67;:::i;:::-;18578:74;;18661:93;18750:3;18661:93;:::i;:::-;18779:2;18774:3;18770:12;18763:19;;18422:366;;;:::o;18794:419::-;18960:4;18998:2;18987:9;18983:18;18975:26;;19047:9;19041:4;19037:20;19033:1;19022:9;19018:17;19011:47;19075:131;19201:4;19075:131;:::i;:::-;19067:139;;18794:419;;;:::o;19219:223::-;19359:34;19355:1;19347:6;19343:14;19336:58;19428:6;19423:2;19415:6;19411:15;19404:31;19219:223;:::o;19448:366::-;19590:3;19611:67;19675:2;19670:3;19611:67;:::i;:::-;19604:74;;19687:93;19776:3;19687:93;:::i;:::-;19805:2;19800:3;19796:12;19789:19;;19448:366;;;:::o;19820:419::-;19986:4;20024:2;20013:9;20009:18;20001:26;;20073:9;20067:4;20063:20;20059:1;20048:9;20044:17;20037:47;20101:131;20227:4;20101:131;:::i;:::-;20093:139;;19820:419;;;:::o;20245:221::-;20385:34;20381:1;20373:6;20369:14;20362:58;20454:4;20449:2;20441:6;20437:15;20430:29;20245:221;:::o;20472:366::-;20614:3;20635:67;20699:2;20694:3;20635:67;:::i;:::-;20628:74;;20711:93;20800:3;20711:93;:::i;:::-;20829:2;20824:3;20820:12;20813:19;;20472:366;;;:::o;20844:419::-;21010:4;21048:2;21037:9;21033:18;21025:26;;21097:9;21091:4;21087:20;21083:1;21072:9;21068:17;21061:47;21125:131;21251:4;21125:131;:::i;:::-;21117:139;;20844:419;;;:::o;21269:179::-;21409:31;21405:1;21397:6;21393:14;21386:55;21269:179;:::o;21454:366::-;21596:3;21617:67;21681:2;21676:3;21617:67;:::i;:::-;21610:74;;21693:93;21782:3;21693:93;:::i;:::-;21811:2;21806:3;21802:12;21795:19;;21454:366;;;:::o;21826:419::-;21992:4;22030:2;22019:9;22015:18;22007:26;;22079:9;22073:4;22069:20;22065:1;22054:9;22050:17;22043:47;22107:131;22233:4;22107:131;:::i;:::-;22099:139;;21826:419;;;:::o;22251:224::-;22391:34;22387:1;22379:6;22375:14;22368:58;22460:7;22455:2;22447:6;22443:15;22436:32;22251:224;:::o;22481:366::-;22623:3;22644:67;22708:2;22703:3;22644:67;:::i;:::-;22637:74;;22720:93;22809:3;22720:93;:::i;:::-;22838:2;22833:3;22829:12;22822:19;;22481:366;;;:::o;22853:419::-;23019:4;23057:2;23046:9;23042:18;23034:26;;23106:9;23100:4;23096:20;23092:1;23081:9;23077:17;23070:47;23134:131;23260:4;23134:131;:::i;:::-;23126:139;;22853:419;;;:::o;23278:222::-;23418:34;23414:1;23406:6;23402:14;23395:58;23487:5;23482:2;23474:6;23470:15;23463:30;23278:222;:::o;23506:366::-;23648:3;23669:67;23733:2;23728:3;23669:67;:::i;:::-;23662:74;;23745:93;23834:3;23745:93;:::i;:::-;23863:2;23858:3;23854:12;23847:19;;23506:366;;;:::o;23878:419::-;24044:4;24082:2;24071:9;24067:18;24059:26;;24131:9;24125:4;24121:20;24117:1;24106:9;24102:17;24095:47;24159:131;24285:4;24159:131;:::i;:::-;24151:139;;23878:419;;;:::o;24303:225::-;24443:34;24439:1;24431:6;24427:14;24420:58;24512:8;24507:2;24499:6;24495:15;24488:33;24303:225;:::o;24534:366::-;24676:3;24697:67;24761:2;24756:3;24697:67;:::i;:::-;24690:74;;24773:93;24862:3;24773:93;:::i;:::-;24891:2;24886:3;24882:12;24875:19;;24534:366;;;:::o;24906:419::-;25072:4;25110:2;25099:9;25095:18;25087:26;;25159:9;25153:4;25149:20;25145:1;25134:9;25130:17;25123:47;25187:131;25313:4;25187:131;:::i;:::-;25179:139;;24906:419;;;:::o;25331:194::-;25371:4;25391:20;25409:1;25391:20;:::i;:::-;25386:25;;25425:20;25443:1;25425:20;:::i;:::-;25420:25;;25469:1;25466;25462:9;25454:17;;25493:1;25487:4;25484:11;25481:37;;;25498:18;;:::i;:::-;25481:37;25331:194;;;;:::o;25531:173::-;25671:25;25667:1;25659:6;25655:14;25648:49;25531:173;:::o;25710:366::-;25852:3;25873:67;25937:2;25932:3;25873:67;:::i;:::-;25866:74;;25949:93;26038:3;25949:93;:::i;:::-;26067:2;26062:3;26058:12;26051:19;;25710:366;;;:::o;26082:419::-;26248:4;26286:2;26275:9;26271:18;26263:26;;26335:9;26329:4;26325:20;26321:1;26310:9;26306:17;26299:47;26363:131;26489:4;26363:131;:::i;:::-;26355:139;;26082:419;;;:::o;26507:182::-;26647:34;26643:1;26635:6;26631:14;26624:58;26507:182;:::o;26695:366::-;26837:3;26858:67;26922:2;26917:3;26858:67;:::i;:::-;26851:74;;26934:93;27023:3;26934:93;:::i;:::-;27052:2;27047:3;27043:12;27036:19;;26695:366;;;:::o;27067:419::-;27233:4;27271:2;27260:9;27256:18;27248:26;;27320:9;27314:4;27310:20;27306:1;27295:9;27291:17;27284:47;27348:131;27474:4;27348:131;:::i;:::-;27340:139;;27067:419;;;:::o;27492:180::-;27540:77;27537:1;27530:88;27637:4;27634:1;27627:15;27661:4;27658:1;27651:15;27678:180;27726:77;27723:1;27716:88;27823:4;27820:1;27813:15;27847:4;27844:1;27837:15;27864:143;27921:5;27952:6;27946:13;27937:22;;27968:33;27995:5;27968:33;:::i;:::-;27864:143;;;;:::o;28013:351::-;28083:6;28132:2;28120:9;28111:7;28107:23;28103:32;28100:119;;;28138:79;;:::i;:::-;28100:119;28258:1;28283:64;28339:7;28330:6;28319:9;28315:22;28283:64;:::i;:::-;28273:74;;28229:128;28013:351;;;;:::o;28370:85::-;28415:7;28444:5;28433:16;;28370:85;;;:::o;28461:158::-;28519:9;28552:61;28570:42;28579:32;28605:5;28579:32;:::i;:::-;28570:42;:::i;:::-;28552:61;:::i;:::-;28539:74;;28461:158;;;:::o;28625:147::-;28720:45;28759:5;28720:45;:::i;:::-;28715:3;28708:58;28625:147;;:::o;28778:114::-;28845:6;28879:5;28873:12;28863:22;;28778:114;;;:::o;28898:184::-;28997:11;29031:6;29026:3;29019:19;29071:4;29066:3;29062:14;29047:29;;28898:184;;;;:::o;29088:132::-;29155:4;29178:3;29170:11;;29208:4;29203:3;29199:14;29191:22;;29088:132;;;:::o;29226:108::-;29303:24;29321:5;29303:24;:::i;:::-;29298:3;29291:37;29226:108;;:::o;29340:179::-;29409:10;29430:46;29472:3;29464:6;29430:46;:::i;:::-;29508:4;29503:3;29499:14;29485:28;;29340:179;;;;:::o;29525:113::-;29595:4;29627;29622:3;29618:14;29610:22;;29525:113;;;:::o;29674:732::-;29793:3;29822:54;29870:5;29822:54;:::i;:::-;29892:86;29971:6;29966:3;29892:86;:::i;:::-;29885:93;;30002:56;30052:5;30002:56;:::i;:::-;30081:7;30112:1;30097:284;30122:6;30119:1;30116:13;30097:284;;;30198:6;30192:13;30225:63;30284:3;30269:13;30225:63;:::i;:::-;30218:70;;30311:60;30364:6;30311:60;:::i;:::-;30301:70;;30157:224;30144:1;30141;30137:9;30132:14;;30097:284;;;30101:14;30397:3;30390:10;;29798:608;;;29674:732;;;;:::o;30412:831::-;30675:4;30713:3;30702:9;30698:19;30690:27;;30727:71;30795:1;30784:9;30780:17;30771:6;30727:71;:::i;:::-;30808:80;30884:2;30873:9;30869:18;30860:6;30808:80;:::i;:::-;30935:9;30929:4;30925:20;30920:2;30909:9;30905:18;30898:48;30963:108;31066:4;31057:6;30963:108;:::i;:::-;30955:116;;31081:72;31149:2;31138:9;31134:18;31125:6;31081:72;:::i;:::-;31163:73;31231:3;31220:9;31216:19;31207:6;31163:73;:::i;:::-;30412:831;;;;;;;;:::o

Swarm Source

ipfs://367ea6e6cbd1eb1e634bcfe555140feded96df617bbc487652754e612a9576bd
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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