ETH Price: $3,965.31 (+1.89%)

Token

ERC-20: MuskXMania (XMANIA)
 

Overview

Max Total Supply

6,281,971,000 XMANIA

Holders

64

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.084445808 XMANIA

Value
$0.00
0x47eb41bb819d1582071a3d1146fa07545beff009
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:
MuskXMania

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-28
*/

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


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

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // 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);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/xmna.sol


pragma solidity 0.8.20;





contract MuskXMania is Ownable, ERC20 {

    address WETH;
    
    string constant _name = "MuskXMania";
    string constant _symbol = "XMANIA";
    uint8 constant _decimals = 9;

    event setReceivers(address autoLiquidityReceiver, address marketingTaxReceiver);
    event AutoLiquify(uint256 amountETH, uint256 amountTokens);

    uint256 _totalSupply =  6281971000 * 10**_decimals;

    uint256 public _maxWalletToken = (_totalSupply * 2) / 100;

    mapping (address => bool) isExcludedFromTax;
    mapping (address => bool) isExcludedFromMaxW;

    uint256 private liquidityTax = 2;
    uint256 private marketingTax  = 8;
    uint256 public totalFee = liquidityTax + marketingTax;
    uint256 private taxDenom = 100;

    uint256 sellPercent = 10;
    uint256 buyPercent = 10;

    address private autoLiquidityReceiver;
    address private marketingTaxReceiver;

    IUniswapV2Router02 public router;
    address public pair;

    bool public tradingOpen = false;
    bool public swapEnabled = true;
    uint256 public swapThreshold = 6281971000000000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor() ERC20(_name, _symbol) {
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        WETH = router.WETH();
        pair = IUniswapV2Factory(router.factory()).createPair(address(this), WETH);

        isExcludedFromTax[msg.sender] = true;
        isExcludedFromTax[address(this)] = true;
        isExcludedFromMaxW[pair] = true;
        isExcludedFromMaxW[marketingTaxReceiver] = true;
        isExcludedFromMaxW[address(this)] = true;

        autoLiquidityReceiver = 0x4f6A590d232517E093394E5ECE5047a7e94154Ed;
        marketingTaxReceiver = 0x4f6A590d232517E093394E5ECE5047a7e94154Ed;

        _mint(msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() public view virtual override returns (uint256) { return _totalSupply; }
    function decimals() public view virtual override returns (uint8) { return _decimals; }
    function symbol() public view virtual override returns (string memory) { return _symbol; }
    function name() public view virtual override returns (string memory) { return _name; }

    function _transfer(address from, address to, uint256 amount) internal override {
        if(!isExcludedFromTax[from] && !isExcludedFromTax[to]) {
            require(tradingOpen, "Trading not open yet");
        }
        if (to != owner() && to != address(this) && to != pair && to != marketingTaxReceiver && !isExcludedFromMaxW[to]) {
            uint256 tokensBalance = balanceOf(to);
            require((tokensBalance + amount) <= _maxWalletToken, "Your tokens balance can not be more than 2% of supply");
        }
        if(shouldSwap()){ doSwap(); }
        uint256 amountReceived = (isExcludedFromTax[from] || isExcludedFromTax[to]) ? amount : getTax(from, to, amount);
        super._transfer(from, to, amountReceived);
    }

    function getTax(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 percent = 0;
        uint256 feeAmount = 0;
        if(recipient == pair) {
            percent = sellPercent;
        } else if(sender == pair) {
            percent = buyPercent;
        }
        
        if(percent > 0) {
            feeAmount = ((amount * totalFee * percent) / (taxDenom * 100));
            super._transfer(sender, address(this), feeAmount);
        }
        
        return amount - feeAmount;
    }

    function shouldSwap() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && balanceOf(address(this)) >= swapThreshold;
    }

    function doSwap() internal swapping {
        uint256 dynamicLiquidityFee = liquidityTax;
        uint256 amountToLiquify = (swapThreshold * dynamicLiquidityFee) / totalFee / 2;
        uint256 amountToSwap = swapThreshold - amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;

        uint256 balanceBefore = address(this).balance;
        uint256 amoutToApprove = amountToSwap + amountToLiquify;

        _approve(address(this), address(router), amoutToApprove);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance - balanceBefore;

        uint256 totalETHFee = totalFee - (dynamicLiquidityFee / 2);
        
        uint256 amountETHLiquidity = (amountETH * dynamicLiquidityFee) / totalETHFee / 2;
        uint256 amountETHMarketing = (amountETH * marketingTax) / totalETHFee;

        (bool tmpSuccess,) = payable(marketingTaxReceiver).call{value: amountETHMarketing}("");
        
        tmpSuccess = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    function setExcludeFromFee(address account, bool excluded) external onlyOwner {
        isExcludedFromTax[account] = excluded;
    }

    function setWallets(address _autoLiquidityReceiver, address _marketingTaxReceiver) external onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingTaxReceiver = _marketingTaxReceiver;
        isExcludedFromTax[marketingTaxReceiver] = true;
        isExcludedFromTax[autoLiquidityReceiver] = true;

        emit setReceivers(autoLiquidityReceiver, marketingTaxReceiver);
    }

    function setMaxWalletHoldings(uint256 amount) external onlyOwner {
        _maxWalletToken = amount;
    }

    function setTradingOpen() external onlyOwner {
        tradingOpen = true;
    }
}

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":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"autoLiquidityReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"marketingTaxReceiver","type":"address"}],"name":"setReceivers","type":"event"},{"inputs":[],"name":"_maxWalletToken","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletHoldings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTradingOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingTaxReceiver","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a62000014919062000a82565b6401766f453862000026919062000ad2565b600755606460026007546200003c919062000ad2565b62000048919062000b49565b6008556002600b556008600c55600c54600b5462000067919062000b80565b600d556064600e55600a600f55600a6010555f6014806101000a81548160ff0219169083151502179055506001601460156101000a81548160ff0219169083151502179055506616516b59f1be00601555348015620000c4575f80fd5b506040518060400160405280600a81526020017f4d75736b584d616e6961000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f584d414e494100000000000000000000000000000000000000000000000000008152506200015162000145620006b860201b60201c565b620006bf60201b60201c565b816004908162000162919062000e15565b50806005908162000174919062000e15565b505050737a250d5630b4cf539739df2c5dacb4c659f2488d60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000236573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200025c919062000f5e565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000306573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200032c919062000f5e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016200038992919062000f9f565b6020604051808303815f875af1158015620003a6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003cc919062000f5e565b60145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550734f6a590d232517e093394e5ece5047a7e94154ed60115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734f6a590d232517e093394e5ece5047a7e94154ed60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006b2336007546200078060201b60201c565b62001074565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e89062001028565b60405180910390fd5b620008045f8383620008e660201b60201c565b8060035f82825462000817919062000b80565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008c7919062001059565b60405180910390a3620008e25f8383620008eb60201b60201c565b5050565b505050565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156200097a57808604811115620009525762000951620008f0565b5b6001851615620009625780820291505b808102905062000972856200091d565b945062000932565b94509492505050565b5f8262000994576001905062000a66565b81620009a3575f905062000a66565b8160018114620009bc5760028114620009c757620009fd565b600191505062000a66565b60ff841115620009dc57620009db620008f0565b5b8360020a915084821115620009f657620009f5620008f0565b5b5062000a66565b5060208310610133831016604e8410600b841016171562000a375782820a90508381111562000a315762000a30620008f0565b5b62000a66565b62000a46848484600162000929565b9250905081840481111562000a605762000a5f620008f0565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f62000a8e8262000a6d565b915062000a9b8362000a76565b925062000aca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000983565b905092915050565b5f62000ade8262000a6d565b915062000aeb8362000a6d565b925082820262000afb8162000a6d565b9150828204841483151762000b155762000b14620008f0565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000b558262000a6d565b915062000b628362000a6d565b92508262000b755762000b7462000b1c565b5b828204905092915050565b5f62000b8c8262000a6d565b915062000b998362000a6d565b925082820190508082111562000bb45762000bb3620008f0565b5b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000c3657607f821691505b60208210810362000c4c5762000c4b62000bf1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000cb07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c73565b62000cbc868362000c73565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000cfd62000cf762000cf18462000a6d565b62000cd4565b62000a6d565b9050919050565b5f819050919050565b62000d188362000cdd565b62000d3062000d278262000d04565b84845462000c7f565b825550505050565b5f90565b62000d4662000d38565b62000d5381848462000d0d565b505050565b5b8181101562000d7a5762000d6e5f8262000d3c565b60018101905062000d59565b5050565b601f82111562000dc95762000d938162000c52565b62000d9e8462000c64565b8101602085101562000dae578190505b62000dc662000dbd8562000c64565b83018262000d58565b50505b505050565b5f82821c905092915050565b5f62000deb5f198460080262000dce565b1980831691505092915050565b5f62000e05838362000dda565b9150826002028217905092915050565b62000e208262000bba565b67ffffffffffffffff81111562000e3c5762000e3b62000bc4565b5b62000e48825462000c1e565b62000e5582828562000d7e565b5f60209050601f83116001811462000e8b575f841562000e76578287015190505b62000e82858262000df8565b86555062000ef1565b601f19841662000e9b8662000c52565b5f5b8281101562000ec45784890151825560018201915060208501945060208101905062000e9d565b8683101562000ee4578489015162000ee0601f89168262000dda565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000f288262000efd565b9050919050565b62000f3a8162000f1c565b811462000f45575f80fd5b50565b5f8151905062000f588162000f2f565b92915050565b5f6020828403121562000f765762000f7562000ef9565b5b5f62000f858482850162000f48565b91505092915050565b62000f998162000f1c565b82525050565b5f60408201905062000fb45f83018562000f8e565b62000fc3602083018462000f8e565b9392505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001010601f8362000fca565b91506200101d8262000fda565b602082019050919050565b5f6020820190508181035f830152620010418162001002565b9050919050565b620010538162000a6d565b82525050565b5f6020820190506200106e5f83018462001048565b92915050565b6129cf80620010825f395ff3fe608060405260043610610169575f3560e01c806378109e54116100d0578063a9059cbb11610089578063dd62ed3e11610063578063dd62ed3e14610524578063f2fde38b14610560578063f887ea4014610588578063ffb54a99146105b257610170565b8063a9059cbb14610498578063af9549e0146104d4578063d3f6a157146104fc57610170565b806378109e541461038c5780638da5cb5b146103b657806395d89b41146103e057806399061beb1461040a578063a457c2d714610432578063a8aa1b311461046e57610170565b806323b872dd1161012257806323b872dd1461026e578063313ce567146102aa57806339509351146102d45780636ddd17131461031057806370a082311461033a578063715018a61461037657610170565b80630445b6671461017457806306fdde031461019e578063095ea7b3146101c857806318160ddd146102045780631df4ccfc1461022e5780631eed1ac81461025857610170565b3661017057005b5f80fd5b34801561017f575f80fd5b506101886105dc565b6040516101959190611bf4565b60405180910390f35b3480156101a9575f80fd5b506101b26105e2565b6040516101bf9190611c97565b60405180910390f35b3480156101d3575f80fd5b506101ee60048036038101906101e99190611d3f565b61061f565b6040516101fb9190611d97565b60405180910390f35b34801561020f575f80fd5b50610218610641565b6040516102259190611bf4565b60405180910390f35b348015610239575f80fd5b5061024261064a565b60405161024f9190611bf4565b60405180910390f35b348015610263575f80fd5b5061026c610650565b005b348015610279575f80fd5b50610294600480360381019061028f9190611db0565b610674565b6040516102a19190611d97565b60405180910390f35b3480156102b5575f80fd5b506102be6106a2565b6040516102cb9190611e1b565b60405180910390f35b3480156102df575f80fd5b506102fa60048036038101906102f59190611d3f565b6106aa565b6040516103079190611d97565b60405180910390f35b34801561031b575f80fd5b506103246106e0565b6040516103319190611d97565b60405180910390f35b348015610345575f80fd5b50610360600480360381019061035b9190611e34565b6106f3565b60405161036d9190611bf4565b60405180910390f35b348015610381575f80fd5b5061038a610739565b005b348015610397575f80fd5b506103a061074c565b6040516103ad9190611bf4565b60405180910390f35b3480156103c1575f80fd5b506103ca610752565b6040516103d79190611e6e565b60405180910390f35b3480156103eb575f80fd5b506103f4610779565b6040516104019190611c97565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190611e87565b6107b6565b005b34801561043d575f80fd5b5061045860048036038101906104539190611d3f565b6107c8565b6040516104659190611d97565b60405180910390f35b348015610479575f80fd5b5061048261083d565b60405161048f9190611e6e565b60405180910390f35b3480156104a3575f80fd5b506104be60048036038101906104b99190611d3f565b610862565b6040516104cb9190611d97565b60405180910390f35b3480156104df575f80fd5b506104fa60048036038101906104f59190611edc565b610884565b005b348015610507575f80fd5b50610522600480360381019061051d9190611f1a565b6108e4565b005b34801561052f575f80fd5b5061054a60048036038101906105459190611f1a565b610ad7565b6040516105579190611bf4565b60405180910390f35b34801561056b575f80fd5b5061058660048036038101906105819190611e34565b610b59565b005b348015610593575f80fd5b5061059c610bdb565b6040516105a99190611fb3565b60405180910390f35b3480156105bd575f80fd5b506105c6610c00565b6040516105d39190611d97565b60405180910390f35b60155481565b60606040518060400160405280600a81526020017f4d75736b584d616e696100000000000000000000000000000000000000000000815250905090565b5f80610629610c11565b9050610636818585610c18565b600191505092915050565b5f600754905090565b600d5481565b610658610ddb565b60016014806101000a81548160ff021916908315150217905550565b5f8061067e610c11565b905061068b858285610e59565b610696858585610ee4565b60019150509392505050565b5f6009905090565b5f806106b4610c11565b90506106d58185856106c68589610ad7565b6106d09190611ff9565b610c18565b600191505092915050565b601460159054906101000a900460ff1681565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610741610ddb565b61074a5f611287565b565b60085481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600681526020017f584d414e49410000000000000000000000000000000000000000000000000000815250905090565b6107be610ddb565b8060088190555050565b5f806107d2610c11565b90505f6107df8286610ad7565b905083811015610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081b9061209c565b60405180910390fd5b6108318286868403610c18565b60019250505092915050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8061086c610c11565b9050610879818585610ee4565b600191505092915050565b61088c610ddb565b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6108ec610ddb565b8160115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160095f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507fce0fc88f9033980fcfe9e2a525d903cc05d5be428236b7a1aad3e24b4860692e60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610acb9291906120ba565b60405180910390a15050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610b61610ddb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc690612151565b60405180910390fd5b610bd881611287565b50565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60148054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7d906121df565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ceb9061226d565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610dce9190611bf4565b60405180910390a3505050565b610de3610c11565b73ffffffffffffffffffffffffffffffffffffffff16610e01610752565b73ffffffffffffffffffffffffffffffffffffffff1614610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e906122d5565b60405180910390fd5b565b5f610e648484610ad7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ede5781811015610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec79061233d565b60405180910390fd5b610edd8484848403610c18565b5b50505050565b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015610f82575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610fd55760148054906101000a900460ff16610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb906123a5565b60405180910390fd5b5b610fdd610752565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561104457503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561109d575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156110f6575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156111495750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156111ac575f611158836106f3565b905060085482826111699190611ff9565b11156111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190612433565b60405180910390fd5b505b6111b4611348565b156111c2576111c16113e5565b5b5f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061125e575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6112725761126d848484611845565b611274565b815b9050611281848483611963565b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156113b2575060165f9054906101000a900460ff16155b80156113ca5750601460159054906101000a900460ff165b80156113e057506015546113dd306106f3565b10155b905090565b600160165f6101000a81548160ff0219169083151502179055505f600b5490505f6002600d54836015546114199190612451565b61142391906124bf565b61142d91906124bf565b90505f8160155461143e91906124ef565b90505f600267ffffffffffffffff81111561145c5761145b612522565b5b60405190808252806020026020018201604052801561148a5781602001602082028036833780820191505090505b50905030815f815181106114a1576114a061254f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106115115761151061254f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f4790505f848461155c9190611ff9565b905061158a3060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683610c18565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8630426040518663ffffffff1660e01b81526004016115ec95949392919061266c565b5f604051808303815f87803b158015611603575f80fd5b505af1158015611615573d5f803e3d5ffd5b505050505f824761162691906124ef565b90505f60028861163691906124bf565b600d5461164391906124ef565b90505f6002828a856116559190612451565b61165f91906124bf565b61166991906124bf565b90505f82600c548561167b9190612451565b61168591906124bf565b90505f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516116cd906126f1565b5f6040518083038185875af1925050503d805f8114611707576040519150601f19603f3d011682016040523d82523d5f602084013e61170c565b606091505b505090505f90505f8a111561181f5760135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308d5f8060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016117a196959493929190612705565b60606040518083038185885af11580156117bd573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906117e29190612778565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838b6040516118169291906127c8565b60405180910390a15b50505050505050505050505f60165f6101000a81548160ff021916908315150217905550565b5f805f90505f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036118a957600f549150611904565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036119035760105491505b5b5f82111561194c576064600e5461191b9190612451565b82600d548661192a9190612451565b6119349190612451565b61193e91906124bf565b905061194b863083611963565b5b808461195891906124ef565b925050509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c89061285f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a36906128ed565b60405180910390fd5b611a4a838383611bd2565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac59061297b565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bb99190611bf4565b60405180910390a3611bcc848484611bd7565b50505050565b505050565b505050565b5f819050919050565b611bee81611bdc565b82525050565b5f602082019050611c075f830184611be5565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611c44578082015181840152602081019050611c29565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611c6982611c0d565b611c738185611c17565b9350611c83818560208601611c27565b611c8c81611c4f565b840191505092915050565b5f6020820190508181035f830152611caf8184611c5f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611ce482611cbb565b9050919050565b611cf481611cda565b8114611cfe575f80fd5b50565b5f81359050611d0f81611ceb565b92915050565b611d1e81611bdc565b8114611d28575f80fd5b50565b5f81359050611d3981611d15565b92915050565b5f8060408385031215611d5557611d54611cb7565b5b5f611d6285828601611d01565b9250506020611d7385828601611d2b565b9150509250929050565b5f8115159050919050565b611d9181611d7d565b82525050565b5f602082019050611daa5f830184611d88565b92915050565b5f805f60608486031215611dc757611dc6611cb7565b5b5f611dd486828701611d01565b9350506020611de586828701611d01565b9250506040611df686828701611d2b565b9150509250925092565b5f60ff82169050919050565b611e1581611e00565b82525050565b5f602082019050611e2e5f830184611e0c565b92915050565b5f60208284031215611e4957611e48611cb7565b5b5f611e5684828501611d01565b91505092915050565b611e6881611cda565b82525050565b5f602082019050611e815f830184611e5f565b92915050565b5f60208284031215611e9c57611e9b611cb7565b5b5f611ea984828501611d2b565b91505092915050565b611ebb81611d7d565b8114611ec5575f80fd5b50565b5f81359050611ed681611eb2565b92915050565b5f8060408385031215611ef257611ef1611cb7565b5b5f611eff85828601611d01565b9250506020611f1085828601611ec8565b9150509250929050565b5f8060408385031215611f3057611f2f611cb7565b5b5f611f3d85828601611d01565b9250506020611f4e85828601611d01565b9150509250929050565b5f819050919050565b5f611f7b611f76611f7184611cbb565b611f58565b611cbb565b9050919050565b5f611f8c82611f61565b9050919050565b5f611f9d82611f82565b9050919050565b611fad81611f93565b82525050565b5f602082019050611fc65f830184611fa4565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61200382611bdc565b915061200e83611bdc565b925082820190508082111561202657612025611fcc565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612086602583611c17565b91506120918261202c565b604082019050919050565b5f6020820190508181035f8301526120b38161207a565b9050919050565b5f6040820190506120cd5f830185611e5f565b6120da6020830184611e5f565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61213b602683611c17565b9150612146826120e1565b604082019050919050565b5f6020820190508181035f8301526121688161212f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6121c9602483611c17565b91506121d48261216f565b604082019050919050565b5f6020820190508181035f8301526121f6816121bd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612257602283611c17565b9150612262826121fd565b604082019050919050565b5f6020820190508181035f8301526122848161224b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6122bf602083611c17565b91506122ca8261228b565b602082019050919050565b5f6020820190508181035f8301526122ec816122b3565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612327601d83611c17565b9150612332826122f3565b602082019050919050565b5f6020820190508181035f8301526123548161231b565b9050919050565b7f54726164696e67206e6f74206f70656e207965740000000000000000000000005f82015250565b5f61238f601483611c17565b915061239a8261235b565b602082019050919050565b5f6020820190508181035f8301526123bc81612383565b9050919050565b7f596f757220746f6b656e732062616c616e63652063616e206e6f74206265206d5f8201527f6f7265207468616e203225206f6620737570706c790000000000000000000000602082015250565b5f61241d603583611c17565b9150612428826123c3565b604082019050919050565b5f6020820190508181035f83015261244a81612411565b9050919050565b5f61245b82611bdc565b915061246683611bdc565b925082820261247481611bdc565b9150828204841483151761248b5761248a611fcc565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6124c982611bdc565b91506124d483611bdc565b9250826124e4576124e3612492565b5b828204905092915050565b5f6124f982611bdc565b915061250483611bdc565b925082820390508181111561251c5761251b611fcc565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61259f61259a6125958461257c565b611f58565b611bdc565b9050919050565b6125af81612585565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6125e781611cda565b82525050565b5f6125f883836125de565b60208301905092915050565b5f602082019050919050565b5f61261a826125b5565b61262481856125bf565b935061262f836125cf565b805f5b8381101561265f57815161264688826125ed565b975061265183612604565b925050600181019050612632565b5085935050505092915050565b5f60a08201905061267f5f830188611be5565b61268c60208301876125a6565b818103604083015261269e8186612610565b90506126ad6060830185611e5f565b6126ba6080830184611be5565b9695505050505050565b5f81905092915050565b50565b5f6126dc5f836126c4565b91506126e7826126ce565b5f82019050919050565b5f6126fb826126d1565b9150819050919050565b5f60c0820190506127185f830189611e5f565b6127256020830188611be5565b61273260408301876125a6565b61273f60608301866125a6565b61274c6080830185611e5f565b61275960a0830184611be5565b979650505050505050565b5f8151905061277281611d15565b92915050565b5f805f6060848603121561278f5761278e611cb7565b5b5f61279c86828701612764565b93505060206127ad86828701612764565b92505060406127be86828701612764565b9150509250925092565b5f6040820190506127db5f830185611be5565b6127e86020830184611be5565b9392505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612849602583611c17565b9150612854826127ef565b604082019050919050565b5f6020820190508181035f8301526128768161283d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6128d7602383611c17565b91506128e28261287d565b604082019050919050565b5f6020820190508181035f830152612904816128cb565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612965602683611c17565b91506129708261290b565b604082019050919050565b5f6020820190508181035f83015261299281612959565b905091905056fea2646970667358221220857a8e243416ffd7c3b385c9dfe3beb062d298b0e02f500c47927e142ebfcde964736f6c63430008140033

Deployed Bytecode

0x608060405260043610610169575f3560e01c806378109e54116100d0578063a9059cbb11610089578063dd62ed3e11610063578063dd62ed3e14610524578063f2fde38b14610560578063f887ea4014610588578063ffb54a99146105b257610170565b8063a9059cbb14610498578063af9549e0146104d4578063d3f6a157146104fc57610170565b806378109e541461038c5780638da5cb5b146103b657806395d89b41146103e057806399061beb1461040a578063a457c2d714610432578063a8aa1b311461046e57610170565b806323b872dd1161012257806323b872dd1461026e578063313ce567146102aa57806339509351146102d45780636ddd17131461031057806370a082311461033a578063715018a61461037657610170565b80630445b6671461017457806306fdde031461019e578063095ea7b3146101c857806318160ddd146102045780631df4ccfc1461022e5780631eed1ac81461025857610170565b3661017057005b5f80fd5b34801561017f575f80fd5b506101886105dc565b6040516101959190611bf4565b60405180910390f35b3480156101a9575f80fd5b506101b26105e2565b6040516101bf9190611c97565b60405180910390f35b3480156101d3575f80fd5b506101ee60048036038101906101e99190611d3f565b61061f565b6040516101fb9190611d97565b60405180910390f35b34801561020f575f80fd5b50610218610641565b6040516102259190611bf4565b60405180910390f35b348015610239575f80fd5b5061024261064a565b60405161024f9190611bf4565b60405180910390f35b348015610263575f80fd5b5061026c610650565b005b348015610279575f80fd5b50610294600480360381019061028f9190611db0565b610674565b6040516102a19190611d97565b60405180910390f35b3480156102b5575f80fd5b506102be6106a2565b6040516102cb9190611e1b565b60405180910390f35b3480156102df575f80fd5b506102fa60048036038101906102f59190611d3f565b6106aa565b6040516103079190611d97565b60405180910390f35b34801561031b575f80fd5b506103246106e0565b6040516103319190611d97565b60405180910390f35b348015610345575f80fd5b50610360600480360381019061035b9190611e34565b6106f3565b60405161036d9190611bf4565b60405180910390f35b348015610381575f80fd5b5061038a610739565b005b348015610397575f80fd5b506103a061074c565b6040516103ad9190611bf4565b60405180910390f35b3480156103c1575f80fd5b506103ca610752565b6040516103d79190611e6e565b60405180910390f35b3480156103eb575f80fd5b506103f4610779565b6040516104019190611c97565b60405180910390f35b348015610415575f80fd5b50610430600480360381019061042b9190611e87565b6107b6565b005b34801561043d575f80fd5b5061045860048036038101906104539190611d3f565b6107c8565b6040516104659190611d97565b60405180910390f35b348015610479575f80fd5b5061048261083d565b60405161048f9190611e6e565b60405180910390f35b3480156104a3575f80fd5b506104be60048036038101906104b99190611d3f565b610862565b6040516104cb9190611d97565b60405180910390f35b3480156104df575f80fd5b506104fa60048036038101906104f59190611edc565b610884565b005b348015610507575f80fd5b50610522600480360381019061051d9190611f1a565b6108e4565b005b34801561052f575f80fd5b5061054a60048036038101906105459190611f1a565b610ad7565b6040516105579190611bf4565b60405180910390f35b34801561056b575f80fd5b5061058660048036038101906105819190611e34565b610b59565b005b348015610593575f80fd5b5061059c610bdb565b6040516105a99190611fb3565b60405180910390f35b3480156105bd575f80fd5b506105c6610c00565b6040516105d39190611d97565b60405180910390f35b60155481565b60606040518060400160405280600a81526020017f4d75736b584d616e696100000000000000000000000000000000000000000000815250905090565b5f80610629610c11565b9050610636818585610c18565b600191505092915050565b5f600754905090565b600d5481565b610658610ddb565b60016014806101000a81548160ff021916908315150217905550565b5f8061067e610c11565b905061068b858285610e59565b610696858585610ee4565b60019150509392505050565b5f6009905090565b5f806106b4610c11565b90506106d58185856106c68589610ad7565b6106d09190611ff9565b610c18565b600191505092915050565b601460159054906101000a900460ff1681565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610741610ddb565b61074a5f611287565b565b60085481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600681526020017f584d414e49410000000000000000000000000000000000000000000000000000815250905090565b6107be610ddb565b8060088190555050565b5f806107d2610c11565b90505f6107df8286610ad7565b905083811015610824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081b9061209c565b60405180910390fd5b6108318286868403610c18565b60019250505092915050565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8061086c610c11565b9050610879818585610ee4565b600191505092915050565b61088c610ddb565b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6108ec610ddb565b8160115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160095f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507fce0fc88f9033980fcfe9e2a525d903cc05d5be428236b7a1aad3e24b4860692e60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051610acb9291906120ba565b60405180910390a15050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610b61610ddb565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc690612151565b60405180910390fd5b610bd881611287565b50565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60148054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7d906121df565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ceb9061226d565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610dce9190611bf4565b60405180910390a3505050565b610de3610c11565b73ffffffffffffffffffffffffffffffffffffffff16610e01610752565b73ffffffffffffffffffffffffffffffffffffffff1614610e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4e906122d5565b60405180910390fd5b565b5f610e648484610ad7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ede5781811015610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec79061233d565b60405180910390fd5b610edd8484848403610c18565b5b50505050565b60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015610f82575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610fd55760148054906101000a900460ff16610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb906123a5565b60405180910390fd5b5b610fdd610752565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561104457503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561109d575060145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156110f6575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156111495750600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156111ac575f611158836106f3565b905060085482826111699190611ff9565b11156111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190612433565b60405180910390fd5b505b6111b4611348565b156111c2576111c16113e5565b5b5f60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061125e575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6112725761126d848484611845565b611274565b815b9050611281848483611963565b50505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156113b2575060165f9054906101000a900460ff16155b80156113ca5750601460159054906101000a900460ff165b80156113e057506015546113dd306106f3565b10155b905090565b600160165f6101000a81548160ff0219169083151502179055505f600b5490505f6002600d54836015546114199190612451565b61142391906124bf565b61142d91906124bf565b90505f8160155461143e91906124ef565b90505f600267ffffffffffffffff81111561145c5761145b612522565b5b60405190808252806020026020018201604052801561148a5781602001602082028036833780820191505090505b50905030815f815181106114a1576114a061254f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106115115761151061254f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f4790505f848461155c9190611ff9565b905061158a3060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683610c18565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947855f8630426040518663ffffffff1660e01b81526004016115ec95949392919061266c565b5f604051808303815f87803b158015611603575f80fd5b505af1158015611615573d5f803e3d5ffd5b505050505f824761162691906124ef565b90505f60028861163691906124bf565b600d5461164391906124ef565b90505f6002828a856116559190612451565b61165f91906124bf565b61166991906124bf565b90505f82600c548561167b9190612451565b61168591906124bf565b90505f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516116cd906126f1565b5f6040518083038185875af1925050503d805f8114611707576040519150601f19603f3d011682016040523d82523d5f602084013e61170c565b606091505b505090505f90505f8a111561181f5760135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308d5f8060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016117a196959493929190612705565b60606040518083038185885af11580156117bd573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906117e29190612778565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838b6040516118169291906127c8565b60405180910390a15b50505050505050505050505f60165f6101000a81548160ff021916908315150217905550565b5f805f90505f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036118a957600f549150611904565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16036119035760105491505b5b5f82111561194c576064600e5461191b9190612451565b82600d548661192a9190612451565b6119349190612451565b61193e91906124bf565b905061194b863083611963565b5b808461195891906124ef565b925050509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c89061285f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a36906128ed565b60405180910390fd5b611a4a838383611bd2565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac59061297b565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bb99190611bf4565b60405180910390a3611bcc848484611bd7565b50505050565b505050565b505050565b5f819050919050565b611bee81611bdc565b82525050565b5f602082019050611c075f830184611be5565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611c44578082015181840152602081019050611c29565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611c6982611c0d565b611c738185611c17565b9350611c83818560208601611c27565b611c8c81611c4f565b840191505092915050565b5f6020820190508181035f830152611caf8184611c5f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611ce482611cbb565b9050919050565b611cf481611cda565b8114611cfe575f80fd5b50565b5f81359050611d0f81611ceb565b92915050565b611d1e81611bdc565b8114611d28575f80fd5b50565b5f81359050611d3981611d15565b92915050565b5f8060408385031215611d5557611d54611cb7565b5b5f611d6285828601611d01565b9250506020611d7385828601611d2b565b9150509250929050565b5f8115159050919050565b611d9181611d7d565b82525050565b5f602082019050611daa5f830184611d88565b92915050565b5f805f60608486031215611dc757611dc6611cb7565b5b5f611dd486828701611d01565b9350506020611de586828701611d01565b9250506040611df686828701611d2b565b9150509250925092565b5f60ff82169050919050565b611e1581611e00565b82525050565b5f602082019050611e2e5f830184611e0c565b92915050565b5f60208284031215611e4957611e48611cb7565b5b5f611e5684828501611d01565b91505092915050565b611e6881611cda565b82525050565b5f602082019050611e815f830184611e5f565b92915050565b5f60208284031215611e9c57611e9b611cb7565b5b5f611ea984828501611d2b565b91505092915050565b611ebb81611d7d565b8114611ec5575f80fd5b50565b5f81359050611ed681611eb2565b92915050565b5f8060408385031215611ef257611ef1611cb7565b5b5f611eff85828601611d01565b9250506020611f1085828601611ec8565b9150509250929050565b5f8060408385031215611f3057611f2f611cb7565b5b5f611f3d85828601611d01565b9250506020611f4e85828601611d01565b9150509250929050565b5f819050919050565b5f611f7b611f76611f7184611cbb565b611f58565b611cbb565b9050919050565b5f611f8c82611f61565b9050919050565b5f611f9d82611f82565b9050919050565b611fad81611f93565b82525050565b5f602082019050611fc65f830184611fa4565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61200382611bdc565b915061200e83611bdc565b925082820190508082111561202657612025611fcc565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612086602583611c17565b91506120918261202c565b604082019050919050565b5f6020820190508181035f8301526120b38161207a565b9050919050565b5f6040820190506120cd5f830185611e5f565b6120da6020830184611e5f565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61213b602683611c17565b9150612146826120e1565b604082019050919050565b5f6020820190508181035f8301526121688161212f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6121c9602483611c17565b91506121d48261216f565b604082019050919050565b5f6020820190508181035f8301526121f6816121bd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612257602283611c17565b9150612262826121fd565b604082019050919050565b5f6020820190508181035f8301526122848161224b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6122bf602083611c17565b91506122ca8261228b565b602082019050919050565b5f6020820190508181035f8301526122ec816122b3565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612327601d83611c17565b9150612332826122f3565b602082019050919050565b5f6020820190508181035f8301526123548161231b565b9050919050565b7f54726164696e67206e6f74206f70656e207965740000000000000000000000005f82015250565b5f61238f601483611c17565b915061239a8261235b565b602082019050919050565b5f6020820190508181035f8301526123bc81612383565b9050919050565b7f596f757220746f6b656e732062616c616e63652063616e206e6f74206265206d5f8201527f6f7265207468616e203225206f6620737570706c790000000000000000000000602082015250565b5f61241d603583611c17565b9150612428826123c3565b604082019050919050565b5f6020820190508181035f83015261244a81612411565b9050919050565b5f61245b82611bdc565b915061246683611bdc565b925082820261247481611bdc565b9150828204841483151761248b5761248a611fcc565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6124c982611bdc565b91506124d483611bdc565b9250826124e4576124e3612492565b5b828204905092915050565b5f6124f982611bdc565b915061250483611bdc565b925082820390508181111561251c5761251b611fcc565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61259f61259a6125958461257c565b611f58565b611bdc565b9050919050565b6125af81612585565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6125e781611cda565b82525050565b5f6125f883836125de565b60208301905092915050565b5f602082019050919050565b5f61261a826125b5565b61262481856125bf565b935061262f836125cf565b805f5b8381101561265f57815161264688826125ed565b975061265183612604565b925050600181019050612632565b5085935050505092915050565b5f60a08201905061267f5f830188611be5565b61268c60208301876125a6565b818103604083015261269e8186612610565b90506126ad6060830185611e5f565b6126ba6080830184611be5565b9695505050505050565b5f81905092915050565b50565b5f6126dc5f836126c4565b91506126e7826126ce565b5f82019050919050565b5f6126fb826126d1565b9150819050919050565b5f60c0820190506127185f830189611e5f565b6127256020830188611be5565b61273260408301876125a6565b61273f60608301866125a6565b61274c6080830185611e5f565b61275960a0830184611be5565b979650505050505050565b5f8151905061277281611d15565b92915050565b5f805f6060848603121561278f5761278e611cb7565b5b5f61279c86828701612764565b93505060206127ad86828701612764565b92505060406127be86828701612764565b9150509250925092565b5f6040820190506127db5f830185611be5565b6127e86020830184611be5565b9392505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612849602583611c17565b9150612854826127ef565b604082019050919050565b5f6020820190508181035f8301526128768161283d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6128d7602383611c17565b91506128e28261287d565b604082019050919050565b5f6020820190508181035f830152612904816128cb565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612965602683611c17565b91506129708261290b565b604082019050919050565b5f6020820190508181035f83015261299281612959565b905091905056fea2646970667358221220857a8e243416ffd7c3b385c9dfe3beb062d298b0e02f500c47927e142ebfcde964736f6c63430008140033

Deployed Bytecode Sourcemap

26202:6177:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27248:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28410:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17501:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28122:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26855:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32294:82;;;;;;;;;;;;;:::i;:::-;;18282:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28222:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18952:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27211:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16441:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8596:103;;;;;;;;;;;;;:::i;:::-;;26607:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7955:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28314:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32178:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19693:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27145:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16774:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31616:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31758:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17030:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8854:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27106:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27173:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27248:47;;;;:::o;28410:86::-;28464:13;28488:5;;;;;;;;;;;;;;;;;28481:12;;28410:86;:::o;17501:201::-;17584:4;17601:13;17617:12;:10;:12::i;:::-;17601:28;;17640:32;17649:5;17656:7;17665:6;17640:8;:32::i;:::-;17690:4;17683:11;;;17501:201;;;;:::o;28122:94::-;28183:7;28201:12;;28194:19;;28122:94;:::o;26855:53::-;;;;:::o;32294:82::-;7841:13;:11;:13::i;:::-;32364:4:::1;32350:11;::::0;:18:::1;;;;;;;;;;;;;;;;;;32294:82::o:0;18282:261::-;18379:4;18396:15;18414:12;:10;:12::i;:::-;18396:30;;18437:38;18453:4;18459:7;18468:6;18437:15;:38::i;:::-;18486:27;18496:4;18502:2;18506:6;18486:9;:27::i;:::-;18531:4;18524:11;;;18282:261;;;;;:::o;28222:86::-;28280:5;26385:1;28289:16;;28222:86;:::o;18952:238::-;19040:4;19057:13;19073:12;:10;:12::i;:::-;19057:28;;19096:64;19105:5;19112:7;19149:10;19121:25;19131:5;19138:7;19121:9;:25::i;:::-;:38;;;;:::i;:::-;19096:8;:64::i;:::-;19178:4;19171:11;;;18952:238;;;;:::o;27211:30::-;;;;;;;;;;;;;:::o;16441:127::-;16515:7;16542:9;:18;16552:7;16542:18;;;;;;;;;;;;;;;;16535:25;;16441:127;;;:::o;8596:103::-;7841:13;:11;:13::i;:::-;8661:30:::1;8688:1;8661:18;:30::i;:::-;8596:103::o:0;26607:57::-;;;;:::o;7955:87::-;8001:7;8028:6;;;;;;;;;;;8021:13;;7955:87;:::o;28314:90::-;28370:13;28394:7;;;;;;;;;;;;;;;;;28387:14;;28314:90;:::o;32178:108::-;7841:13;:11;:13::i;:::-;32272:6:::1;32254:15;:24;;;;32178:108:::0;:::o;19693:436::-;19786:4;19803:13;19819:12;:10;:12::i;:::-;19803:28;;19842:24;19869:25;19879:5;19886:7;19869:9;:25::i;:::-;19842:52;;19933:15;19913:16;:35;;19905:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20026:60;20035:5;20042:7;20070:15;20051:16;:34;20026:8;:60::i;:::-;20117:4;20110:11;;;;19693:436;;;;:::o;27145:19::-;;;;;;;;;;;;;:::o;16774:193::-;16853:4;16870:13;16886:12;:10;:12::i;:::-;16870:28;;16909;16919:5;16926:2;16930:6;16909:9;:28::i;:::-;16955:4;16948:11;;;16774:193;;;;:::o;31616:134::-;7841:13;:11;:13::i;:::-;31734:8:::1;31705:17;:26;31723:7;31705:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;31616:134:::0;;:::o;31758:412::-;7841:13;:11;:13::i;:::-;31895:22:::1;31871:21;;:46;;;;;;;;;;;;;;;;;;31951:21;31928:20;;:44;;;;;;;;;;;;;;;;;;32025:4;31983:17;:39;32001:20;;;;;;;;;;;31983:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32083:4;32040:17;:40;32058:21;;;;;;;;;;;32040:40;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;32105:57;32118:21;;;;;;;;;;;32141:20;;;;;;;;;;;32105:57;;;;;;;:::i;:::-;;;;;;;;31758:412:::0;;:::o;17030:151::-;17119:7;17146:11;:18;17158:5;17146:18;;;;;;;;;;;;;;;:27;17165:7;17146:27;;;;;;;;;;;;;;;;17139:34;;17030:151;;;;:::o;8854:201::-;7841:13;:11;:13::i;:::-;8963:1:::1;8943:22;;:8;:22;;::::0;8935:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;9019:28;9038:8;9019:18;:28::i;:::-;8854:201:::0;:::o;27106:32::-;;;;;;;;;;;;;:::o;27173:31::-;;;;;;;;;;;;:::o;6506:98::-;6559:7;6586:10;6579:17;;6506:98;:::o;23686:346::-;23805:1;23788:19;;:5;:19;;;23780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23886:1;23867:21;;:7;:21;;;23859:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23970:6;23940:11;:18;23952:5;23940:18;;;;;;;;;;;;;;;:27;23959:7;23940:27;;;;;;;;;;;;;;;:36;;;;24008:7;23992:32;;24001:5;23992:32;;;24017:6;23992:32;;;;;;:::i;:::-;;;;;;;;23686:346;;;:::o;8120:132::-;8195:12;:10;:12::i;:::-;8184:23;;:7;:5;:7::i;:::-;:23;;;8176:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8120:132::o;24323:419::-;24424:24;24451:25;24461:5;24468:7;24451:9;:25::i;:::-;24424:52;;24511:17;24491:16;:37;24487:248;;24573:6;24553:16;:26;;24545:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24657:51;24666:5;24673:7;24701:6;24682:16;:25;24657:8;:51::i;:::-;24487:248;24413:329;24323:419;;;:::o;28504:747::-;28598:17;:23;28616:4;28598:23;;;;;;;;;;;;;;;;;;;;;;;;;28597:24;:50;;;;;28626:17;:21;28644:2;28626:21;;;;;;;;;;;;;;;;;;;;;;;;;28625:22;28597:50;28594:126;;;28672:11;;;;;;;;;;28664:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;28594:126;28740:7;:5;:7::i;:::-;28734:13;;:2;:13;;;;:36;;;;;28765:4;28751:19;;:2;:19;;;;28734:36;:50;;;;;28780:4;;;;;;;;;;;28774:10;;:2;:10;;;;28734:50;:80;;;;;28794:20;;;;;;;;;;;28788:26;;:2;:26;;;;28734:80;:107;;;;;28819:18;:22;28838:2;28819:22;;;;;;;;;;;;;;;;;;;;;;;;;28818:23;28734:107;28730:301;;;28858:21;28882:13;28892:2;28882:9;:13::i;:::-;28858:37;;28946:15;;28935:6;28919:13;:22;;;;:::i;:::-;28918:43;;28910:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;28843:188;28730:301;29044:12;:10;:12::i;:::-;29041:29;;;29059:8;:6;:8::i;:::-;29041:29;29080:22;29106:17;:23;29124:4;29106:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;29133:17;:21;29151:2;29133:21;;;;;;;;;;;;;;;;;;;;;;;;;29106:48;29105:86;;29167:24;29174:4;29180:2;29184:6;29167;:24::i;:::-;29105:86;;;29158:6;29105:86;29080:111;;29202:41;29218:4;29224:2;29228:14;29202:15;:41::i;:::-;28583:668;28504:747;;;:::o;9215:191::-;9289:16;9308:6;;;;;;;;;;;9289:25;;9334:8;9325:6;;:17;;;;;;;;;;;;;;;;;;9389:8;9358:40;;9379:8;9358:40;;;;;;;;;;;;9278:128;9215:191;:::o;29818:193::-;29863:4;29901;;;;;;;;;;;29887:18;;:10;:18;;;;:38;;;;;29919:6;;;;;;;;;;;29918:7;29887:38;:62;;;;;29938:11;;;;;;;;;;;29887:62;:116;;;;;29990:13;;29962:24;29980:4;29962:9;:24::i;:::-;:41;;29887:116;29880:123;;29818:193;:::o;30019:1589::-;27351:4;27342:6;;:13;;;;;;;;;;;;;;;;;;30066:27:::1;30096:12;;30066:42;;30119:23;30196:1;30185:8;;30162:19;30146:13;;:35;;;;:::i;:::-;30145:48;;;;:::i;:::-;:52;;;;:::i;:::-;30119:78;;30208:20;30247:15;30231:13;;:31;;;;:::i;:::-;30208:54;;30275:21;30313:1;30299:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30275:40;;30344:4;30326;30331:1;30326:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;30370:4;;;;;;;;;;;30360;30365:1;30360:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;30387:21;30411;30387:45;;30443:22;30483:15;30468:12;:30;;;;:::i;:::-;30443:55;;30511:56;30528:4;30543:6;;;;;;;;;;;30552:14;30511:8;:56::i;:::-;30578:6;;;;;;;;;;;:57;;;30650:12;30677:1;30693:4;30720;30740:15;30578:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30779:17;30823:13;30799:21;:37;;;;:::i;:::-;30779:57;;30849:19;30905:1;30883:19;:23;;;;:::i;:::-;30871:8;;:36;;;;:::i;:::-;30849:58;;30928:26;31007:1;30993:11;30970:19;30958:9;:31;;;;:::i;:::-;30957:47;;;;:::i;:::-;:51;;;;:::i;:::-;30928:80;;31019:26;31077:11;31061:12;;31049:9;:24;;;;:::i;:::-;31048:40;;;;:::i;:::-;31019:69;;31102:15;31130:20;;;;;;;;;;;31122:34;;31164:18;31122:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31101:86;;;31221:5;31208:18;;31260:1;31242:15;:19;31239:362;;;31277:6;;;;;;;;;;;:22;;;31307:18;31353:4;31377:15;31411:1;31431::::0;31451:21:::1;;;;;;;;;;;31491:15;31277:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31541:48;31553:18;31573:15;31541:48;;;;;;;:::i;:::-;;;;;;;;31239:362;30055:1553;;;;;;;;;;;27369:5:::0;27360:6;;:14;;;;;;;;;;;;;;;;;;30019:1589::o;29259:551::-;29344:7;29364:15;29382:1;29364:19;;29394:17;29442:4;;;;;;;;;;;29429:17;;:9;:17;;;29426:142;;29473:11;;29463:21;;29426:142;;;29515:4;;;;;;;;;;;29505:14;;:6;:14;;;29502:66;;29546:10;;29536:20;;29502:66;29426:142;29601:1;29591:7;:11;29588:169;;;29676:3;29665:8;;:14;;;;:::i;:::-;29653:7;29642:8;;29633:6;:17;;;;:::i;:::-;:27;;;;:::i;:::-;29632:48;;;;:::i;:::-;29619:62;;29696:49;29712:6;29728:4;29735:9;29696:15;:49::i;:::-;29588:169;29793:9;29784:6;:18;;;;:::i;:::-;29777:25;;;;29259:551;;;;;:::o;20599:806::-;20712:1;20696:18;;:4;:18;;;20688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20789:1;20775:16;;:2;:16;;;20767:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20844:38;20865:4;20871:2;20875:6;20844:20;:38::i;:::-;20895:19;20917:9;:15;20927:4;20917:15;;;;;;;;;;;;;;;;20895:37;;20966:6;20951:11;:21;;20943:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21083:6;21069:11;:20;21051:9;:15;21061:4;21051:15;;;;;;;;;;;;;;;:38;;;;21286:6;21269:9;:13;21279:2;21269:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;21336:2;21321:26;;21330:4;21321:26;;;21340:6;21321:26;;;;;;:::i;:::-;;;;;;;;21360:37;21380:4;21386:2;21390:6;21360:19;:37::i;:::-;20677:728;20599:806;;;:::o;25342:91::-;;;;:::o;26037:90::-;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:118::-;5275:24;5293:5;5275:24;:::i;:::-;5270:3;5263:37;5188:118;;:::o;5312:222::-;5405:4;5443:2;5432:9;5428:18;5420:26;;5456:71;5524:1;5513:9;5509:17;5500:6;5456:71;:::i;:::-;5312:222;;;;:::o;5540:329::-;5599:6;5648:2;5636:9;5627:7;5623:23;5619:32;5616:119;;;5654:79;;:::i;:::-;5616:119;5774:1;5799:53;5844:7;5835:6;5824:9;5820:22;5799:53;:::i;:::-;5789:63;;5745:117;5540:329;;;;:::o;5875:116::-;5945:21;5960:5;5945:21;:::i;:::-;5938:5;5935:32;5925:60;;5981:1;5978;5971:12;5925:60;5875:116;:::o;5997:133::-;6040:5;6078:6;6065:20;6056:29;;6094:30;6118:5;6094:30;:::i;:::-;5997:133;;;;:::o;6136:468::-;6201:6;6209;6258:2;6246:9;6237:7;6233:23;6229:32;6226:119;;;6264:79;;:::i;:::-;6226:119;6384:1;6409:53;6454:7;6445:6;6434:9;6430:22;6409:53;:::i;:::-;6399:63;;6355:117;6511:2;6537:50;6579:7;6570:6;6559:9;6555:22;6537:50;:::i;:::-;6527:60;;6482:115;6136:468;;;;;:::o;6610:474::-;6678:6;6686;6735:2;6723:9;6714:7;6710:23;6706:32;6703:119;;;6741:79;;:::i;:::-;6703:119;6861:1;6886:53;6931:7;6922:6;6911:9;6907:22;6886:53;:::i;:::-;6876:63;;6832:117;6988:2;7014:53;7059:7;7050:6;7039:9;7035:22;7014:53;:::i;:::-;7004:63;;6959:118;6610:474;;;;;:::o;7090:60::-;7118:3;7139:5;7132:12;;7090:60;;;:::o;7156:142::-;7206:9;7239:53;7257:34;7266:24;7284:5;7266:24;:::i;:::-;7257:34;:::i;:::-;7239:53;:::i;:::-;7226:66;;7156:142;;;:::o;7304:126::-;7354:9;7387:37;7418:5;7387:37;:::i;:::-;7374:50;;7304:126;;;:::o;7436:152::-;7512:9;7545:37;7576:5;7545:37;:::i;:::-;7532:50;;7436:152;;;:::o;7594:183::-;7707:63;7764:5;7707:63;:::i;:::-;7702:3;7695:76;7594:183;;:::o;7783:274::-;7902:4;7940:2;7929:9;7925:18;7917:26;;7953:97;8047:1;8036:9;8032:17;8023:6;7953:97;:::i;:::-;7783:274;;;;:::o;8063:180::-;8111:77;8108:1;8101:88;8208:4;8205:1;8198:15;8232:4;8229:1;8222:15;8249:191;8289:3;8308:20;8326:1;8308:20;:::i;:::-;8303:25;;8342:20;8360:1;8342:20;:::i;:::-;8337:25;;8385:1;8382;8378:9;8371:16;;8406:3;8403:1;8400:10;8397:36;;;8413:18;;:::i;:::-;8397:36;8249:191;;;;:::o;8446:224::-;8586:34;8582:1;8574:6;8570:14;8563:58;8655:7;8650:2;8642:6;8638:15;8631:32;8446:224;:::o;8676:366::-;8818:3;8839:67;8903:2;8898:3;8839:67;:::i;:::-;8832:74;;8915:93;9004:3;8915:93;:::i;:::-;9033:2;9028:3;9024:12;9017:19;;8676:366;;;:::o;9048:419::-;9214:4;9252:2;9241:9;9237:18;9229:26;;9301:9;9295:4;9291:20;9287:1;9276:9;9272:17;9265:47;9329:131;9455:4;9329:131;:::i;:::-;9321:139;;9048:419;;;:::o;9473:332::-;9594:4;9632:2;9621:9;9617:18;9609:26;;9645:71;9713:1;9702:9;9698:17;9689:6;9645:71;:::i;:::-;9726:72;9794:2;9783:9;9779:18;9770:6;9726:72;:::i;:::-;9473:332;;;;;:::o;9811:225::-;9951:34;9947:1;9939:6;9935:14;9928:58;10020:8;10015:2;10007:6;10003:15;9996:33;9811:225;:::o;10042:366::-;10184:3;10205:67;10269:2;10264:3;10205:67;:::i;:::-;10198:74;;10281:93;10370:3;10281:93;:::i;:::-;10399:2;10394:3;10390:12;10383:19;;10042:366;;;:::o;10414:419::-;10580:4;10618:2;10607:9;10603:18;10595:26;;10667:9;10661:4;10657:20;10653:1;10642:9;10638:17;10631:47;10695:131;10821:4;10695:131;:::i;:::-;10687:139;;10414:419;;;:::o;10839:223::-;10979:34;10975:1;10967:6;10963:14;10956:58;11048:6;11043:2;11035:6;11031:15;11024:31;10839:223;:::o;11068:366::-;11210:3;11231:67;11295:2;11290:3;11231:67;:::i;:::-;11224:74;;11307:93;11396:3;11307:93;:::i;:::-;11425:2;11420:3;11416:12;11409:19;;11068:366;;;:::o;11440:419::-;11606:4;11644:2;11633:9;11629:18;11621:26;;11693:9;11687:4;11683:20;11679:1;11668:9;11664:17;11657:47;11721:131;11847:4;11721:131;:::i;:::-;11713:139;;11440:419;;;:::o;11865:221::-;12005:34;12001:1;11993:6;11989:14;11982:58;12074:4;12069:2;12061:6;12057:15;12050:29;11865:221;:::o;12092:366::-;12234:3;12255:67;12319:2;12314:3;12255:67;:::i;:::-;12248:74;;12331:93;12420:3;12331:93;:::i;:::-;12449:2;12444:3;12440:12;12433:19;;12092:366;;;:::o;12464:419::-;12630:4;12668:2;12657:9;12653:18;12645:26;;12717:9;12711:4;12707:20;12703:1;12692:9;12688:17;12681:47;12745:131;12871:4;12745:131;:::i;:::-;12737:139;;12464:419;;;:::o;12889:182::-;13029:34;13025:1;13017:6;13013:14;13006:58;12889:182;:::o;13077:366::-;13219:3;13240:67;13304:2;13299:3;13240:67;:::i;:::-;13233:74;;13316:93;13405:3;13316:93;:::i;:::-;13434:2;13429:3;13425:12;13418:19;;13077:366;;;:::o;13449:419::-;13615:4;13653:2;13642:9;13638:18;13630:26;;13702:9;13696:4;13692:20;13688:1;13677:9;13673:17;13666:47;13730:131;13856:4;13730:131;:::i;:::-;13722:139;;13449:419;;;:::o;13874:179::-;14014:31;14010:1;14002:6;13998:14;13991:55;13874:179;:::o;14059:366::-;14201:3;14222:67;14286:2;14281:3;14222:67;:::i;:::-;14215:74;;14298:93;14387:3;14298:93;:::i;:::-;14416:2;14411:3;14407:12;14400:19;;14059:366;;;:::o;14431:419::-;14597:4;14635:2;14624:9;14620:18;14612:26;;14684:9;14678:4;14674:20;14670:1;14659:9;14655:17;14648:47;14712:131;14838:4;14712:131;:::i;:::-;14704:139;;14431:419;;;:::o;14856:170::-;14996:22;14992:1;14984:6;14980:14;14973:46;14856:170;:::o;15032:366::-;15174:3;15195:67;15259:2;15254:3;15195:67;:::i;:::-;15188:74;;15271:93;15360:3;15271:93;:::i;:::-;15389:2;15384:3;15380:12;15373:19;;15032:366;;;:::o;15404:419::-;15570:4;15608:2;15597:9;15593:18;15585:26;;15657:9;15651:4;15647:20;15643:1;15632:9;15628:17;15621:47;15685:131;15811:4;15685:131;:::i;:::-;15677:139;;15404:419;;;:::o;15829:240::-;15969:34;15965:1;15957:6;15953:14;15946:58;16038:23;16033:2;16025:6;16021:15;16014:48;15829:240;:::o;16075:366::-;16217:3;16238:67;16302:2;16297:3;16238:67;:::i;:::-;16231:74;;16314:93;16403:3;16314:93;:::i;:::-;16432:2;16427:3;16423:12;16416:19;;16075:366;;;:::o;16447:419::-;16613:4;16651:2;16640:9;16636:18;16628:26;;16700:9;16694:4;16690:20;16686:1;16675:9;16671:17;16664:47;16728:131;16854:4;16728:131;:::i;:::-;16720:139;;16447:419;;;:::o;16872:410::-;16912:7;16935:20;16953:1;16935:20;:::i;:::-;16930:25;;16969:20;16987:1;16969:20;:::i;:::-;16964:25;;17024:1;17021;17017:9;17046:30;17064:11;17046:30;:::i;:::-;17035:41;;17225:1;17216:7;17212:15;17209:1;17206:22;17186:1;17179:9;17159:83;17136:139;;17255:18;;:::i;:::-;17136:139;16920:362;16872:410;;;;:::o;17288:180::-;17336:77;17333:1;17326:88;17433:4;17430:1;17423:15;17457:4;17454:1;17447:15;17474:185;17514:1;17531:20;17549:1;17531:20;:::i;:::-;17526:25;;17565:20;17583:1;17565:20;:::i;:::-;17560:25;;17604:1;17594:35;;17609:18;;:::i;:::-;17594:35;17651:1;17648;17644:9;17639:14;;17474:185;;;;:::o;17665:194::-;17705:4;17725:20;17743:1;17725:20;:::i;:::-;17720:25;;17759:20;17777:1;17759:20;:::i;:::-;17754:25;;17803:1;17800;17796:9;17788:17;;17827:1;17821:4;17818:11;17815:37;;;17832:18;;:::i;:::-;17815:37;17665:194;;;;:::o;17865:180::-;17913:77;17910:1;17903:88;18010:4;18007:1;18000:15;18034:4;18031:1;18024:15;18051:180;18099:77;18096:1;18089:88;18196:4;18193:1;18186:15;18220:4;18217:1;18210:15;18237:85;18282:7;18311:5;18300:16;;18237:85;;;:::o;18328:158::-;18386:9;18419:61;18437:42;18446:32;18472:5;18446:32;:::i;:::-;18437:42;:::i;:::-;18419:61;:::i;:::-;18406:74;;18328:158;;;:::o;18492:147::-;18587:45;18626:5;18587:45;:::i;:::-;18582:3;18575:58;18492:147;;:::o;18645:114::-;18712:6;18746:5;18740:12;18730:22;;18645:114;;;:::o;18765:184::-;18864:11;18898:6;18893:3;18886:19;18938:4;18933:3;18929:14;18914:29;;18765:184;;;;:::o;18955:132::-;19022:4;19045:3;19037:11;;19075:4;19070:3;19066:14;19058:22;;18955:132;;;:::o;19093:108::-;19170:24;19188:5;19170:24;:::i;:::-;19165:3;19158:37;19093:108;;:::o;19207:179::-;19276:10;19297:46;19339:3;19331:6;19297:46;:::i;:::-;19375:4;19370:3;19366:14;19352:28;;19207:179;;;;:::o;19392:113::-;19462:4;19494;19489:3;19485:14;19477:22;;19392:113;;;:::o;19541:732::-;19660:3;19689:54;19737:5;19689:54;:::i;:::-;19759:86;19838:6;19833:3;19759:86;:::i;:::-;19752:93;;19869:56;19919:5;19869:56;:::i;:::-;19948:7;19979:1;19964:284;19989:6;19986:1;19983:13;19964:284;;;20065:6;20059:13;20092:63;20151:3;20136:13;20092:63;:::i;:::-;20085:70;;20178:60;20231:6;20178:60;:::i;:::-;20168:70;;20024:224;20011:1;20008;20004:9;19999:14;;19964:284;;;19968:14;20264:3;20257:10;;19665:608;;;19541:732;;;;:::o;20279:831::-;20542:4;20580:3;20569:9;20565:19;20557:27;;20594:71;20662:1;20651:9;20647:17;20638:6;20594:71;:::i;:::-;20675:80;20751:2;20740:9;20736:18;20727:6;20675:80;:::i;:::-;20802:9;20796:4;20792:20;20787:2;20776:9;20772:18;20765:48;20830:108;20933:4;20924:6;20830:108;:::i;:::-;20822:116;;20948:72;21016:2;21005:9;21001:18;20992:6;20948:72;:::i;:::-;21030:73;21098:3;21087:9;21083:19;21074:6;21030:73;:::i;:::-;20279:831;;;;;;;;:::o;21116:147::-;21217:11;21254:3;21239:18;;21116:147;;;;:::o;21269:114::-;;:::o;21389:398::-;21548:3;21569:83;21650:1;21645:3;21569:83;:::i;:::-;21562:90;;21661:93;21750:3;21661:93;:::i;:::-;21779:1;21774:3;21770:11;21763:18;;21389:398;;;:::o;21793:379::-;21977:3;21999:147;22142:3;21999:147;:::i;:::-;21992:154;;22163:3;22156:10;;21793:379;;;:::o;22178:807::-;22427:4;22465:3;22454:9;22450:19;22442:27;;22479:71;22547:1;22536:9;22532:17;22523:6;22479:71;:::i;:::-;22560:72;22628:2;22617:9;22613:18;22604:6;22560:72;:::i;:::-;22642:80;22718:2;22707:9;22703:18;22694:6;22642:80;:::i;:::-;22732;22808:2;22797:9;22793:18;22784:6;22732:80;:::i;:::-;22822:73;22890:3;22879:9;22875:19;22866:6;22822:73;:::i;:::-;22905;22973:3;22962:9;22958:19;22949:6;22905:73;:::i;:::-;22178:807;;;;;;;;;:::o;22991:143::-;23048:5;23079:6;23073:13;23064:22;;23095:33;23122:5;23095:33;:::i;:::-;22991:143;;;;:::o;23140:663::-;23228:6;23236;23244;23293:2;23281:9;23272:7;23268:23;23264:32;23261:119;;;23299:79;;:::i;:::-;23261:119;23419:1;23444:64;23500:7;23491:6;23480:9;23476:22;23444:64;:::i;:::-;23434:74;;23390:128;23557:2;23583:64;23639:7;23630:6;23619:9;23615:22;23583:64;:::i;:::-;23573:74;;23528:129;23696:2;23722:64;23778:7;23769:6;23758:9;23754:22;23722:64;:::i;:::-;23712:74;;23667:129;23140:663;;;;;:::o;23809:332::-;23930:4;23968:2;23957:9;23953:18;23945:26;;23981:71;24049:1;24038:9;24034:17;24025:6;23981:71;:::i;:::-;24062:72;24130:2;24119:9;24115:18;24106:6;24062:72;:::i;:::-;23809:332;;;;;:::o;24147:224::-;24287:34;24283:1;24275:6;24271:14;24264:58;24356:7;24351:2;24343:6;24339:15;24332:32;24147:224;:::o;24377:366::-;24519:3;24540:67;24604:2;24599:3;24540:67;:::i;:::-;24533:74;;24616:93;24705:3;24616:93;:::i;:::-;24734:2;24729:3;24725:12;24718:19;;24377:366;;;:::o;24749:419::-;24915:4;24953:2;24942:9;24938:18;24930:26;;25002:9;24996:4;24992:20;24988:1;24977:9;24973:17;24966:47;25030:131;25156:4;25030:131;:::i;:::-;25022:139;;24749:419;;;:::o;25174:222::-;25314:34;25310:1;25302:6;25298:14;25291:58;25383:5;25378:2;25370:6;25366:15;25359:30;25174:222;:::o;25402:366::-;25544:3;25565:67;25629:2;25624:3;25565:67;:::i;:::-;25558:74;;25641:93;25730:3;25641:93;:::i;:::-;25759:2;25754:3;25750:12;25743:19;;25402:366;;;:::o;25774:419::-;25940:4;25978:2;25967:9;25963:18;25955:26;;26027:9;26021:4;26017:20;26013:1;26002:9;25998:17;25991:47;26055:131;26181:4;26055:131;:::i;:::-;26047:139;;25774:419;;;:::o;26199:225::-;26339:34;26335:1;26327:6;26323:14;26316:58;26408:8;26403:2;26395:6;26391:15;26384:33;26199:225;:::o;26430:366::-;26572:3;26593:67;26657:2;26652:3;26593:67;:::i;:::-;26586:74;;26669:93;26758:3;26669:93;:::i;:::-;26787:2;26782:3;26778:12;26771:19;;26430:366;;;:::o;26802:419::-;26968:4;27006:2;26995:9;26991:18;26983:26;;27055:9;27049:4;27045:20;27041:1;27030:9;27026:17;27019:47;27083:131;27209:4;27083:131;:::i;:::-;27075:139;;26802:419;;;:::o

Swarm Source

ipfs://857a8e243416ffd7c3b385c9dfe3beb062d298b0e02f500c47927e142ebfcde9
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.