ETH Price: $3,280.13 (+1.00%)
Gas: 1 Gwei

Token

Frogcoin (FROG)
 

Overview

Max Total Supply

100,000,000 FROG

Holders

110

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
mooneagle.eth
Balance
1,112,994.767267407822026114 FROG

Value
$0.00
0xd43625d0299ed239ea1f27cc739656162a305056
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:
Frog

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-05
*/

/*
 * SPDX-License-Identifier: MIT
 * https://twitter.com/FrogcoinOnEth
 * https://t.me/FROG_COIN_ETH
 * https://frogcoineth.vip/
*/

pragma solidity 0.8.19;

library SafeMath {

    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(
        address recipient,
        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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the upd allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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 upd allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][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 upd 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

contract Frog is Context, ERC20, Ownable {
    using SafeMath for uint256;
    mapping(address => bool) private _isExcludedFromFee;
    address payable private _marketingWallet;
    uint256 firstBlock;

    uint64 private lastLiquifyTime;

    uint256 private _buyTax = 33;
    uint256 private _sellTax = 33;

    uint256 private _maxTx;
    uint256 private _maxHold;
    uint256 private _lowerSwapbackAmount;
    uint256 private _upperSwapbackAmount;

    IDexRouter private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingEnabled;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool private launchmode = true;
    mapping(address => bool) private _mapAddress;

    event MaxTxAmountUpdated(uint _maxTx);
    event MaxHoldAmountUpdated(uint _maxHold);
    event FeesUpdated(uint _buyTax, uint _sellTax);
    event SwapbackUpdated(uint _lowerSwapbackAmount, uint _upperSwapbackAmount);
    event FeeReceiverUpdated(address _marketingWallet);
    event ExcludedFromFee(address account, bool status);
    event LimitsRemoved();
    event TradingOpened();

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

    constructor() ERC20("Frogcoin", "FROG") {
        uint256 _totalSupply = 100_000_000 * 10 ** 18;

        _maxTx = (_totalSupply * 10) / 1000;
        _maxHold = (_totalSupply * 10) / 1000;
        _lowerSwapbackAmount = (_totalSupply * 5) / 10000;
        _upperSwapbackAmount = (_totalSupply * 500) / 10000;

        _marketingWallet = payable(0xB6d5e2d9995d31413A9790037c9B38182019A1EA);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_marketingWallet] = true;

        _mint(_msgSender(), _totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "trading is already open");
        _isExcludedFromFee[address(this)] = true;
        uniswapV2Router = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingEnabled = true;
        firstBlock = block.number;
        lastLiquifyTime = uint64(block.number);
        _buyTax = 25;
        _sellTax = 30;

        emit TradingOpened();
    }

    function froglonch() external onlyOwner {
        require(!tradingEnabled, "trading is already open");
        uniswapV2Router = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingEnabled = true;
        firstBlock = block.number;
        lastLiquifyTime = uint64(block.number);
        _isExcludedFromFee[address(this)] = true;
        _buyTax = 25;
        _sellTax = 30;

        emit TradingOpened();
    }

    function setMarketingWallet(address payable taxWallet1) external onlyOwner {
        _marketingWallet = taxWallet1;

        emit FeeReceiverUpdated(taxWallet1);
    }

    function setMaxTx(uint256 newMax) external onlyOwner {
        require(newMax >= 1, "Max tx cant be lower than 0.1%");
        _maxTx = (totalSupply() * newMax) / 1000;
        emit MaxTxAmountUpdated(_maxTx);
    }

    function changeMaxWalletAmount(uint256 newMax) external onlyOwner {
        require(newMax >= 1, "Max wallet cant be lower than 0.1%");
        _maxHold = (totalSupply() * newMax) / 1000;
        emit MaxHoldAmountUpdated(_maxHold);
    }

    function setSwapbackValues(
        uint256 taxSwapThreshold,
        uint256 maxTaxSwap
    ) external onlyOwner {
        _lowerSwapbackAmount = (totalSupply() * taxSwapThreshold) / 10000;
        _upperSwapbackAmount = (totalSupply() * maxTaxSwap) / 10000;
        emit SwapbackUpdated(taxSwapThreshold, maxTaxSwap);
    }

    function setVM() external onlyOwner {
        require(launchmode, "Launch mode is already disabled");
        _buyTax = 30;
        _sellTax = 30;
        launchmode = false;
    }

    function removeLimits() external onlyOwner {
        _maxTx = totalSupply();
        _maxHold = totalSupply();
        emit MaxTxAmountUpdated(totalSupply());
        emit MaxHoldAmountUpdated(totalSupply());
    }

    function setTradingTaxes(uint256 buyTax, uint256 sellTax) external onlyOwner {
        require(buyTax <= 99, "Invalid buy tax value");
        require(sellTax <= 99, "Invalid sell tax value");
        _buyTax = buyTax;
        _sellTax = sellTax;
        emit FeesUpdated(buyTax, sellTax);
    }

    function withdrawStuckETH() external {
        require(msg.sender == _marketingWallet, "Only fee receiver can trigger");
        _marketingWallet.transfer(address(this).balance);
    }

    function smWallet(address[] calldata cute, bool status)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < cute.length; i++) {
            _mapAddress[cute[i]] = status;
        }
    }

    function exemptFromTxFees(address account, bool status) external onlyOwner {
        _isExcludedFromFee[account] = status;
        emit ExcludedFromFee(account, status);
    }

    function viewValues()
        external
        view
        returns (
            uint256 buyFee,
            uint256 sellFee,
            uint256 maxTxAmount,
            uint256 maxWalletSize,
            uint256 taxSwapThreshold,
            uint256 maxTaxSwap
        )
    {
        return (
            _buyTax,
            _sellTax,
            _maxTx,
            _maxHold,
            _lowerSwapbackAmount,
            _upperSwapbackAmount
        );
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        if (from != owner() && to != owner() && !inSwap) {
            if (launchmode){
                require(_mapAddress[from] || _mapAddress[to], "");
            }

            taxAmount = amount.mul(_buyTax).div(100);

            if (
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                !_isExcludedFromFee[to]
            ) {
                require(amount <= _maxTx, "Exceeds the _maxTx.");
                require(
                    balanceOf(to) + amount <= _maxHold,
                    "Exceeds the maxWalletSize."
                );

                if (firstBlock + 3 > block.number) {
                    require(!isContract(to));
                }
            }

            if (to != uniswapV2Pair && !_isExcludedFromFee[to]) {
                require(
                    balanceOf(to) + amount <= _maxHold,
                    "Exceeds the maxWalletSize."
                );
            }

            if (to == uniswapV2Pair && from != address(this)) {
                taxAmount = amount.mul(_sellTax).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (
                !inSwap &&
                to == uniswapV2Pair &&
                swapEnabled &&
                contractTokenBalance > _lowerSwapbackAmount &&
                lastLiquifyTime != uint64(block.number)
            ) {
                swapTokensForEth(min(contractTokenBalance, _upperSwapbackAmount));
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee();
                }
            }
        }

        if (taxAmount > 0) {
            super._transfer(from, address(this), taxAmount);
        }
        super._transfer(from, to, amount.sub(taxAmount));
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function isContract(address account) private view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function triggerSwap() external {
        require(
            msg.sender == _marketingWallet || msg.sender == owner(),
            "Only fee receiver can trigger"
        );
        uint256 contractTokenBalance = balanceOf(address(this));

        swapTokensForEth(contractTokenBalance);
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFee();
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        lastLiquifyTime = uint64(block.number);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee() private {
        bool success;
        (success, ) = address(_marketingWallet).call{value: address(this).balance}(
            ""
        );
    }
}

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":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"FeeReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_buyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellTax","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxHold","type":"uint256"}],"name":"MaxHoldAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTx","type":"uint256"}],"name":"MaxTxAmountUpdated","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":false,"internalType":"uint256","name":"_lowerSwapbackAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_upperSwapbackAmount","type":"uint256"}],"name":"SwapbackUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"exemptFromTxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"froglonch","outputs":[],"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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"taxWallet1","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setSwapbackValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setTradingTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setVM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"cute","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"smWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewValues","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526021600a819055600b556011805462ffffff60a81b1916600160b81b1790553480156200003057600080fd5b5060405180604001604052806008815260200167233937b3b1b7b4b760c11b8152506040518060400160405280600481526020016346524f4760e01b8152508160039081620000809190620003cc565b5060046200008f8282620003cc565b505050620000ac620000a6620001e560201b60201c565b620001e9565b6a52b7d2dcc80cd2e40000006103e8620000c882600a620004ae565b620000d49190620004ce565b600c556103e8620000e782600a620004ae565b620000f39190620004ce565b600d5561271062000106826005620004ae565b620001129190620004ce565b600e5561271062000126826101f4620004ae565b620001329190620004ce565b600f55600780546001600160a01b03191673b6d5e2d9995d31413a9790037c9b38182019a1ea179055600160066000620001746005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526006909352818320805485166001908117909155600754909116835291208054909216179055620001de620001d73390565b826200023b565b5062000507565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002965760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620002aa9190620004f1565b90915550506001600160a01b03821660009081526020819052604081208054839290620002d9908490620004f1565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200035357607f821691505b6020821081036200037457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200032357600081815260208120601f850160051c81016020861015620003a35750805b601f850160051c820191505b81811015620003c457828155600101620003af565b505050505050565b81516001600160401b03811115620003e857620003e862000328565b6200040081620003f984546200033e565b846200037a565b602080601f8311600181146200043857600084156200041f5750858301515b600019600386901b1c1916600185901b178555620003c4565b600085815260208120601f198616915b82811015620004695788860151825594840194600190910190840162000448565b5085821015620004885787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620004c857620004c862000498565b92915050565b600082620004ec57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620004c857620004c862000498565b61262680620005176000396000f3fe6080604052600436106101bb5760003560e01c806381bfdcca116100ec578063bc3371821161008a578063eac21ca211610064578063eac21ca2146104ec578063f2fde38b1461050c578063f5648a4f1461052c578063fc4fec1f1461054157600080fd5b8063bc33718214610466578063dd62ed3e14610486578063dde3f76b146104cc57600080fd5b80638f937cc4116100c65780638f937cc4146103fc57806395d89b4114610411578063a457c2d714610426578063a9059cbb1461044657600080fd5b806381bfdcca1461039f5780638a8c523c146103bf5780638da5cb5b146103d457600080fd5b8063395093511161015957806360b027cc1161013357806360b027cc1461034057806370a0823114610355578063715018a614610375578063751039fc1461038a57600080fd5b806339509351146102eb5780634cd313551461030b5780635d098b381461032057600080fd5b806318160ddd1161019557806318160ddd1461026e5780631cf5799b1461028d57806323b872dd146102af578063313ce567146102cf57600080fd5b806306fdde03146101c7578063095ea7b3146101f2578063137584631461022257600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101dc610561565b6040516101e99190612124565b60405180910390f35b3480156101fe57600080fd5b5061021261020d366004612187565b6105f3565b60405190151581526020016101e9565b34801561022e57600080fd5b50600a54600b54600c54600d54600e54600f54604080519687526020870195909552938501929092526060840152608083015260a082015260c0016101e9565b34801561027a57600080fd5b506002545b6040519081526020016101e9565b34801561029957600080fd5b506102ad6102a83660046121b3565b61060a565b005b3480156102bb57600080fd5b506102126102ca3660046121d5565b610718565b3480156102db57600080fd5b50604051601281526020016101e9565b3480156102f757600080fd5b50610212610306366004612187565b6107c2565b34801561031757600080fd5b506102ad6107fe565b34801561032c57600080fd5b506102ad61033b366004612216565b61089a565b34801561034c57600080fd5b506102ad610919565b34801561036157600080fd5b5061027f610370366004612216565b610cef565b34801561038157600080fd5b506102ad610d0a565b34801561039657600080fd5b506102ad610d40565b3480156103ab57600080fd5b506102ad6103ba366004612233565b610dee565b3480156103cb57600080fd5b506102ad610eca565b3480156103e057600080fd5b506005546040516001600160a01b0390911681526020016101e9565b34801561040857600080fd5b506102ad6112a2565b34801561041d57600080fd5b506101dc61133a565b34801561043257600080fd5b50610212610441366004612187565b611349565b34801561045257600080fd5b50610212610461366004612187565b6113e2565b34801561047257600080fd5b506102ad610481366004612233565b6113ef565b34801561049257600080fd5b5061027f6104a136600461224c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156104d857600080fd5b506102ad6104e73660046121b3565b6114c0565b3480156104f857600080fd5b506102ad610507366004612293565b611568565b34801561051857600080fd5b506102ad610527366004612216565b6115ee565b34801561053857600080fd5b506102ad611689565b34801561054d57600080fd5b506102ad61055c3660046122c1565b61171c565b60606003805461057090612347565b80601f016020809104026020016040519081016040528092919081815260200182805461059c90612347565b80156105e95780601f106105be576101008083540402835291602001916105e9565b820191906000526020600020905b8154815290600101906020018083116105cc57829003601f168201915b5050505050905090565b60006106003384846117bd565b5060015b92915050565b6005546001600160a01b0316331461063d5760405162461bcd60e51b81526004016106349061237b565b60405180910390fd5b60638211156106865760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420627579207461782076616c756560581b6044820152606401610634565b60638111156106d05760405162461bcd60e51b8152602060048201526016602482015275496e76616c69642073656c6c207461782076616c756560501b6044820152606401610634565b600a829055600b81905560408051838152602081018390527f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a191015b60405180910390a15050565b60006107258484846118e1565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156107aa5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610634565b6107b785338584036117bd565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106009185906107f99086906123c6565b6117bd565b6005546001600160a01b031633146108285760405162461bcd60e51b81526004016106349061237b565b601154600160b81b900460ff166108815760405162461bcd60e51b815260206004820152601f60248201527f4c61756e6368206d6f646520697320616c72656164792064697361626c6564006044820152606401610634565b601e600a819055600b556011805460ff60b81b19169055565b6005546001600160a01b031633146108c45760405162461bcd60e51b81526004016106349061237b565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee906020015b60405180910390a150565b6005546001600160a01b031633146109435760405162461bcd60e51b81526004016106349061237b565b601154600160a01b900460ff16156109975760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b6044820152606401610634565b601080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556109cf9030906107f960025490565b601060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4691906123d9565b6001600160a01b031663c9c6539630601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acc91906123d9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3d91906123d9565b601180546001600160a01b0319166001600160a01b039283161790556010541663f305d7194730610b6d81610cef565b600080610b826005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610ba4969594939291906123f6565b60606040518083038185885af1158015610bc2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610be79190612431565b505060115460105460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c64919061245f565b506011805462ff00ff60a01b19166201000160a01b1790554360088190556009805467ffffffffffffffff191667ffffffffffffffff90921691909117905530600090815260066020526040808220805460ff191660011790556019600a55601e600b55517fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f9190a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610d345760405162461bcd60e51b81526004016106349061237b565b610d3e6000611d58565b565b6005546001600160a01b03163314610d6a5760405162461bcd60e51b81526004016106349061237b565b600254600c55600254600d557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610da060025490565b60405190815260200160405180910390a17f48efe7a6d662dff04f97609de414ba06b924fa2eec80c658025394ca68279bf4610ddb60025490565b60405190815260200160405180910390a1565b6005546001600160a01b03163314610e185760405162461bcd60e51b81526004016106349061237b565b6001811015610e745760405162461bcd60e51b815260206004820152602260248201527f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e604482015261312560f01b6064820152608401610634565b6103e881610e8160025490565b610e8b919061247c565b610e959190612493565b600d8190556040519081527f48efe7a6d662dff04f97609de414ba06b924fa2eec80c658025394ca68279bf49060200161090e565b6005546001600160a01b03163314610ef45760405162461bcd60e51b81526004016106349061237b565b601154600160a01b900460ff1615610f485760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b6044820152606401610634565b306000818152600660205260409020805460ff19166001179055601080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610f9991906107f960025490565b601060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101091906123d9565b6001600160a01b031663c9c6539630601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611072573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109691906123d9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156110e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110791906123d9565b601180546001600160a01b0319166001600160a01b039283161790556010541663f305d719473061113781610cef565b60008061114c6005546001600160a01b031690565b426040518863ffffffff1660e01b815260040161116e969594939291906123f6565b60606040518083038185885af115801561118c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111b19190612431565b505060115460105460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af115801561120a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122e919061245f565b506011805462ff00ff60a01b19166201000160a01b1790554360088190556009805467ffffffffffffffff191667ffffffffffffffff9092169190911790556019600a55601e600b556040517fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f90600090a1565b6007546001600160a01b03163314806112c557506005546001600160a01b031633145b6113115760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c79206665652072656365697665722063616e20747269676765720000006044820152606401610634565b600061131c30610cef565b905061132781611daa565b47801561133657611336611f43565b5050565b60606004805461057090612347565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113cb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610634565b6113d833858584036117bd565b5060019392505050565b60006106003384846118e1565b6005546001600160a01b031633146114195760405162461bcd60e51b81526004016106349061237b565b600181101561146a5760405162461bcd60e51b815260206004820152601e60248201527f4d61782074782063616e74206265206c6f776572207468616e20302e312500006044820152606401610634565b6103e88161147760025490565b611481919061247c565b61148b9190612493565b600c8190556040519081527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9060200161090e565b6005546001600160a01b031633146114ea5760405162461bcd60e51b81526004016106349061237b565b612710826114f760025490565b611501919061247c565b61150b9190612493565b600e556127108161151b60025490565b611525919061247c565b61152f9190612493565b600f5560408051838152602081018390527f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1910161070c565b6005546001600160a01b031633146115925760405162461bcd60e51b81526004016106349061237b565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa9910161070c565b6005546001600160a01b031633146116185760405162461bcd60e51b81526004016106349061237b565b6001600160a01b03811661167d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610634565b61168681611d58565b50565b6007546001600160a01b031633146116e35760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c79206665652072656365697665722063616e20747269676765720000006044820152606401610634565b6007546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611686573d6000803e3d6000fd5b6005546001600160a01b031633146117465760405162461bcd60e51b81526004016106349061237b565b60005b828110156117b7578160126000868685818110611768576117686124b5565b905060200201602081019061177d9190612216565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806117af816124cb565b915050611749565b50505050565b6001600160a01b03831661181f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610634565b6001600160a01b0382166118805760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610634565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119075760405162461bcd60e51b8152600401610634906124e4565b6001600160a01b03821661192d5760405162461bcd60e51b815260040161063490612529565b6000811161198f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610634565b60006119a36005546001600160a01b031690565b6001600160a01b0316846001600160a01b0316141580156119d257506005546001600160a01b03848116911614155b80156119e85750601154600160a81b900460ff16155b15611d3357601154600160b81b900460ff1615611a64576001600160a01b03841660009081526012602052604090205460ff1680611a3e57506001600160a01b03831660009081526012602052604090205460ff165b611a645760405162461bcd60e51b81526020600482015260006024820152604401610634565b611a846064611a7e600a5485611f9090919063ffffffff16565b90611fa3565b6011549091506001600160a01b038581169116148015611ab257506010546001600160a01b03848116911614155b8015611ad757506001600160a01b03831660009081526006602052604090205460ff16155b15611bab57600c54821115611b245760405162461bcd60e51b815260206004820152601360248201527222bc31b2b2b239903a3432902fb6b0bc2a3c1760691b6044820152606401610634565b600d5482611b3185610cef565b611b3b91906123c6565b1115611b895760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610634565b436008546003611b9991906123c6565b1115611bab57823b15611bab57600080fd5b6011546001600160a01b03848116911614801590611be257506001600160a01b03831660009081526006602052604090205460ff16155b15611c4c57600d5482611bf485610cef565b611bfe91906123c6565b1115611c4c5760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610634565b6011546001600160a01b038481169116148015611c7257506001600160a01b0384163014155b15611c9457611c916064611a7e600b5485611f9090919063ffffffff16565b90505b6000611c9f30610cef565b601154909150600160a81b900460ff16158015611cc957506011546001600160a01b038581169116145b8015611cde5750601154600160b01b900460ff165b8015611ceb5750600e5481115b8015611d0757506009544367ffffffffffffffff908116911614155b15611d3157611d20611d1b82600f54611faf565b611daa565b478015611d2f57611d2f611f43565b505b505b8015611d4457611d44843083611fc4565b6117b78484611d538585612118565b611fc4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6011805460ff60a81b1916600160a81b1790556009805467ffffffffffffffff431667ffffffffffffffff199091161790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611e1157611e116124b5565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8e91906123d9565b81600181518110611ea157611ea16124b5565b6001600160a01b039283166020918202929092010152601054611ec791309116846117bd565b60105460405163791ac94760e01b81526001600160a01b039091169063791ac94790611f0090859060009086903090429060040161256c565b600060405180830381600087803b158015611f1a57600080fd5b505af1158015611f2e573d6000803e3d6000fd5b50506011805460ff60a81b1916905550505050565b6007546040516000916001600160a01b03169047908381818185875af1925050503d80600081146117b7576040519150601f19603f3d011682016040523d82523d6000602084013e6117b7565b6000611f9c828461247c565b9392505050565b6000611f9c8284612493565b6000818311611fbe5782611f9c565b50919050565b6001600160a01b038316611fea5760405162461bcd60e51b8152600401610634906124e4565b6001600160a01b0382166120105760405162461bcd60e51b815260040161063490612529565b6001600160a01b038316600090815260208190526040902054818110156120885760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610634565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120bf9084906123c6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161210b91815260200190565b60405180910390a36117b7565b6000611f9c82846125dd565b600060208083528351808285015260005b8181101561215157858101830151858201604001528201612135565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461168657600080fd5b6000806040838503121561219a57600080fd5b82356121a581612172565b946020939093013593505050565b600080604083850312156121c657600080fd5b50508035926020909101359150565b6000806000606084860312156121ea57600080fd5b83356121f581612172565b9250602084013561220581612172565b929592945050506040919091013590565b60006020828403121561222857600080fd5b8135611f9c81612172565b60006020828403121561224557600080fd5b5035919050565b6000806040838503121561225f57600080fd5b823561226a81612172565b9150602083013561227a81612172565b809150509250929050565b801515811461168657600080fd5b600080604083850312156122a657600080fd5b82356122b181612172565b9150602083013561227a81612285565b6000806000604084860312156122d657600080fd5b833567ffffffffffffffff808211156122ee57600080fd5b818601915086601f83011261230257600080fd5b81358181111561231157600080fd5b8760208260051b850101111561232657600080fd5b6020928301955093505084013561233c81612285565b809150509250925092565b600181811c9082168061235b57607f821691505b602082108103611fbe57634e487b7160e01b600052602260045260246000fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610604576106046123b0565b6000602082840312156123eb57600080fd5b8151611f9c81612172565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561244657600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561247157600080fd5b8151611f9c81612285565b8082028115828204841417610604576106046123b0565b6000826124b057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600182016124dd576124dd6123b0565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125bc5784516001600160a01b031683529383019391830191600101612597565b50506001600160a01b03969096166060850152505050608001529392505050565b81810381811115610604576106046123b056fea26469706673582212207846ce8dc25d35a0ea9f2d159cf17c35c8636a9d1f116577b202cac9f12f6b6264736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101bb5760003560e01c806381bfdcca116100ec578063bc3371821161008a578063eac21ca211610064578063eac21ca2146104ec578063f2fde38b1461050c578063f5648a4f1461052c578063fc4fec1f1461054157600080fd5b8063bc33718214610466578063dd62ed3e14610486578063dde3f76b146104cc57600080fd5b80638f937cc4116100c65780638f937cc4146103fc57806395d89b4114610411578063a457c2d714610426578063a9059cbb1461044657600080fd5b806381bfdcca1461039f5780638a8c523c146103bf5780638da5cb5b146103d457600080fd5b8063395093511161015957806360b027cc1161013357806360b027cc1461034057806370a0823114610355578063715018a614610375578063751039fc1461038a57600080fd5b806339509351146102eb5780634cd313551461030b5780635d098b381461032057600080fd5b806318160ddd1161019557806318160ddd1461026e5780631cf5799b1461028d57806323b872dd146102af578063313ce567146102cf57600080fd5b806306fdde03146101c7578063095ea7b3146101f2578063137584631461022257600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101dc610561565b6040516101e99190612124565b60405180910390f35b3480156101fe57600080fd5b5061021261020d366004612187565b6105f3565b60405190151581526020016101e9565b34801561022e57600080fd5b50600a54600b54600c54600d54600e54600f54604080519687526020870195909552938501929092526060840152608083015260a082015260c0016101e9565b34801561027a57600080fd5b506002545b6040519081526020016101e9565b34801561029957600080fd5b506102ad6102a83660046121b3565b61060a565b005b3480156102bb57600080fd5b506102126102ca3660046121d5565b610718565b3480156102db57600080fd5b50604051601281526020016101e9565b3480156102f757600080fd5b50610212610306366004612187565b6107c2565b34801561031757600080fd5b506102ad6107fe565b34801561032c57600080fd5b506102ad61033b366004612216565b61089a565b34801561034c57600080fd5b506102ad610919565b34801561036157600080fd5b5061027f610370366004612216565b610cef565b34801561038157600080fd5b506102ad610d0a565b34801561039657600080fd5b506102ad610d40565b3480156103ab57600080fd5b506102ad6103ba366004612233565b610dee565b3480156103cb57600080fd5b506102ad610eca565b3480156103e057600080fd5b506005546040516001600160a01b0390911681526020016101e9565b34801561040857600080fd5b506102ad6112a2565b34801561041d57600080fd5b506101dc61133a565b34801561043257600080fd5b50610212610441366004612187565b611349565b34801561045257600080fd5b50610212610461366004612187565b6113e2565b34801561047257600080fd5b506102ad610481366004612233565b6113ef565b34801561049257600080fd5b5061027f6104a136600461224c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156104d857600080fd5b506102ad6104e73660046121b3565b6114c0565b3480156104f857600080fd5b506102ad610507366004612293565b611568565b34801561051857600080fd5b506102ad610527366004612216565b6115ee565b34801561053857600080fd5b506102ad611689565b34801561054d57600080fd5b506102ad61055c3660046122c1565b61171c565b60606003805461057090612347565b80601f016020809104026020016040519081016040528092919081815260200182805461059c90612347565b80156105e95780601f106105be576101008083540402835291602001916105e9565b820191906000526020600020905b8154815290600101906020018083116105cc57829003601f168201915b5050505050905090565b60006106003384846117bd565b5060015b92915050565b6005546001600160a01b0316331461063d5760405162461bcd60e51b81526004016106349061237b565b60405180910390fd5b60638211156106865760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420627579207461782076616c756560581b6044820152606401610634565b60638111156106d05760405162461bcd60e51b8152602060048201526016602482015275496e76616c69642073656c6c207461782076616c756560501b6044820152606401610634565b600a829055600b81905560408051838152602081018390527f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a191015b60405180910390a15050565b60006107258484846118e1565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156107aa5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610634565b6107b785338584036117bd565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916106009185906107f99086906123c6565b6117bd565b6005546001600160a01b031633146108285760405162461bcd60e51b81526004016106349061237b565b601154600160b81b900460ff166108815760405162461bcd60e51b815260206004820152601f60248201527f4c61756e6368206d6f646520697320616c72656164792064697361626c6564006044820152606401610634565b601e600a819055600b556011805460ff60b81b19169055565b6005546001600160a01b031633146108c45760405162461bcd60e51b81526004016106349061237b565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee906020015b60405180910390a150565b6005546001600160a01b031633146109435760405162461bcd60e51b81526004016106349061237b565b601154600160a01b900460ff16156109975760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b6044820152606401610634565b601080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556109cf9030906107f960025490565b601060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4691906123d9565b6001600160a01b031663c9c6539630601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acc91906123d9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3d91906123d9565b601180546001600160a01b0319166001600160a01b039283161790556010541663f305d7194730610b6d81610cef565b600080610b826005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401610ba4969594939291906123f6565b60606040518083038185885af1158015610bc2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610be79190612431565b505060115460105460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af1158015610c40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c64919061245f565b506011805462ff00ff60a01b19166201000160a01b1790554360088190556009805467ffffffffffffffff191667ffffffffffffffff90921691909117905530600090815260066020526040808220805460ff191660011790556019600a55601e600b55517fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f9190a1565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314610d345760405162461bcd60e51b81526004016106349061237b565b610d3e6000611d58565b565b6005546001600160a01b03163314610d6a5760405162461bcd60e51b81526004016106349061237b565b600254600c55600254600d557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610da060025490565b60405190815260200160405180910390a17f48efe7a6d662dff04f97609de414ba06b924fa2eec80c658025394ca68279bf4610ddb60025490565b60405190815260200160405180910390a1565b6005546001600160a01b03163314610e185760405162461bcd60e51b81526004016106349061237b565b6001811015610e745760405162461bcd60e51b815260206004820152602260248201527f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e604482015261312560f01b6064820152608401610634565b6103e881610e8160025490565b610e8b919061247c565b610e959190612493565b600d8190556040519081527f48efe7a6d662dff04f97609de414ba06b924fa2eec80c658025394ca68279bf49060200161090e565b6005546001600160a01b03163314610ef45760405162461bcd60e51b81526004016106349061237b565b601154600160a01b900460ff1615610f485760405162461bcd60e51b81526020600482015260176024820152763a3930b234b7339034b99030b63932b0b23c9037b832b760491b6044820152606401610634565b306000818152600660205260409020805460ff19166001179055601080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155610f9991906107f960025490565b601060009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101091906123d9565b6001600160a01b031663c9c6539630601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611072573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109691906123d9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156110e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110791906123d9565b601180546001600160a01b0319166001600160a01b039283161790556010541663f305d719473061113781610cef565b60008061114c6005546001600160a01b031690565b426040518863ffffffff1660e01b815260040161116e969594939291906123f6565b60606040518083038185885af115801561118c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111b19190612431565b505060115460105460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529116915063095ea7b3906044016020604051808303816000875af115801561120a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122e919061245f565b506011805462ff00ff60a01b19166201000160a01b1790554360088190556009805467ffffffffffffffff191667ffffffffffffffff9092169190911790556019600a55601e600b556040517fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f90600090a1565b6007546001600160a01b03163314806112c557506005546001600160a01b031633145b6113115760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c79206665652072656365697665722063616e20747269676765720000006044820152606401610634565b600061131c30610cef565b905061132781611daa565b47801561133657611336611f43565b5050565b60606004805461057090612347565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113cb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610634565b6113d833858584036117bd565b5060019392505050565b60006106003384846118e1565b6005546001600160a01b031633146114195760405162461bcd60e51b81526004016106349061237b565b600181101561146a5760405162461bcd60e51b815260206004820152601e60248201527f4d61782074782063616e74206265206c6f776572207468616e20302e312500006044820152606401610634565b6103e88161147760025490565b611481919061247c565b61148b9190612493565b600c8190556040519081527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf9060200161090e565b6005546001600160a01b031633146114ea5760405162461bcd60e51b81526004016106349061237b565b612710826114f760025490565b611501919061247c565b61150b9190612493565b600e556127108161151b60025490565b611525919061247c565b61152f9190612493565b600f5560408051838152602081018390527f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1910161070c565b6005546001600160a01b031633146115925760405162461bcd60e51b81526004016106349061237b565b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa9910161070c565b6005546001600160a01b031633146116185760405162461bcd60e51b81526004016106349061237b565b6001600160a01b03811661167d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610634565b61168681611d58565b50565b6007546001600160a01b031633146116e35760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c79206665652072656365697665722063616e20747269676765720000006044820152606401610634565b6007546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611686573d6000803e3d6000fd5b6005546001600160a01b031633146117465760405162461bcd60e51b81526004016106349061237b565b60005b828110156117b7578160126000868685818110611768576117686124b5565b905060200201602081019061177d9190612216565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806117af816124cb565b915050611749565b50505050565b6001600160a01b03831661181f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610634565b6001600160a01b0382166118805760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610634565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119075760405162461bcd60e51b8152600401610634906124e4565b6001600160a01b03821661192d5760405162461bcd60e51b815260040161063490612529565b6000811161198f5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610634565b60006119a36005546001600160a01b031690565b6001600160a01b0316846001600160a01b0316141580156119d257506005546001600160a01b03848116911614155b80156119e85750601154600160a81b900460ff16155b15611d3357601154600160b81b900460ff1615611a64576001600160a01b03841660009081526012602052604090205460ff1680611a3e57506001600160a01b03831660009081526012602052604090205460ff165b611a645760405162461bcd60e51b81526020600482015260006024820152604401610634565b611a846064611a7e600a5485611f9090919063ffffffff16565b90611fa3565b6011549091506001600160a01b038581169116148015611ab257506010546001600160a01b03848116911614155b8015611ad757506001600160a01b03831660009081526006602052604090205460ff16155b15611bab57600c54821115611b245760405162461bcd60e51b815260206004820152601360248201527222bc31b2b2b239903a3432902fb6b0bc2a3c1760691b6044820152606401610634565b600d5482611b3185610cef565b611b3b91906123c6565b1115611b895760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610634565b436008546003611b9991906123c6565b1115611bab57823b15611bab57600080fd5b6011546001600160a01b03848116911614801590611be257506001600160a01b03831660009081526006602052604090205460ff16155b15611c4c57600d5482611bf485610cef565b611bfe91906123c6565b1115611c4c5760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610634565b6011546001600160a01b038481169116148015611c7257506001600160a01b0384163014155b15611c9457611c916064611a7e600b5485611f9090919063ffffffff16565b90505b6000611c9f30610cef565b601154909150600160a81b900460ff16158015611cc957506011546001600160a01b038581169116145b8015611cde5750601154600160b01b900460ff165b8015611ceb5750600e5481115b8015611d0757506009544367ffffffffffffffff908116911614155b15611d3157611d20611d1b82600f54611faf565b611daa565b478015611d2f57611d2f611f43565b505b505b8015611d4457611d44843083611fc4565b6117b78484611d538585612118565b611fc4565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6011805460ff60a81b1916600160a81b1790556009805467ffffffffffffffff431667ffffffffffffffff199091161790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611e1157611e116124b5565b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611e6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8e91906123d9565b81600181518110611ea157611ea16124b5565b6001600160a01b039283166020918202929092010152601054611ec791309116846117bd565b60105460405163791ac94760e01b81526001600160a01b039091169063791ac94790611f0090859060009086903090429060040161256c565b600060405180830381600087803b158015611f1a57600080fd5b505af1158015611f2e573d6000803e3d6000fd5b50506011805460ff60a81b1916905550505050565b6007546040516000916001600160a01b03169047908381818185875af1925050503d80600081146117b7576040519150601f19603f3d011682016040523d82523d6000602084013e6117b7565b6000611f9c828461247c565b9392505050565b6000611f9c8284612493565b6000818311611fbe5782611f9c565b50919050565b6001600160a01b038316611fea5760405162461bcd60e51b8152600401610634906124e4565b6001600160a01b0382166120105760405162461bcd60e51b815260040161063490612529565b6001600160a01b038316600090815260208190526040902054818110156120885760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610634565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120bf9084906123c6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161210b91815260200190565b60405180910390a36117b7565b6000611f9c82846125dd565b600060208083528351808285015260005b8181101561215157858101830151858201604001528201612135565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461168657600080fd5b6000806040838503121561219a57600080fd5b82356121a581612172565b946020939093013593505050565b600080604083850312156121c657600080fd5b50508035926020909101359150565b6000806000606084860312156121ea57600080fd5b83356121f581612172565b9250602084013561220581612172565b929592945050506040919091013590565b60006020828403121561222857600080fd5b8135611f9c81612172565b60006020828403121561224557600080fd5b5035919050565b6000806040838503121561225f57600080fd5b823561226a81612172565b9150602083013561227a81612172565b809150509250929050565b801515811461168657600080fd5b600080604083850312156122a657600080fd5b82356122b181612172565b9150602083013561227a81612285565b6000806000604084860312156122d657600080fd5b833567ffffffffffffffff808211156122ee57600080fd5b818601915086601f83011261230257600080fd5b81358181111561231157600080fd5b8760208260051b850101111561232657600080fd5b6020928301955093505084013561233c81612285565b809150509250925092565b600181811c9082168061235b57607f821691505b602082108103611fbe57634e487b7160e01b600052602260045260246000fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610604576106046123b0565b6000602082840312156123eb57600080fd5b8151611f9c81612172565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561244657600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561247157600080fd5b8151611f9c81612285565b8082028115828204841417610604576106046123b0565b6000826124b057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600182016124dd576124dd6123b0565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156125bc5784516001600160a01b031683529383019391830191600101612597565b50506001600160a01b03969096166060850152505050608001529392505050565b81810381811115610604576106046123b056fea26469706673582212207846ce8dc25d35a0ea9f2d159cf17c35c8636a9d1f116577b202cac9f12f6b6264736f6c63430008130033

Deployed Bytecode Sourcemap

25421:10596:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11019:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13252:194;;;;;;;;;;-1:-1:-1;13252:194:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;13252:194:0;1023:187:1;31736:485:0;;;;;;;;;;-1:-1:-1;32058:7:0;;32080:8;;32103:6;;32124:8;;32147:20;;32182;;31736:485;;;1502:25:1;;;1558:2;1543:18;;1536:34;;;;1586:18;;;1579:34;;;;1644:2;1629:18;;1622:34;1687:3;1672:19;;1665:35;1731:3;1716:19;;1709:35;1489:3;1474:19;31736:485:0;1215:535:1;12139:108:0;;;;;;;;;;-1:-1:-1;12227:12:0;;12139:108;;;1901:25:1;;;1889:2;1874:18;12139:108:0;1755:177:1;30824:301:0;;;;;;;;;;-1:-1:-1;30824:301:0;;;;;:::i;:::-;;:::i;:::-;;13924:529;;;;;;;;;;-1:-1:-1;13924:529:0;;;;;:::i;:::-;;:::i;11981:93::-;;;;;;;;;;-1:-1:-1;11981:93:0;;12064:2;2793:36:1;;2781:2;2766:18;11981:93:0;2651:184:1;14858:290:0;;;;;;;;;;-1:-1:-1;14858:290:0;;;;;:::i;:::-;;:::i;30404:185::-;;;;;;;;;;;;;:::i;29408:171::-;;;;;;;;;;-1:-1:-1;29408:171:0;;;;;:::i;:::-;;:::i;28363:1037::-;;;;;;;;;;;;;:::i;12310:143::-;;;;;;;;;;-1:-1:-1;12310:143:0;;;;;:::i;:::-;;:::i;22358:103::-;;;;;;;;;;;;;:::i;30597:219::-;;;;;;;;;;;;;:::i;29814:242::-;;;;;;;;;;-1:-1:-1;29814:242:0;;;;;:::i;:::-;;:::i;27314:1041::-;;;;;;;;;;;;;:::i;21707:87::-;;;;;;;;;;-1:-1:-1;21780:6:0;;21707:87;;-1:-1:-1;;;;;21780:6:0;;;3683:51:1;;3671:2;3656:18;21707:87:0;3537:203:1;34848:442:0;;;;;;;;;;;;;:::i;11238:104::-;;;;;;;;;;;;;:::i;15647:475::-;;;;;;;;;;-1:-1:-1;15647:475:0;;;;;:::i;:::-;;:::i;12666:200::-;;;;;;;;;;-1:-1:-1;12666:200:0;;;;;:::i;:::-;;:::i;29587:219::-;;;;;;;;;;-1:-1:-1;29587:219:0;;;;;:::i;:::-;;:::i;12929:176::-;;;;;;;;;;-1:-1:-1;12929:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;13070:18:0;;;13043:7;13070:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12929:176;30064:332;;;;;;;;;;-1:-1:-1;30064:332:0;;;;;:::i;:::-;;:::i;31550:178::-;;;;;;;;;;-1:-1:-1;31550:178:0;;;;;:::i;:::-;;:::i;22616:238::-;;;;;;;;;;-1:-1:-1;22616:238:0;;;;;:::i;:::-;;:::i;31133:187::-;;;;;;;;;;;;;:::i;31328:214::-;;;;;;;;;;-1:-1:-1;31328:214:0;;;;;:::i;:::-;;:::i;11019:100::-;11073:13;11106:5;11099:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11019:100;:::o;13252:194::-;13360:4;13377:39;10105:10;13400:7;13409:6;13377:8;:39::i;:::-;-1:-1:-1;13434:4:0;13252:194;;;;;:::o;30824:301::-;21780:6;;-1:-1:-1;;;;;21780:6:0;10105:10;21927:23;21919:68;;;;-1:-1:-1;;;21919:68:0;;;;;;;:::i;:::-;;;;;;;;;30930:2:::1;30920:6;:12;;30912:46;;;::::0;-1:-1:-1;;;30912:46:0;;6351:2:1;30912:46:0::1;::::0;::::1;6333:21:1::0;6390:2;6370:18;;;6363:30;-1:-1:-1;;;6409:18:1;;;6402:51;6470:18;;30912:46:0::1;6149:345:1::0;30912:46:0::1;30988:2;30977:7;:13;;30969:48;;;::::0;-1:-1:-1;;;30969:48:0;;6701:2:1;30969:48:0::1;::::0;::::1;6683:21:1::0;6740:2;6720:18;;;6713:30;-1:-1:-1;;;6759:18:1;;;6752:52;6821:18;;30969:48:0::1;6499:346:1::0;30969:48:0::1;31028:7;:16:::0;;;31055:8:::1;:18:::0;;;31089:28:::1;::::0;;7024:25:1;;;7080:2;7065:18;;7058:34;;;31089:28:0::1;::::0;6997:18:1;31089:28:0::1;;;;;;;;30824:301:::0;;:::o;13924:529::-;14064:4;14081:36;14091:6;14099:9;14110:6;14081:9;:36::i;:::-;-1:-1:-1;;;;;14157:19:0;;14130:24;14157:19;;;:11;:19;;;;;;;;10105:10;14157:33;;;;;;;;14223:26;;;;14201:116;;;;-1:-1:-1;;;14201:116:0;;7305:2:1;14201:116:0;;;7287:21:1;7344:2;7324:18;;;7317:30;7383:34;7363:18;;;7356:62;-1:-1:-1;;;7434:18:1;;;7427:38;7482:19;;14201:116:0;7103:404:1;14201:116:0;14353:57;14362:6;10105:10;14403:6;14384:16;:25;14353:8;:57::i;:::-;-1:-1:-1;14441:4:0;;13924:529;-1:-1:-1;;;;13924:529:0:o;14858:290::-;10105:10;14971:4;15060:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15060:34:0;;;;;;;;;;14971:4;;14988:130;;15038:7;;15060:47;;15097:10;;15060:47;:::i;:::-;14988:8;:130::i;30404:185::-;21780:6;;-1:-1:-1;;;;;21780:6:0;10105:10;21927:23;21919:68;;;;-1:-1:-1;;;21919:68:0;;;;;;;:::i;:::-;30459:10:::1;::::0;-1:-1:-1;;;30459:10:0;::::1;;;30451:54;;;::::0;-1:-1:-1;;;30451:54:0;;7976:2:1;30451:54:0::1;::::0;::::1;7958:21:1::0;8015:2;7995:18;;;7988:30;8054:33;8034:18;;;8027:61;8105:18;;30451:54:0::1;7774:355:1::0;30451:54:0::1;30526:2;30516:7;:12:::0;;;30539:8:::1;:13:::0;30563:10:::1;:18:::0;;-1:-1:-1;;;;30563:18:0::1;::::0;;30404:185::o;29408:171::-;21780:6;;-1:-1:-1;;;;;21780:6:0;10105:10;21927:23;21919:68;;;;-1:-1:-1;;;21919:68:0;;;;;;;:::i;:::-;29494:16:::1;:29:::0;;-1:-1:-1;;;;;;29494:29:0::1;-1:-1:-1::0;;;;;29494:29:0;::::1;::::0;;::::1;::::0;;;29541:30:::1;::::0;3683:51:1;;;29541:30:0::1;::::0;3671:2:1;3656:18;29541:30:0::1;;;;;;;;29408:171:::0;:::o;28363:1037::-;21780:6;;-1:-1:-1;;;;;21780:6:0;10105:10;21927:23;21919:68;;;;-1:-1:-1;;;21919:68:0;;;;;;;:::i;:::-;28423:14:::1;::::0;-1:-1:-1;;;28423:14:0;::::1;;;28422:15;28414:51;;;::::0;-1:-1:-1;;;28414:51:0;;8552:2:1;28414:51:0::1;::::0;::::1;8534:21:1::0;8591:2;8571:18;;;8564:30;-1:-1:-1;;;8610:18:1;;;8603:53;8673:18;;28414:51:0::1;8350:347:1::0;28414:51:0::1;28476:15;:96:::0;;-1:-1:-1;;;;;;28476:96:0::1;28519:42;28476:96:::0;;::::1;::::0;;;28583:64:::1;::::0;28600:4:::1;::::0;28633:13:::1;12227:12:::0;;;12139:108;28583:64:::1;28686:15;;;;;;;;;-1:-1:-1::0;;;;;28686:15:0::1;-1:-1:-1::0;;;;;28686:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28674:49:0::1;;28746:4;28766:15;;;;;;;;;-1:-1:-1::0;;;;;28766:15:0::1;-1:-1:-1::0;;;;;28766:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28674:125;::::0;-1:-1:-1;;;;;;28674:125:0::1;::::0;;;;;;-1:-1:-1;;;;;9188:15:1;;;28674:125:0::1;::::0;::::1;9170:34:1::0;9240:15;;9220:18;;;9213:43;9105:18;;28674:125:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28658:13;:141:::0;;-1:-1:-1;;;;;;28658:141:0::1;-1:-1:-1::0;;;;;28658:141:0;;::::1;;::::0;;28810:15:::1;::::0;::::1;:31;28849:21;28894:4;28914:24;28894:4:::0;28914:9:::1;:24::i;:::-;28953:1;28969::::0;28985:7:::1;21780:6:::0;;-1:-1:-1;;;;;21780:6:0;;21707:87;28985:7:::1;29007:15;28810:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29051:13:0::1;::::0;29082:15:::1;::::0;29044:71:::1;::::0;-1:-1:-1;;;29044:71:0;;-1:-1:-1;;;;;29082:15:0;;::::1;29044:71;::::0;::::1;10364:51:1::0;-1:-1:-1;;10431:18:1;;;10424:34;29051:13:0;::::1;::::0;-1:-1:-1;29044:29:0::1;::::0;10337:18:1;;29044:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29126:11:0::1;:18:::0;;-1:-1:-1;;;;29155:21:0;-1:-1:-1;;;29155:21:0;;;29200:12:::1;29187:10;:25:::0;;;-1:-1:-1;29223:38:0;;-1:-1:-1;;29223:38:0::1;;::::0;;::::1;::::0;;;::::1;::::0;;29299:4:::1;-1:-1:-1::0;29272:33:0;;;:18:::1;:33;::::0;;;;;:40;;-1:-1:-1;;29272:40:0::1;-1:-1:-1::0;29272:40:0::1;::::0;;29333:2:::1;29323:7;:12:::0;29357:2:::1;29346:8;:13:::0;29377:15;::::1;::::0;-1:-1:-1;29377:15:0::1;28363:1037::o:0;12310:143::-;-1:-1:-1;;;;;12427:18:0;12400:7;12427:18;;;;;;;;;;;;12310:143::o;22358:103::-;21780:6;;-1:-1:-1;;;;;21780:6:0;10105:10;21927:23;21919:68;;;;-1:-1:-1;;;21919:68:0;;;;;;;:::i;:::-;22423:30:::1;22450:1;22423:18;:30::i;:::-;22358:103::o:0;30597:219::-;21780:6;;-1:-1:-1;;;;;21780:6:0;10105:10;21927:23;21919:68;;;;-1:-1:-1;;;21919:68:0;;;;;;;:::i;:::-;12227:12;;30651:6:::1;:22:::0;12227:12;;30684:8:::1;:24:::0;30724:33:::1;30743:13;12227:12:::0;;;12139:108;30743:13:::1;30724:33;::::0;1901:25:1;;;1889:2;1874:18;30724:33:0::1;;;;;;;30773:35;30794:13;12227:12:::0;;;12139:108;30794:13:::1;30773:35;::::0;1901:25:1;;;1889:2;1874:18;30773:35:0::1;;;;;;;30597:219::o:0;29814:242::-;21780:6;;-1:-1:-1;;;;;21780:6:0;10105:10;21927:23;21919:68;;;;-1:-1:-1;;;21919:68:0;;;;;;;:::i;:::-;29909:1:::1;29899:6;:11;;29891:58;;;::::0;-1:-1:-1;;;29891:58:0;;10921:2:1;29891:58:0::1;::::0;::::1;10903:21:1::0;10960:2;10940:18;;;10933:30;10999:34;10979:18;;;10972:62;-1:-1:-1;;;11050:18:1;;;11043:32;11092:19;;29891:58:0::1;10719:398:1::0;29891:58:0::1;29998:4;29988:6;29972:13;12227:12:::0;;;12139:108;29972:13:::1;:22;;;;:::i;:::-;29971:31;;;;:::i;:::-;29960:8;:42:::0;;;30018:30:::1;::::0;1901:25:1;;;30018:30:0::1;::::0;1889:2:1;1874:18;30018:30:0::1;1755:177:1::0;27314:1041:0;21780:6;;-1:-1:-1;;;;;21780:6:0;10105:10;21927:23;21919:68;;;;-1:-1:-1;;;21919:68:0;;;;;;;:::i;:::-;27378:14:::1;::::0;-1:-1:-1;;;27378:14:0;::::1;;;27377:15;27369:51;;;::::0;-1:-1:-1;;;27369:51:0;;8552:2:1;27369:51:0::1;::::0;::::1;8534:21:1::0;8591:2;8571:18;;;8564:30;-1:-1:-1;;;8610:18:1;;;8603:53;8673:18;;27369:51:0::1;8350:347:1::0;27369:51:0::1;27458:4;27431:33;::::0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;27431:40:0::1;27467:4;27431:40;::::0;;27482:15:::1;:96:::0;;-1:-1:-1;;;;;;27482:96:0::1;27525:42;27482:96:::0;;::::1;::::0;;;27589:64:::1;::::0;27458:4;27639:13:::1;12227:12:::0;;;12139:108;27589:64:::1;27692:15;;;;;;;;;-1:-1:-1::0;;;;;27692:15:0::1;-1:-1:-1::0;;;;;27692:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27680:49:0::1;;27752:4;27772:15;;;;;;;;;-1:-1:-1::0;;;;;27772:15:0::1;-1:-1:-1::0;;;;;27772:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27680:125;::::0;-1:-1:-1;;;;;;27680:125:0::1;::::0;;;;;;-1:-1:-1;;;;;9188:15:1;;;27680:125:0::1;::::0;::::1;9170:34:1::0;9240:15;;9220:18;;;9213:43;9105:18;;27680:125:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27664:13;:141:::0;;-1:-1:-1;;;;;;27664:141:0::1;-1:-1:-1::0;;;;;27664:141:0;;::::1;;::::0;;27816:15:::1;::::0;::::1;:31;27855:21;27900:4;27920:24;27900:4:::0;27920:9:::1;:24::i;:::-;27959:1;27975::::0;27991:7:::1;21780:6:::0;;-1:-1:-1;;;;;21780:6:0;;21707:87;27991:7:::1;28013:15;27816:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28057:13:0::1;::::0;28088:15:::1;::::0;28050:71:::1;::::0;-1:-1:-1;;;28050:71:0;;-1:-1:-1;;;;;28088:15:0;;::::1;28050:71;::::0;::::1;10364:51:1::0;-1:-1:-1;;10431:18:1;;;10424:34;28057:13:0;::::1;::::0;-1:-1:-1;28050:29:0::1;::::0;10337:18:1;;28050:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28132:11:0::1;:18:::0;;-1:-1:-1;;;;28161:21:0;-1:-1:-1;;;28161:21:0;;;28206:12:::1;28193:10;:25:::0;;;-1:-1:-1;28229:38:0;;-1:-1:-1;;28229:38:0::1;;::::0;;::::1;::::0;;;::::1;::::0;;28288:2:::1;28278:7;:12:::0;28312:2:::1;28301:8;:13:::0;28332:15:::1;::::0;::::1;::::0;-1:-1:-1;;28332:15:0::1;27314:1041::o:0;34848:442::-;34927:16;;-1:-1:-1;;;;;34927:16:0;34913:10;:30;;:55;;-1:-1:-1;21780:6:0;;-1:-1:-1;;;;;21780:6:0;34947:10;:21;34913:55;34891:134;;;;-1:-1:-1;;;34891:134:0;;11719:2:1;34891:134:0;;;11701:21:1;11758:2;11738:18;;;11731:30;11797:31;11777:18;;;11770:59;11846:18;;34891:134:0;11517:353:1;34891:134:0;35036:28;35067:24;35085:4;35067:9;:24::i;:::-;35036:55;;35104:38;35121:20;35104:16;:38::i;:::-;35182:21;35218:22;;35214:69;;35257:14;:12;:14::i;:::-;34880:410;;34848:442::o;11238:104::-;11294:13;11327:7;11320:14;;;;;:::i;15647:475::-;10105:10;15765:4;15809:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15809:34:0;;;;;;;;;;15876:35;;;;15854:122;;;;-1:-1:-1;;;15854:122:0;;12077:2:1;15854:122:0;;;12059:21:1;12116:2;12096:18;;;12089:30;12155:34;12135:18;;;12128:62;-1:-1:-1;;;12206:18:1;;;12199:35;12251:19;;15854:122:0;11875:401:1;15854:122:0;16012:67;10105:10;16035:7;16063:15;16044:16;:34;16012:8;:67::i;:::-;-1:-1:-1;16110:4:0;;15647:475;-1:-1:-1;;;15647:475:0:o;12666:200::-;12777:4;12794:42;10105:10;12818:9;12829:6;12794:9;:42::i;29587:219::-;21780:6;;-1:-1:-1;;;;;21780:6:0;10105:10;21927:23;21919:68;;;;-1:-1:-1;;;21919:68:0;;;;;;;:::i;:::-;29669:1:::1;29659:6;:11;;29651:54;;;::::0;-1:-1:-1;;;29651:54:0;;12483:2:1;29651:54:0::1;::::0;::::1;12465:21:1::0;12522:2;12502:18;;;12495:30;12561:32;12541:18;;;12534:60;12611:18;;29651:54:0::1;12281:354:1::0;29651:54:0::1;29752:4;29742:6;29726:13;12227:12:::0;;;12139:108;29726:13:::1;:22;;;;:::i;:::-;29725:31;;;;:::i;:::-;29716:6;:40:::0;;;29772:26:::1;::::0;1901:25:1;;;29772:26:0::1;::::0;1889:2:1;1874:18;29772:26:0::1;1755:177:1::0;30064:332:0;21780:6;;-1:-1:-1;;;;;21780:6:0;10105:10;21927:23;21919:68;;;;-1:-1:-1;;;21919:68:0;;;;;;;:::i;:::-;30252:5:::1;30232:16;30216:13;12227:12:::0;;;12139:108;30216:13:::1;:32;;;;:::i;:::-;30215:42;;;;:::i;:::-;30192:20;:65:::0;30322:5:::1;30308:10:::0;30292:13:::1;12227:12:::0;;;12139:108;30292:13:::1;:26;;;;:::i;:::-;30291:36;;;;:::i;:::-;30268:20;:59:::0;30343:45:::1;::::0;;7024:25:1;;;7080:2;7065:18;;7058:34;;;30343:45:0::1;::::0;6997:18:1;30343:45:0::1;6850:248:1::0;31550:178:0;21780:6;;-1:-1:-1;;;;;21780:6:0;10105:10;21927:23;21919:68;;;;-1:-1:-1;;;21919:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31636:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:36;;-1:-1:-1;;31636:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;31688:32;;12808:51:1;;;12875:18;;;12868:50;31688:32:0::1;::::0;12781:18:1;31688:32:0::1;12640:284:1::0;22616:238:0;21780:6;;-1:-1:-1;;;;;21780:6:0;10105:10;21927:23;21919:68;;;;-1:-1:-1;;;21919:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22719:22:0;::::1;22697:110;;;::::0;-1:-1:-1;;;22697:110:0;;13131:2:1;22697:110:0::1;::::0;::::1;13113:21:1::0;13170:2;13150:18;;;13143:30;13209:34;13189:18;;;13182:62;-1:-1:-1;;;13260:18:1;;;13253:36;13306:19;;22697:110:0::1;12929:402:1::0;22697:110:0::1;22818:28;22837:8;22818:18;:28::i;:::-;22616:238:::0;:::o;31133:187::-;31203:16;;-1:-1:-1;;;;;31203:16:0;31189:10;:30;31181:72;;;;-1:-1:-1;;;31181:72:0;;11719:2:1;31181:72:0;;;11701:21:1;11758:2;11738:18;;;11731:30;11797:31;11777:18;;;11770:59;11846:18;;31181:72:0;11517:353:1;31181:72:0;31264:16;;:48;;-1:-1:-1;;;;;31264:16:0;;;;31290:21;31264:48;;;;;:16;:48;:16;:48;31290:21;31264:16;:48;;;;;;;;;;;;;;;;;;;31328:214;21780:6;;-1:-1:-1;;;;;21780:6:0;10105:10;21927:23;21919:68;;;;-1:-1:-1;;;21919:68:0;;;;;;;:::i;:::-;31442:9:::1;31437:98;31457:15:::0;;::::1;31437:98;;;31517:6;31494:11;:20;31506:4;;31511:1;31506:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;31494:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;31494:20:0;:29;;-1:-1:-1;;31494:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31474:3;::::1;::::0;::::1;:::i;:::-;;;;31437:98;;;;31328:214:::0;;;:::o;19430:380::-;-1:-1:-1;;;;;19566:19:0;;19558:68;;;;-1:-1:-1;;;19558:68:0;;13810:2:1;19558:68:0;;;13792:21:1;13849:2;13829:18;;;13822:30;13888:34;13868:18;;;13861:62;-1:-1:-1;;;13939:18:1;;;13932:34;13983:19;;19558:68:0;13608:400:1;19558:68:0;-1:-1:-1;;;;;19645:21:0;;19637:68;;;;-1:-1:-1;;;19637:68:0;;14215:2:1;19637:68:0;;;14197:21:1;14254:2;14234:18;;;14227:30;14293:34;14273:18;;;14266:62;-1:-1:-1;;;14344:18:1;;;14337:32;14386:19;;19637:68:0;14013:398:1;19637:68:0;-1:-1:-1;;;;;19718:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19770:32;;1901:25:1;;;19770:32:0;;1874:18:1;19770:32:0;;;;;;;19430:380;;;:::o;32229:2293::-;-1:-1:-1;;;;;32361:18:0;;32353:68;;;;-1:-1:-1;;;32353:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32440:16:0;;32432:64;;;;-1:-1:-1;;;32432:64:0;;;;;;;:::i;:::-;32524:1;32515:6;:10;32507:64;;;;-1:-1:-1;;;32507:64:0;;15428:2:1;32507:64:0;;;15410:21:1;15467:2;15447:18;;;15440:30;15506:34;15486:18;;;15479:62;-1:-1:-1;;;15557:18:1;;;15550:39;15606:19;;32507:64:0;15226:405:1;32507:64:0;32582:17;32626:7;21780:6;;-1:-1:-1;;;;;21780:6:0;;21707:87;32626:7;-1:-1:-1;;;;;32618:15:0;:4;-1:-1:-1;;;;;32618:15:0;;;:32;;;;-1:-1:-1;21780:6:0;;-1:-1:-1;;;;;32637:13:0;;;21780:6;;32637:13;;32618:32;:43;;;;-1:-1:-1;32655:6:0;;-1:-1:-1;;;32655:6:0;;;;32654:7;32618:43;32614:1737;;;32682:10;;-1:-1:-1;;;32682:10:0;;;;32678:99;;;-1:-1:-1;;;;;32720:17:0;;;;;;:11;:17;;;;;;;;;:36;;-1:-1:-1;;;;;;32741:15:0;;;;;;:11;:15;;;;;;;;32720:36;32712:49;;;;-1:-1:-1;;;32712:49:0;;15838:2:1;32712:49:0;;;15820:21:1;-1:-1:-1;15857:18:1;;;15850:29;15896:18;;32712:49:0;15636:284:1;32712:49:0;32805:28;32829:3;32805:19;32816:7;;32805:6;:10;;:19;;;;:::i;:::-;:23;;:28::i;:::-;32880:13;;32793:40;;-1:-1:-1;;;;;;32872:21:0;;;32880:13;;32872:21;:72;;;;-1:-1:-1;32928:15:0;;-1:-1:-1;;;;;32914:30:0;;;32928:15;;32914:30;;32872:72;:116;;;;-1:-1:-1;;;;;;32966:22:0;;;;;;:18;:22;;;;;;;;32965:23;32872:116;32850:512;;;33041:6;;33031;:16;;33023:48;;;;-1:-1:-1;;;33023:48:0;;16127:2:1;33023:48:0;;;16109:21:1;16166:2;16146:18;;;16139:30;-1:-1:-1;;;16185:18:1;;;16178:49;16244:18;;33023:48:0;15925:343:1;33023:48:0;33146:8;;33136:6;33120:13;33130:2;33120:9;:13::i;:::-;:22;;;;:::i;:::-;:34;;33090:134;;;;-1:-1:-1;;;33090:134:0;;16475:2:1;33090:134:0;;;16457:21:1;16514:2;16494:18;;;16487:30;16553:28;16533:18;;;16526:56;16599:18;;33090:134:0;16273:350:1;33090:134:0;33266:12;33249:10;;33262:1;33249:14;;;;:::i;:::-;:29;33245:102;;;34776:20;;34824:8;33303:24;;;;;;33388:13;;-1:-1:-1;;;;;33382:19:0;;;33388:13;;33382:19;;;;:46;;-1:-1:-1;;;;;;33406:22:0;;;;;;:18;:22;;;;;;;;33405:23;33382:46;33378:221;;;33505:8;;33495:6;33479:13;33489:2;33479:9;:13::i;:::-;:22;;;;:::i;:::-;:34;;33449:134;;;;-1:-1:-1;;;33449:134:0;;16475:2:1;33449:134:0;;;16457:21:1;16514:2;16494:18;;;16487:30;16553:28;16533:18;;;16526:56;16599:18;;33449:134:0;16273:350:1;33449:134:0;33625:13;;-1:-1:-1;;;;;33619:19:0;;;33625:13;;33619:19;:44;;;;-1:-1:-1;;;;;;33642:21:0;;33658:4;33642:21;;33619:44;33615:126;;;33696:29;33721:3;33696:20;33707:8;;33696:6;:10;;:20;;;;:::i;:29::-;33684:41;;33615:126;33757:28;33788:24;33806:4;33788:9;:24::i;:::-;33850:6;;33757:55;;-1:-1:-1;;;;33850:6:0;;;;33849:7;:47;;;;-1:-1:-1;33883:13:0;;-1:-1:-1;;;;;33877:19:0;;;33883:13;;33877:19;33849:47;:79;;;;-1:-1:-1;33917:11:0;;-1:-1:-1;;;33917:11:0;;;;33849:79;:143;;;;;33972:20;;33949;:43;33849:143;:203;;;;-1:-1:-1;34013:15:0;;34039:12;34013:39;;;;:15;;:39;;33849:203;33827:513;;;34087:65;34104:47;34108:20;34130;;34104:3;:47::i;:::-;34087:16;:65::i;:::-;34200:21;34244:22;;34240:85;;34291:14;:12;:14::i;:::-;34068:272;33827:513;32663:1688;32614:1737;34367:13;;34363:93;;34397:47;34413:4;34427;34434:9;34397:15;:47::i;:::-;34466:48;34482:4;34488:2;34492:21;:6;34503:9;34492:10;:21::i;:::-;34466:15;:48::i;23014:191::-;23107:6;;;-1:-1:-1;;;;;23124:17:0;;;-1:-1:-1;;;;;;23124:17:0;;;;;;;23157:40;;23107:6;;;23124:17;23107:6;;23157:40;;23088:16;;23157:40;23077:128;23014:191;:::o;35298:532::-;26602:6;:13;;-1:-1:-1;;;;26602:13:0;-1:-1:-1;;;26602:13:0;;;35376:15:::1;:38:::0;;::::1;35401:12;35376:38;-1:-1:-1::0;;35376:38:0;;::::1;;::::0;;35449:16:::1;::::0;;35463:1:::1;35449:16:::0;;;;;::::1;::::0;;-1:-1:-1;;35449:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;35449:16:0::1;35425:40;;35494:4;35476;35481:1;35476:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35476:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;35520:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;35520:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;35476:7;;35520:22;;;;;:15;:22:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35510:4;35515:1;35510:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35510:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;35585:15:::1;::::0;35553:62:::1;::::0;35570:4:::1;::::0;35585:15:::1;35603:11:::0;35553:8:::1;:62::i;:::-;35626:15;::::0;:196:::1;::::0;-1:-1:-1;;;35626:196:0;;-1:-1:-1;;;;;35626:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;35707:11;;35626:15:::1;::::0;35749:4;;35776::::1;::::0;35796:15:::1;::::0;35626:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;26638:6:0;:14;;-1:-1:-1;;;;26638:14:0;;;-1:-1:-1;;;;35298:532:0:o;35838:176::-;35926:16;;35918:88;;35881:12;;-1:-1:-1;;;;;35926:16:0;;35956:21;;35881:12;35918:88;35881:12;35918:88;35956:21;35926:16;35918:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3384:98;3442:7;3469:5;3473:1;3469;:5;:::i;:::-;3462:12;3384:98;-1:-1:-1;;;3384:98:0:o;3783:::-;3841:7;3868:5;3872:1;3868;:5;:::i;34530:107::-;34587:7;34619:1;34615;:5;34614:15;;34628:1;34614:15;;;-1:-1:-1;34624:1:0;34530:107;-1:-1:-1;34530:107:0:o;16612:770::-;-1:-1:-1;;;;;16752:20:0;;16744:70;;;;-1:-1:-1;;;16744:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16833:23:0;;16825:71;;;;-1:-1:-1;;;16825:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16993:17:0;;16969:21;16993:17;;;;;;;;;;;17043:23;;;;17021:111;;;;-1:-1:-1;;;17021:111:0;;18157:2:1;17021:111:0;;;18139:21:1;18196:2;18176:18;;;18169:30;18235:34;18215:18;;;18208:62;-1:-1:-1;;;18286:18:1;;;18279:36;18332:19;;17021:111:0;17955:402:1;17021:111:0;-1:-1:-1;;;;;17168:17:0;;;:9;:17;;;;;;;;;;;17188:22;;;17168:42;;17232:20;;;;;;;;:30;;17204:6;;17168:9;17232:30;;17204:6;;17232:30;:::i;:::-;;;;;;;;17297:9;-1:-1:-1;;;;;17280:35:0;17289:6;-1:-1:-1;;;;;17280:35:0;;17308:6;17280:35;;;;1901:25:1;;1889:2;1874:18;;1755:177;17280:35:0;;;;;;;;17328:46;20410:125;3027:98;3085:7;3112:5;3116:1;3112;:5;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1937:248::-;2005:6;2013;2066:2;2054:9;2045:7;2041:23;2037:32;2034:52;;;2082:1;2079;2072:12;2034:52;-1:-1:-1;;2105:23:1;;;2175:2;2160:18;;;2147:32;;-1:-1:-1;1937:248:1:o;2190:456::-;2267:6;2275;2283;2336:2;2324:9;2315:7;2311:23;2307:32;2304:52;;;2352:1;2349;2342:12;2304:52;2391:9;2378:23;2410:31;2435:5;2410:31;:::i;:::-;2460:5;-1:-1:-1;2517:2:1;2502:18;;2489:32;2530:33;2489:32;2530:33;:::i;:::-;2190:456;;2582:7;;-1:-1:-1;;;2636:2:1;2621:18;;;;2608:32;;2190:456::o;2840:255::-;2907:6;2960:2;2948:9;2939:7;2935:23;2931:32;2928:52;;;2976:1;2973;2966:12;2928:52;3015:9;3002:23;3034:31;3059:5;3034:31;:::i;3352:180::-;3411:6;3464:2;3452:9;3443:7;3439:23;3435:32;3432:52;;;3480:1;3477;3470:12;3432:52;-1:-1:-1;3503:23:1;;3352:180;-1:-1:-1;3352:180:1:o;3745:388::-;3813:6;3821;3874:2;3862:9;3853:7;3849:23;3845:32;3842:52;;;3890:1;3887;3880:12;3842:52;3929:9;3916:23;3948:31;3973:5;3948:31;:::i;:::-;3998:5;-1:-1:-1;4055:2:1;4040:18;;4027:32;4068:33;4027:32;4068:33;:::i;:::-;4120:7;4110:17;;;3745:388;;;;;:::o;4138:118::-;4224:5;4217:13;4210:21;4203:5;4200:32;4190:60;;4246:1;4243;4236:12;4261:382;4326:6;4334;4387:2;4375:9;4366:7;4362:23;4358:32;4355:52;;;4403:1;4400;4393:12;4355:52;4442:9;4429:23;4461:31;4486:5;4461:31;:::i;:::-;4511:5;-1:-1:-1;4568:2:1;4553:18;;4540:32;4581:30;4540:32;4581:30;:::i;4648:750::-;4740:6;4748;4756;4809:2;4797:9;4788:7;4784:23;4780:32;4777:52;;;4825:1;4822;4815:12;4777:52;4865:9;4852:23;4894:18;4935:2;4927:6;4924:14;4921:34;;;4951:1;4948;4941:12;4921:34;4989:6;4978:9;4974:22;4964:32;;5034:7;5027:4;5023:2;5019:13;5015:27;5005:55;;5056:1;5053;5046:12;5005:55;5096:2;5083:16;5122:2;5114:6;5111:14;5108:34;;;5138:1;5135;5128:12;5108:34;5193:7;5186:4;5176:6;5173:1;5169:14;5165:2;5161:23;5157:34;5154:47;5151:67;;;5214:1;5211;5204:12;5151:67;5245:4;5237:13;;;;-1:-1:-1;5269:6:1;-1:-1:-1;;5310:20:1;;5297:34;5340:28;5297:34;5340:28;:::i;:::-;5387:5;5377:15;;;4648:750;;;;;:::o;5403:380::-;5482:1;5478:12;;;;5525;;;5546:61;;5600:4;5592:6;5588:17;5578:27;;5546:61;5653:2;5645:6;5642:14;5622:18;5619:38;5616:161;;5699:10;5694:3;5690:20;5687:1;5680:31;5734:4;5731:1;5724:15;5762:4;5759:1;5752:15;5788:356;5990:2;5972:21;;;6009:18;;;6002:30;6068:34;6063:2;6048:18;;6041:62;6135:2;6120:18;;5788:356::o;7512:127::-;7573:10;7568:3;7564:20;7561:1;7554:31;7604:4;7601:1;7594:15;7628:4;7625:1;7618:15;7644:125;7709:9;;;7730:10;;;7727:36;;;7743:18;;:::i;8702:251::-;8772:6;8825:2;8813:9;8804:7;8800:23;8796:32;8793:52;;;8841:1;8838;8831:12;8793:52;8873:9;8867:16;8892:31;8917:5;8892:31;:::i;9267:607::-;-1:-1:-1;;;;;9626:15:1;;;9608:34;;9673:2;9658:18;;9651:34;;;;9716:2;9701:18;;9694:34;;;;9759:2;9744:18;;9737:34;;;;9808:15;;;9802:3;9787:19;;9780:44;9588:3;9840:19;;9833:35;;;;9557:3;9542:19;;9267:607::o;9879:306::-;9967:6;9975;9983;10036:2;10024:9;10015:7;10011:23;10007:32;10004:52;;;10052:1;10049;10042:12;10004:52;10081:9;10075:16;10065:26;;10131:2;10120:9;10116:18;10110:25;10100:35;;10175:2;10164:9;10160:18;10154:25;10144:35;;9879:306;;;;;:::o;10469:245::-;10536:6;10589:2;10577:9;10568:7;10564:23;10560:32;10557:52;;;10605:1;10602;10595:12;10557:52;10637:9;10631:16;10656:28;10678:5;10656:28;:::i;11122:168::-;11195:9;;;11226;;11243:15;;;11237:22;;11223:37;11213:71;;11264:18;;:::i;11295:217::-;11335:1;11361;11351:132;;11405:10;11400:3;11396:20;11393:1;11386:31;11440:4;11437:1;11430:15;11468:4;11465:1;11458:15;11351:132;-1:-1:-1;11497:9:1;;11295:217::o;13336:127::-;13397:10;13392:3;13388:20;13385:1;13378:31;13428:4;13425:1;13418:15;13452:4;13449:1;13442:15;13468:135;13507:3;13528:17;;;13525:43;;13548:18;;:::i;:::-;-1:-1:-1;13595:1:1;13584:13;;13468:135::o;14416:401::-;14618:2;14600:21;;;14657:2;14637:18;;;14630:30;14696:34;14691:2;14676:18;;14669:62;-1:-1:-1;;;14762:2:1;14747:18;;14740:35;14807:3;14792:19;;14416:401::o;14822:399::-;15024:2;15006:21;;;15063:2;15043:18;;;15036:30;15102:34;15097:2;15082:18;;15075:62;-1:-1:-1;;;15168:2:1;15153:18;;15146:33;15211:3;15196:19;;14822:399::o;16760:980::-;17022:4;17070:3;17059:9;17055:19;17101:6;17090:9;17083:25;17127:2;17165:6;17160:2;17149:9;17145:18;17138:34;17208:3;17203:2;17192:9;17188:18;17181:31;17232:6;17267;17261:13;17298:6;17290;17283:22;17336:3;17325:9;17321:19;17314:26;;17375:2;17367:6;17363:15;17349:29;;17396:1;17406:195;17420:6;17417:1;17414:13;17406:195;;;17485:13;;-1:-1:-1;;;;;17481:39:1;17469:52;;17576:15;;;;17541:12;;;;17517:1;17435:9;17406:195;;;-1:-1:-1;;;;;;;17657:32:1;;;;17652:2;17637:18;;17630:60;-1:-1:-1;;;17721:3:1;17706:19;17699:35;17618:3;16760:980;-1:-1:-1;;;16760:980:1:o;18362:128::-;18429:9;;;18450:11;;;18447:37;;;18464:18;;:::i

Swarm Source

ipfs://7846ce8dc25d35a0ea9f2d159cf17c35c8636a9d1f116577b202cac9f12f6b62
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.