ETH Price: $3,410.00 (-1.53%)
Gas: 11 Gwei

Token

Banana/11 (BANANA/11)
 

Overview

Max Total Supply

1,000,000 BANANA/11

Holders

45

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
paradox.eth
Balance
18,396.935512449849738669 BANANA/11

Value
$0.00
0x8bc924a4c07b4369a58cf35f6dc3ba16c41fc999
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:
BANANA11

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-11
*/

// SPDX-License-Identifier: MIT     
// https://t.me/BANANA11token                                                                          
                                                    
pragma solidity 0.8.9;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

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


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    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 updated 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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

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

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

        return c;
    }

    /**
     * @dev Returns the 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 sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

contract 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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}



library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


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

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

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

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

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

contract BANANA11 is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping(address => bool) public bots;
    bool public transferDelayEnabled = true;
    bool public botBlockRenounced = false;

    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyMarketingFee;
    
    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellMarketingFee;
    
    uint256 public tokensForLiquidity;
    uint256 public tokensForMarketing;

    uint256 public earlyBuyFee;
    uint256 public earlySellFee;

    bool public earlyFees = true;
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event IncludeInFees(address indexed account);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Banana/11", "BANANA/11") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        // 100 = 1%
        uint256 _buyLiquidityFee = 200;
        uint256 _buyMarketingFee = 200;

        uint256 _sellLiquidityFee = 200;
        uint256 _sellMarketingFee = 200;

        uint256 totalSupply = 1 * 1e6 * 1e18;
        
        maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        buyLiquidityFee = _buyLiquidityFee;
        buyMarketingFee = _buyMarketingFee;
        buyTotalFees = buyLiquidityFee + buyMarketingFee;
        
        sellLiquidityFee = _sellLiquidityFee;
        sellMarketingFee = _sellMarketingFee;
        sellTotalFees = sellLiquidityFee + sellMarketingFee;
        
        marketingWallet = address(owner()); // set as marketingWallet wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(marketingWallet), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(marketingWallet), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }

    // once enabled, can never be turned off
    function enableTrading(uint256 _earlyBuyFee, uint256 _earlySellFee) external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        earlyBuyFee = _earlyBuyFee;
        earlySellFee = _earlySellFee;
    }

    function endExtraFees() external onlyOwner {
        earlyFees = false;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees( uint256 _liquidityFee, uint256 _marketingFee) external onlyOwner {
        buyLiquidityFee = _liquidityFee;
        buyMarketingFee = _marketingFee;
        buyTotalFees = buyLiquidityFee + buyMarketingFee;
        require(buyTotalFees <= 600, "Must keep fees at 6% or less");
    }
    
    function updateSellFees(uint256 _liquidityFee, uint256 _marketingFee) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellMarketingFee = _marketingFee;
        sellTotalFees = sellLiquidityFee + sellMarketingFee;
        require(sellTotalFees <= 600, "Must keep fees at 6% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function includeInFees(address account) public onlyOwner {
        require(_isExcludedFromFees[account], "Account is already included in fees");
        _isExcludedFromFees[account] = false;
        emit IncludeInFees(account);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function updateMarketingWallet(address newWallet) external onlyOwner {
        emit marketingWalletUpdated(newWallet, marketingWallet);
        marketingWallet = newWallet;
    }
    
    function withdrawEth(uint256 amount, address payable to) external onlyOwner {
        require(amount <= address(this).balance, "Insufficient balance");
        to.transfer(amount);
    }

    function withdrawErc20(address tokenAddress, uint256 amount, address to) external onlyOwner {
        IERC20 token = IERC20(tokenAddress);
        require(amount <= token.balanceOf(address(this)), "Insufficient balance");
        token.transfer(to, amount);
    }

    function renounceBotBlock() public onlyOwner {
        botBlockRenounced = true;
    }

    function botBlock(address account) public onlyOwner {
        require(!botBlockRenounced, "Blocking bot rights renounced");
        require(account != address(uniswapV2Pair));
        require(account != address(uniswapV2Router));
        bots[account] = true;
    }

    function botBlockMultiples(address[] calldata accounts) public onlyOwner {
        require(!botBlockRenounced, "Blocking bot rights renounced");
        for(uint256 i = 0; i < accounts.length; i++) {
            require(accounts[i] != address(uniswapV2Pair));
            require(accounts[i] != address(uniswapV2Router));
            bots[accounts[i]] = true;
        }
    }

    function botUnblock(address account) public onlyOwner {
        bots[account] = false;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    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");
        require(!bots[from] && !bots[to], "Your account is blockListed!");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
 
                }
                
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
        
        
        uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }
        
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            uint256 extraFee = 0;
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                if(earlyFees) { extraFee = earlySellFee;}
                fees = amount.mul(sellTotalFees + extraFee).div(10000);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;

                amount -= fees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                if(earlyFees) { extraFee = earlyBuyFee;}
                fees = amount.mul(buyTotalFees + extraFee).div(10000);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;

                amount -= fees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
            
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            marketingWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing;
        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
                
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
        
        
        (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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"IncludeInFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"botBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"botBlockMultiples","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"botBlockRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"botUnblock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_earlyBuyFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellFee","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endExtraFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceBotBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"to","type":"address"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600a805462ffffff19166001908117909155600d805461ffff1916821790556018805460ff191690911790553480156200003d57600080fd5b506040518060400160405280600981526020016842616e616e612f313160b81b8152506040518060400160405280600981526020016842414e414e412f313160b81b81525081600390805190602001906200009a92919062000739565b508051620000b090600490602084019062000739565b5050506000620000c56200045760201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d620001358160016200045b565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200017b57600080fd5b505afa15801562000190573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b69190620007df565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ff57600080fd5b505afa15801562000214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023a9190620007df565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200028357600080fd5b505af115801562000298573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002be9190620007df565b6001600160a01b031660a0819052620002d99060016200045b565b60a051620002e9906001620004d5565b60c880808069d3c21bcecceda10000006103e86200030982601462000820565b62000315919062000842565b6007556103e86200032882601462000820565b62000334919062000842565b6009556127106200034782600562000820565b62000353919062000842565b600855600f85905560108490556200036c848662000865565b600e556012839055601382905562000385828462000865565b601155600554600680546001600160a01b0319166001600160a01b039092169182179055620003b690600162000529565b620003c330600162000529565b620003d261dead600162000529565b600654620003eb906001600160a01b0316600162000529565b6200040a620004026005546001600160a01b031690565b60016200045b565b620004173060016200045b565b6200042661dead60016200045b565b6006546200043f906001600160a01b031660016200045b565b6200044b3382620005d3565b505050505050620008bd565b3390565b6005546001600160a01b03163314620004aa5760405162461bcd60e51b815260206004820181905260248201526000805160206200434983398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005745760405162461bcd60e51b81526020600482018190526024820152600080516020620043498339815191526044820152606401620004a1565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200062b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004a1565b6200064781600254620006cf60201b6200207e1790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200067a9183906200207e620006cf821b17901c565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b600080620006de838562000865565b905083811015620007325760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004a1565b9392505050565b828054620007479062000880565b90600052602060002090601f0160209004810192826200076b5760008555620007b6565b82601f106200078657805160ff1916838001178555620007b6565b82800160010185558215620007b6579182015b82811115620007b657825182559160200191906001019062000799565b50620007c4929150620007c8565b5090565b5b80821115620007c45760008155600101620007c9565b600060208284031215620007f257600080fd5b81516001600160a01b03811681146200073257600080fd5b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200083d576200083d6200080a565b500290565b6000826200086057634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156200087b576200087b6200080a565b500190565b600181811c908216806200089557607f821691505b60208210811415620008b757634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051613a12620009376000396000818161063901528181610e9b0152818161115a0152818161163201526125c501526000818161049b01528181610eda015281816111bf01528181612587015281816131e1015281816132a9015281816132fe0152818161337801526133f90152613a126000f3fe6080604052600436106103b15760003560e01c80638fc85959116101e7578063bbc0c7421161010d578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610b14578063f2fde38b14610b2a578063f637434214610b4a578063f8b45b0514610b6057600080fd5b8063d85ba06314610a8d578063dd62ed3e14610aa3578063e2f4560514610ae9578063e884f26014610aff57600080fd5b8063c876d0b9116100dc578063c876d0b914610a1d578063c8c8ebe414610a37578063d257b34f14610a4d578063d7726e8a14610a6d57600080fd5b8063bbc0c7421461098e578063bfd79284146109ad578063c0246668146109dd578063c18bc195146109fd57600080fd5b8063a457c2d711610185578063aacebbe311610154578063aacebbe314610908578063ae0a687514610928578063afb5cb671461093e578063b62496f51461095e57600080fd5b8063a457c2d714610892578063a46e2ee8146108b2578063a7bd8976146108c8578063a9059cbb146108e857600080fd5b806395d89b41116101c157806395d89b41146108285780639a7a23d61461083d578063a158657c1461085d578063a302e4e61461087d57600080fd5b80638fc85959146107d857806392136913146107f2578063924de9b71461080857600080fd5b8063313ce567116102d75780636ddd17131161026a5780637571336a116102395780637571336a1461076457806375f0a874146107845780637bce5a04146107a45780638da5cb5b146107ba57600080fd5b80636ddd1713146106e457806370a0823114610704578063715018a61461073a578063751039fc1461074f57600080fd5b80634a62bb65116102a65780634a62bb651461065b5780634fbee1931461067557806366ca9b83146106ae5780636a486a8e146106ce57600080fd5b8063313ce567146105d657806339509351146105f257806342405d131461061257806349bd5a5e1461062757600080fd5b806318160ddd1161034f578063203e727e1161031e578063203e727e1461056057806323b872dd1461058057806327c8f835146105a05780632cd21ebb146105b657600080fd5b806318160ddd146104f55780631a8145bb146105145780631bb9d7771461052a5780631f3fed8f1461054a57600080fd5b80631027ff871161038b5780631027ff871461043a57806310d5de53146104595780631694505e1461048957806316a2f82a146104d557600080fd5b806302dbd8f8146103bd57806306fdde03146103df578063095ea7b31461040a57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103dd6103d83660046134a7565b610b76565b005b3480156103eb57600080fd5b506103f4610c31565b60405161040191906134c9565b60405180910390f35b34801561041657600080fd5b5061042a610425366004613554565b610cc3565b6040519015158152602001610401565b34801561044657600080fd5b50600d5461042a90610100900460ff1681565b34801561046557600080fd5b5061042a610474366004613580565b601a6020526000908152604090205460ff1681565b34801561049557600080fd5b506104bd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610401565b3480156104e157600080fd5b506103dd6104f0366004613580565b610cda565b34801561050157600080fd5b506002545b604051908152602001610401565b34801561052057600080fd5b5061050660145481565b34801561053657600080fd5b506103dd610545366004613580565b610df9565b34801561055657600080fd5b5061050660155481565b34801561056c57600080fd5b506103dd61057b36600461359d565b610f3b565b34801561058c57600080fd5b5061042a61059b3660046135b6565b611044565b3480156105ac57600080fd5b506104bd61dead81565b3480156105c257600080fd5b506103dd6105d13660046135f7565b6110ad565b3480156105e257600080fd5b5060405160128152602001610401565b3480156105fe57600080fd5b5061042a61060d366004613554565b61128e565b34801561061e57600080fd5b506103dd6112c4565b34801561063357600080fd5b506104bd7f000000000000000000000000000000000000000000000000000000000000000081565b34801561066757600080fd5b50600a5461042a9060ff1681565b34801561068157600080fd5b5061042a610690366004613580565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156106ba57600080fd5b506103dd6106c93660046134a7565b61133a565b3480156106da57600080fd5b5061050660115481565b3480156106f057600080fd5b50600a5461042a9062010000900460ff1681565b34801561071057600080fd5b5061050661071f366004613580565b6001600160a01b031660009081526020819052604090205490565b34801561074657600080fd5b506103dd6113ec565b34801561075b57600080fd5b5061042a61148b565b34801561077057600080fd5b506103dd61077f36600461367a565b6114e6565b34801561079057600080fd5b506006546104bd906001600160a01b031681565b3480156107b057600080fd5b5061050660105481565b3480156107c657600080fd5b506005546001600160a01b03166104bd565b3480156107e457600080fd5b5060185461042a9060ff1681565b3480156107fe57600080fd5b5061050660135481565b34801561081457600080fd5b506103dd6108233660046136b3565b611559565b34801561083457600080fd5b506103f46115d9565b34801561084957600080fd5b506103dd61085836600461367a565b6115e8565b34801561086957600080fd5b506103dd6108783660046136d0565b6116e2565b34801561088957600080fd5b506103dd6117b0565b34801561089e57600080fd5b5061042a6108ad366004613554565b611804565b3480156108be57600080fd5b5061050660165481565b3480156108d457600080fd5b506103dd6108e3366004613580565b611853565b3480156108f457600080fd5b5061042a610903366004613554565b6118bc565b34801561091457600080fd5b506103dd610923366004613580565b6118c9565b34801561093457600080fd5b5061050660175481565b34801561094a57600080fd5b506103dd6109593660046136f5565b61197b565b34801561096a57600080fd5b5061042a610979366004613580565b601b6020526000908152604090205460ff1681565b34801561099a57600080fd5b50600a5461042a90610100900460ff1681565b3480156109b957600080fd5b5061042a6109c8366004613580565b600c6020526000908152604090205460ff1681565b3480156109e957600080fd5b506103dd6109f836600461367a565b611b46565b348015610a0957600080fd5b506103dd610a1836600461359d565b611bed565b348015610a2957600080fd5b50600d5461042a9060ff1681565b348015610a4357600080fd5b5061050660075481565b348015610a5957600080fd5b5061042a610a6836600461359d565b611cf5565b348015610a7957600080fd5b506103dd610a883660046134a7565b611e76565b348015610a9957600080fd5b50610506600e5481565b348015610aaf57600080fd5b50610506610abe366004613737565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610af557600080fd5b5061050660085481565b348015610b0b57600080fd5b5061042a611ef6565b348015610b2057600080fd5b50610506600f5481565b348015610b3657600080fd5b506103dd610b45366004613580565b611f51565b348015610b5657600080fd5b5061050660125481565b348015610b6c57600080fd5b5061050660095481565b6005546001600160a01b03163314610bc35760405162461bcd60e51b8152602060048201819052602482015260008051602061399883398151915260448201526064015b60405180910390fd5b60128290556013819055610bd7818361377b565b60118190556102581015610c2d5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203625206f72206c657373000000006044820152606401610bba565b5050565b606060038054610c4090613793565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6c90613793565b8015610cb95780601f10610c8e57610100808354040283529160200191610cb9565b820191906000526020600020905b815481529060010190602001808311610c9c57829003601f168201915b5050505050905090565b6000610cd03384846120e4565b5060015b92915050565b6005546001600160a01b03163314610d225760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b03811660009081526019602052604090205460ff16610db05760405162461bcd60e51b815260206004820152602360248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e206660448201527f65657300000000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b038116600081815260196020526040808220805460ff19169055517f346f6c42af1ce4b7d7951f3fa40a2fb1e78c80ab0f3d76fb4f9fec269d568f0d9190a250565b6005546001600160a01b03163314610e415760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600d54610100900460ff1615610e995760405162461bcd60e51b815260206004820152601d60248201527f426c6f636b696e6720626f74207269676874732072656e6f756e6365640000006044820152606401610bba565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161415610ed857600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161415610f1757600080fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6005546001600160a01b03163314610f835760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b670de0b6b3a76400006103e8610f9860025490565b610fa39060016137ce565b610fad91906137ed565b610fb791906137ed565b81101561102c5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201527f6c6f776572207468616e20302e312500000000000000000000000000000000006064820152608401610bba565b61103e81670de0b6b3a76400006137ce565b60075550565b600061105184848461223d565b6110a3843361109e85604051806060016040528060288152602001613970602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612c7f565b6120e4565b5060019392505050565b6005546001600160a01b031633146110f55760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600d54610100900460ff161561114d5760405162461bcd60e51b815260206004820152601d60248201527f426c6f636b696e6720626f74207269676874732072656e6f756e6365640000006044820152606401610bba565b60005b81811015611289577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168383838181106111945761119461380f565b90506020020160208101906111a99190613580565b6001600160a01b031614156111bd57600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168383838181106111f9576111f961380f565b905060200201602081019061120e9190613580565b6001600160a01b0316141561122257600080fd5b6001600c600085858581811061123a5761123a61380f565b905060200201602081019061124f9190613580565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061128181613825565b915050611150565b505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cd091859061109e908661207e565b6005546001600160a01b0316331461130c5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6005546001600160a01b031633146113825760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600f8290556010819055611396818361377b565b600e8190556102581015610c2d5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203625206f72206c657373000000006044820152606401610bba565b6005546001600160a01b031633146114345760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805473ffffffffffffffffffffffffffffffffffffffff19169055565b6005546000906001600160a01b031633146114d65760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b50600a805460ff19169055600190565b6005546001600160a01b0316331461152e5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115a15760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600a805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b606060048054610c4090613793565b6005546001600160a01b031633146116305760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156116d85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bba565b610c2d8282612cb9565b6005546001600160a01b0316331461172a5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b4782111561177a5760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610bba565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611289573d6000803e3d6000fd5b6005546001600160a01b031633146117f85760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6018805460ff19169055565b6000610cd0338461109e856040518060600160405280602581526020016139b8602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612c7f565b6005546001600160a01b0316331461189b5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000610cd033848461223d565b6005546001600160a01b031633146119115760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a36006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6005546001600160a01b031633146119c35760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015283906001600160a01b038216906370a082319060240160206040518083038186803b158015611a1d57600080fd5b505afa158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a559190613840565b831115611aa45760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610bba565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820185905282169063a9059cbb90604401602060405180830381600087803b158015611b0757600080fd5b505af1158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3f9190613859565b5050505050565b6005546001600160a01b03163314611b8e5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611c355760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b670de0b6b3a76400006103e8611c4a60025490565b611c559060056137ce565b611c5f91906137ed565b611c6991906137ed565b811015611cdd5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060448201527f302e3525000000000000000000000000000000000000000000000000000000006064820152608401610bba565b611cef81670de0b6b3a76400006137ce565b60095550565b6005546000906001600160a01b03163314611d405760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b620186a0611d4d60025490565b611d589060016137ce565b611d6291906137ed565b821015611dd75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610bba565b6103e8611de360025490565b611dee9060056137ce565b611df891906137ed565b821115611e6d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006064820152608401610bba565b50600855600190565b6005546001600160a01b03163314611ebe5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff1662010100179055601691909155601755565b6005546000906001600160a01b03163314611f415760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b50600d805460ff19169055600190565b6005546001600160a01b03163314611f995760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b0381166120155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610bba565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60008061208b838561377b565b9050838110156120dd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bba565b9392505050565b6001600160a01b03831661215f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0382166121db5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0382166123355760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610bba565b600081116123ab5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0383166000908152600c602052604090205460ff161580156123ed57506001600160a01b0382166000908152600c602052604090205460ff16155b6124395760405162461bcd60e51b815260206004820152601c60248201527f596f7572206163636f756e7420697320626c6f636b4c697374656421000000006044820152606401610bba565b8061244a5761128983836000612d0d565b600a5460ff1615612945576005546001600160a01b0384811691161480159061248157506005546001600160a01b03838116911614155b801561249557506001600160a01b03821615155b80156124ac57506001600160a01b03821661dead14155b80156124c25750600554600160a01b900460ff16155b1561294557600a54610100900460ff16612561576001600160a01b03831660009081526019602052604090205460ff168061251557506001600160a01b03821660009081526019602052604090205460ff165b6125615760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610bba565b600d5460ff16156126bc576005546001600160a01b038381169116148015906125bc57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b80156125fa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156126bc57326000908152600b602052604090205443116126a95760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60648201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000608482015260a401610bba565b326000908152600b602052604090204390555b6001600160a01b0383166000908152601b602052604090205460ff1680156126fd57506001600160a01b0382166000908152601a602052604090205460ff16155b156127f35760075481111561277a5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006064820152608401610bba565b6009546001600160a01b0383166000908152602081905260409020546127a0908361377b565b11156127ee5760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c6574206578636565646564000000000000000000000000006044820152606401610bba565b612945565b6001600160a01b0382166000908152601b602052604090205460ff16801561283457506001600160a01b0383166000908152601a602052604090205460ff16155b156128b1576007548111156127ee5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006064820152608401610bba565b6001600160a01b0382166000908152601a602052604090205460ff16612945576009546001600160a01b0383166000908152602081905260409020546128f7908361377b565b11156129455760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c6574206578636565646564000000000000000000000000006044820152606401610bba565b30600090815260208190526040902054600854811080159081906129715750600a5462010000900460ff165b80156129875750600554600160a01b900460ff16155b80156129ac57506001600160a01b0385166000908152601b602052604090205460ff16155b80156129d157506001600160a01b03851660009081526019602052604090205460ff16155b80156129f657506001600160a01b03841660009081526019602052604090205460ff16155b15612a5a57600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055612a31612ec2565b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555b6005546001600160a01b03861660009081526019602052604090205460ff600160a01b909204821615911680612aa857506001600160a01b03851660009081526019602052604090205460ff165b15612ab1575060005b60008115612c6b576001600160a01b0386166000908152601b602052604081205460ff168015612ae357506000601154115b15612b915760185460ff1615612af857506017545b612b1c612710612b1683601154612b0f919061377b565b899061306b565b90613106565b915060115460125483612b2f91906137ce565b612b3991906137ed565b60146000828254612b4a919061377b565b9091555050601154601354612b5f90846137ce565b612b6991906137ed565b60156000828254612b7a919061377b565b90915550612b8a90508287613876565b9550612c58565b6001600160a01b0388166000908152601b602052604090205460ff168015612bbb57506000600e54115b15612c585760185460ff1615612bd057506016545b612be7612710612b1683600e54612b0f919061377b565b9150600e54600f5483612bfa91906137ce565b612c0491906137ed565b60146000828254612c15919061377b565b9091555050600e54601054612c2a90846137ce565b612c3491906137ed565b60156000828254612c45919061377b565b90915550612c5590508287613876565b95505b8115612c6957612c69883084612d0d565b505b612c76878787612d0d565b50505050505050565b60008184841115612ca35760405162461bcd60e51b8152600401610bba91906134c9565b506000612cb08486613876565b95945050505050565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316612d895760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b038216612e055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610bba565b612e428160405180606001604052806026815260200161394a602691396001600160a01b0386166000908152602081905260409020549190612c7f565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612e71908261207e565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612230565b3060009081526020819052604081205490506000601554601454612ee6919061377b565b90506000821580612ef5575081155b15612eff57505050565b600854612f0d9060146137ce565b831115612f2557600854612f229060146137ce565b92505b600060028360145486612f3891906137ce565b612f4291906137ed565b612f4c91906137ed565b90506000612f5a8583613148565b905047612f668261318a565b6000612f724783613148565b90506000612f8f87612b166015548561306b90919063ffffffff16565b90506000612f9d8284613876565b6000601481905560155590508515801590612fb85750600081115b1561300b57612fc78682613372565b601454604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613058576040519150601f19603f3d011682016040523d82523d6000602084013e61305d565b606091505b505050505050505050505050565b60008261307a57506000610cd4565b600061308683856137ce565b90508261309385836137ed565b146120dd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610bba565b60006120dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613479565b60006120dd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c7f565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131bf576131bf61380f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561323857600080fd5b505afa15801561324c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613270919061388d565b816001815181106132835761328361380f565b60200260200101906001600160a01b031690816001600160a01b0316815250506132ce307f0000000000000000000000000000000000000000000000000000000000000000846120e4565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061333c9085906000908690309042906004016138aa565b600060405180830381600087803b15801561335657600080fd5b505af115801561336a573d6000803e3d6000fd5b505050505050565b61339d307f0000000000000000000000000000000000000000000000000000000000000000846120e4565b6006546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c4016060604051808303818588803b15801561344057600080fd5b505af1158015613454573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b3f919061391b565b6000818361349a5760405162461bcd60e51b8152600401610bba91906134c9565b506000612cb084866137ed565b600080604083850312156134ba57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156134f6578581018301518582016040015282016134da565b81811115613508576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6001600160a01b038116811461355157600080fd5b50565b6000806040838503121561356757600080fd5b82356135728161353c565b946020939093013593505050565b60006020828403121561359257600080fd5b81356120dd8161353c565b6000602082840312156135af57600080fd5b5035919050565b6000806000606084860312156135cb57600080fd5b83356135d68161353c565b925060208401356135e68161353c565b929592945050506040919091013590565b6000806020838503121561360a57600080fd5b823567ffffffffffffffff8082111561362257600080fd5b818501915085601f83011261363657600080fd5b81358181111561364557600080fd5b8660208260051b850101111561365a57600080fd5b60209290920196919550909350505050565b801515811461355157600080fd5b6000806040838503121561368d57600080fd5b82356136988161353c565b915060208301356136a88161366c565b809150509250929050565b6000602082840312156136c557600080fd5b81356120dd8161366c565b600080604083850312156136e357600080fd5b8235915060208301356136a88161353c565b60008060006060848603121561370a57600080fd5b83356137158161353c565b925060208401359150604084013561372c8161353c565b809150509250925092565b6000806040838503121561374a57600080fd5b82356137558161353c565b915060208301356136a88161353c565b634e487b7160e01b600052601160045260246000fd5b6000821982111561378e5761378e613765565b500190565b600181811c908216806137a757607f821691505b602082108114156137c857634e487b7160e01b600052602260045260246000fd5b50919050565b60008160001904831182151516156137e8576137e8613765565b500290565b60008261380a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060001982141561383957613839613765565b5060010190565b60006020828403121561385257600080fd5b5051919050565b60006020828403121561386b57600080fd5b81516120dd8161366c565b60008282101561388857613888613765565b500390565b60006020828403121561389f57600080fd5b81516120dd8161353c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138fa5784516001600160a01b0316835293830193918301916001016138d5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561393057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b56b8603d8531d552e7f0f957b0ba1bccb8a27bd9e237852ded69000aee94abb64736f6c634300080900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80638fc85959116101e7578063bbc0c7421161010d578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610b14578063f2fde38b14610b2a578063f637434214610b4a578063f8b45b0514610b6057600080fd5b8063d85ba06314610a8d578063dd62ed3e14610aa3578063e2f4560514610ae9578063e884f26014610aff57600080fd5b8063c876d0b9116100dc578063c876d0b914610a1d578063c8c8ebe414610a37578063d257b34f14610a4d578063d7726e8a14610a6d57600080fd5b8063bbc0c7421461098e578063bfd79284146109ad578063c0246668146109dd578063c18bc195146109fd57600080fd5b8063a457c2d711610185578063aacebbe311610154578063aacebbe314610908578063ae0a687514610928578063afb5cb671461093e578063b62496f51461095e57600080fd5b8063a457c2d714610892578063a46e2ee8146108b2578063a7bd8976146108c8578063a9059cbb146108e857600080fd5b806395d89b41116101c157806395d89b41146108285780639a7a23d61461083d578063a158657c1461085d578063a302e4e61461087d57600080fd5b80638fc85959146107d857806392136913146107f2578063924de9b71461080857600080fd5b8063313ce567116102d75780636ddd17131161026a5780637571336a116102395780637571336a1461076457806375f0a874146107845780637bce5a04146107a45780638da5cb5b146107ba57600080fd5b80636ddd1713146106e457806370a0823114610704578063715018a61461073a578063751039fc1461074f57600080fd5b80634a62bb65116102a65780634a62bb651461065b5780634fbee1931461067557806366ca9b83146106ae5780636a486a8e146106ce57600080fd5b8063313ce567146105d657806339509351146105f257806342405d131461061257806349bd5a5e1461062757600080fd5b806318160ddd1161034f578063203e727e1161031e578063203e727e1461056057806323b872dd1461058057806327c8f835146105a05780632cd21ebb146105b657600080fd5b806318160ddd146104f55780631a8145bb146105145780631bb9d7771461052a5780631f3fed8f1461054a57600080fd5b80631027ff871161038b5780631027ff871461043a57806310d5de53146104595780631694505e1461048957806316a2f82a146104d557600080fd5b806302dbd8f8146103bd57806306fdde03146103df578063095ea7b31461040a57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103dd6103d83660046134a7565b610b76565b005b3480156103eb57600080fd5b506103f4610c31565b60405161040191906134c9565b60405180910390f35b34801561041657600080fd5b5061042a610425366004613554565b610cc3565b6040519015158152602001610401565b34801561044657600080fd5b50600d5461042a90610100900460ff1681565b34801561046557600080fd5b5061042a610474366004613580565b601a6020526000908152604090205460ff1681565b34801561049557600080fd5b506104bd7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610401565b3480156104e157600080fd5b506103dd6104f0366004613580565b610cda565b34801561050157600080fd5b506002545b604051908152602001610401565b34801561052057600080fd5b5061050660145481565b34801561053657600080fd5b506103dd610545366004613580565b610df9565b34801561055657600080fd5b5061050660155481565b34801561056c57600080fd5b506103dd61057b36600461359d565b610f3b565b34801561058c57600080fd5b5061042a61059b3660046135b6565b611044565b3480156105ac57600080fd5b506104bd61dead81565b3480156105c257600080fd5b506103dd6105d13660046135f7565b6110ad565b3480156105e257600080fd5b5060405160128152602001610401565b3480156105fe57600080fd5b5061042a61060d366004613554565b61128e565b34801561061e57600080fd5b506103dd6112c4565b34801561063357600080fd5b506104bd7f000000000000000000000000db2df81894da268795b44fede9d707f940e4529a81565b34801561066757600080fd5b50600a5461042a9060ff1681565b34801561068157600080fd5b5061042a610690366004613580565b6001600160a01b031660009081526019602052604090205460ff1690565b3480156106ba57600080fd5b506103dd6106c93660046134a7565b61133a565b3480156106da57600080fd5b5061050660115481565b3480156106f057600080fd5b50600a5461042a9062010000900460ff1681565b34801561071057600080fd5b5061050661071f366004613580565b6001600160a01b031660009081526020819052604090205490565b34801561074657600080fd5b506103dd6113ec565b34801561075b57600080fd5b5061042a61148b565b34801561077057600080fd5b506103dd61077f36600461367a565b6114e6565b34801561079057600080fd5b506006546104bd906001600160a01b031681565b3480156107b057600080fd5b5061050660105481565b3480156107c657600080fd5b506005546001600160a01b03166104bd565b3480156107e457600080fd5b5060185461042a9060ff1681565b3480156107fe57600080fd5b5061050660135481565b34801561081457600080fd5b506103dd6108233660046136b3565b611559565b34801561083457600080fd5b506103f46115d9565b34801561084957600080fd5b506103dd61085836600461367a565b6115e8565b34801561086957600080fd5b506103dd6108783660046136d0565b6116e2565b34801561088957600080fd5b506103dd6117b0565b34801561089e57600080fd5b5061042a6108ad366004613554565b611804565b3480156108be57600080fd5b5061050660165481565b3480156108d457600080fd5b506103dd6108e3366004613580565b611853565b3480156108f457600080fd5b5061042a610903366004613554565b6118bc565b34801561091457600080fd5b506103dd610923366004613580565b6118c9565b34801561093457600080fd5b5061050660175481565b34801561094a57600080fd5b506103dd6109593660046136f5565b61197b565b34801561096a57600080fd5b5061042a610979366004613580565b601b6020526000908152604090205460ff1681565b34801561099a57600080fd5b50600a5461042a90610100900460ff1681565b3480156109b957600080fd5b5061042a6109c8366004613580565b600c6020526000908152604090205460ff1681565b3480156109e957600080fd5b506103dd6109f836600461367a565b611b46565b348015610a0957600080fd5b506103dd610a1836600461359d565b611bed565b348015610a2957600080fd5b50600d5461042a9060ff1681565b348015610a4357600080fd5b5061050660075481565b348015610a5957600080fd5b5061042a610a6836600461359d565b611cf5565b348015610a7957600080fd5b506103dd610a883660046134a7565b611e76565b348015610a9957600080fd5b50610506600e5481565b348015610aaf57600080fd5b50610506610abe366004613737565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610af557600080fd5b5061050660085481565b348015610b0b57600080fd5b5061042a611ef6565b348015610b2057600080fd5b50610506600f5481565b348015610b3657600080fd5b506103dd610b45366004613580565b611f51565b348015610b5657600080fd5b5061050660125481565b348015610b6c57600080fd5b5061050660095481565b6005546001600160a01b03163314610bc35760405162461bcd60e51b8152602060048201819052602482015260008051602061399883398151915260448201526064015b60405180910390fd5b60128290556013819055610bd7818361377b565b60118190556102581015610c2d5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203625206f72206c657373000000006044820152606401610bba565b5050565b606060038054610c4090613793565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6c90613793565b8015610cb95780601f10610c8e57610100808354040283529160200191610cb9565b820191906000526020600020905b815481529060010190602001808311610c9c57829003601f168201915b5050505050905090565b6000610cd03384846120e4565b5060015b92915050565b6005546001600160a01b03163314610d225760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b03811660009081526019602052604090205460ff16610db05760405162461bcd60e51b815260206004820152602360248201527f4163636f756e7420697320616c726561647920696e636c7564656420696e206660448201527f65657300000000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b038116600081815260196020526040808220805460ff19169055517f346f6c42af1ce4b7d7951f3fa40a2fb1e78c80ab0f3d76fb4f9fec269d568f0d9190a250565b6005546001600160a01b03163314610e415760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600d54610100900460ff1615610e995760405162461bcd60e51b815260206004820152601d60248201527f426c6f636b696e6720626f74207269676874732072656e6f756e6365640000006044820152606401610bba565b7f000000000000000000000000db2df81894da268795b44fede9d707f940e4529a6001600160a01b0316816001600160a01b03161415610ed857600080fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316816001600160a01b03161415610f1757600080fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6005546001600160a01b03163314610f835760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b670de0b6b3a76400006103e8610f9860025490565b610fa39060016137ce565b610fad91906137ed565b610fb791906137ed565b81101561102c5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201527f6c6f776572207468616e20302e312500000000000000000000000000000000006064820152608401610bba565b61103e81670de0b6b3a76400006137ce565b60075550565b600061105184848461223d565b6110a3843361109e85604051806060016040528060288152602001613970602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190612c7f565b6120e4565b5060019392505050565b6005546001600160a01b031633146110f55760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600d54610100900460ff161561114d5760405162461bcd60e51b815260206004820152601d60248201527f426c6f636b696e6720626f74207269676874732072656e6f756e6365640000006044820152606401610bba565b60005b81811015611289577f000000000000000000000000db2df81894da268795b44fede9d707f940e4529a6001600160a01b03168383838181106111945761119461380f565b90506020020160208101906111a99190613580565b6001600160a01b031614156111bd57600080fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03168383838181106111f9576111f961380f565b905060200201602081019061120e9190613580565b6001600160a01b0316141561122257600080fd5b6001600c600085858581811061123a5761123a61380f565b905060200201602081019061124f9190613580565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061128181613825565b915050611150565b505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cd091859061109e908661207e565b6005546001600160a01b0316331461130c5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6005546001600160a01b031633146113825760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600f8290556010819055611396818361377b565b600e8190556102581015610c2d5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203625206f72206c657373000000006044820152606401610bba565b6005546001600160a01b031633146114345760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805473ffffffffffffffffffffffffffffffffffffffff19169055565b6005546000906001600160a01b031633146114d65760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b50600a805460ff19169055600190565b6005546001600160a01b0316331461152e5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146115a15760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600a805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055565b606060048054610c4090613793565b6005546001600160a01b031633146116305760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b7f000000000000000000000000db2df81894da268795b44fede9d707f940e4529a6001600160a01b0316826001600160a01b031614156116d85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610bba565b610c2d8282612cb9565b6005546001600160a01b0316331461172a5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b4782111561177a5760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610bba565b6040516001600160a01b0382169083156108fc029084906000818181858888f19350505050158015611289573d6000803e3d6000fd5b6005546001600160a01b031633146117f85760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6018805460ff19169055565b6000610cd0338461109e856040518060600160405280602581526020016139b8602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190612c7f565b6005546001600160a01b0316331461189b5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000610cd033848461223d565b6005546001600160a01b031633146119115760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6006546040516001600160a01b03918216918316907fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a36006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6005546001600160a01b031633146119c35760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015283906001600160a01b038216906370a082319060240160206040518083038186803b158015611a1d57600080fd5b505afa158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a559190613840565b831115611aa45760405162461bcd60e51b815260206004820152601460248201527f496e73756666696369656e742062616c616e63650000000000000000000000006044820152606401610bba565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526024820185905282169063a9059cbb90604401602060405180830381600087803b158015611b0757600080fd5b505af1158015611b1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3f9190613859565b5050505050565b6005546001600160a01b03163314611b8e5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b038216600081815260196020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314611c355760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b670de0b6b3a76400006103e8611c4a60025490565b611c559060056137ce565b611c5f91906137ed565b611c6991906137ed565b811015611cdd5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060448201527f302e3525000000000000000000000000000000000000000000000000000000006064820152608401610bba565b611cef81670de0b6b3a76400006137ce565b60095550565b6005546000906001600160a01b03163314611d405760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b620186a0611d4d60025490565b611d589060016137ce565b611d6291906137ed565b821015611dd75760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610bba565b6103e8611de360025490565b611dee9060056137ce565b611df891906137ed565b821115611e6d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e352520746f74616c20737570706c792e0000000000000000000000006064820152608401610bba565b50600855600190565b6005546001600160a01b03163314611ebe5760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ff1662010100179055601691909155601755565b6005546000906001600160a01b03163314611f415760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b50600d805460ff19169055600190565b6005546001600160a01b03163314611f995760405162461bcd60e51b815260206004820181905260248201526000805160206139988339815191526044820152606401610bba565b6001600160a01b0381166120155760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610bba565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60008061208b838561377b565b9050838110156120dd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bba565b9392505050565b6001600160a01b03831661215f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0382166121db5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166122b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0382166123355760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610bba565b600081116123ab5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b0383166000908152600c602052604090205460ff161580156123ed57506001600160a01b0382166000908152600c602052604090205460ff16155b6124395760405162461bcd60e51b815260206004820152601c60248201527f596f7572206163636f756e7420697320626c6f636b4c697374656421000000006044820152606401610bba565b8061244a5761128983836000612d0d565b600a5460ff1615612945576005546001600160a01b0384811691161480159061248157506005546001600160a01b03838116911614155b801561249557506001600160a01b03821615155b80156124ac57506001600160a01b03821661dead14155b80156124c25750600554600160a01b900460ff16155b1561294557600a54610100900460ff16612561576001600160a01b03831660009081526019602052604090205460ff168061251557506001600160a01b03821660009081526019602052604090205460ff165b6125615760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610bba565b600d5460ff16156126bc576005546001600160a01b038381169116148015906125bc57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b80156125fa57507f000000000000000000000000db2df81894da268795b44fede9d707f940e4529a6001600160a01b0316826001600160a01b031614155b156126bc57326000908152600b602052604090205443116126a95760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60648201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000608482015260a401610bba565b326000908152600b602052604090204390555b6001600160a01b0383166000908152601b602052604090205460ff1680156126fd57506001600160a01b0382166000908152601a602052604090205460ff16155b156127f35760075481111561277a5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527f6d61785472616e73616374696f6e416d6f756e742e00000000000000000000006064820152608401610bba565b6009546001600160a01b0383166000908152602081905260409020546127a0908361377b565b11156127ee5760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c6574206578636565646564000000000000000000000000006044820152606401610bba565b612945565b6001600160a01b0382166000908152601b602052604090205460ff16801561283457506001600160a01b0383166000908152601a602052604090205460ff16155b156128b1576007548111156127ee5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d61785472616e73616374696f6e416d6f756e742e000000000000000000006064820152608401610bba565b6001600160a01b0382166000908152601a602052604090205460ff16612945576009546001600160a01b0383166000908152602081905260409020546128f7908361377b565b11156129455760405162461bcd60e51b815260206004820152601360248201527f4d61782077616c6c6574206578636565646564000000000000000000000000006044820152606401610bba565b30600090815260208190526040902054600854811080159081906129715750600a5462010000900460ff165b80156129875750600554600160a01b900460ff16155b80156129ac57506001600160a01b0385166000908152601b602052604090205460ff16155b80156129d157506001600160a01b03851660009081526019602052604090205460ff16155b80156129f657506001600160a01b03841660009081526019602052604090205460ff16155b15612a5a57600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b179055612a31612ec2565b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690555b6005546001600160a01b03861660009081526019602052604090205460ff600160a01b909204821615911680612aa857506001600160a01b03851660009081526019602052604090205460ff165b15612ab1575060005b60008115612c6b576001600160a01b0386166000908152601b602052604081205460ff168015612ae357506000601154115b15612b915760185460ff1615612af857506017545b612b1c612710612b1683601154612b0f919061377b565b899061306b565b90613106565b915060115460125483612b2f91906137ce565b612b3991906137ed565b60146000828254612b4a919061377b565b9091555050601154601354612b5f90846137ce565b612b6991906137ed565b60156000828254612b7a919061377b565b90915550612b8a90508287613876565b9550612c58565b6001600160a01b0388166000908152601b602052604090205460ff168015612bbb57506000600e54115b15612c585760185460ff1615612bd057506016545b612be7612710612b1683600e54612b0f919061377b565b9150600e54600f5483612bfa91906137ce565b612c0491906137ed565b60146000828254612c15919061377b565b9091555050600e54601054612c2a90846137ce565b612c3491906137ed565b60156000828254612c45919061377b565b90915550612c5590508287613876565b95505b8115612c6957612c69883084612d0d565b505b612c76878787612d0d565b50505050505050565b60008184841115612ca35760405162461bcd60e51b8152600401610bba91906134c9565b506000612cb08486613876565b95945050505050565b6001600160a01b0382166000818152601b6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316612d895760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610bba565b6001600160a01b038216612e055760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610bba565b612e428160405180606001604052806026815260200161394a602691396001600160a01b0386166000908152602081905260409020549190612c7f565b6001600160a01b038085166000908152602081905260408082209390935590841681522054612e71908261207e565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612230565b3060009081526020819052604081205490506000601554601454612ee6919061377b565b90506000821580612ef5575081155b15612eff57505050565b600854612f0d9060146137ce565b831115612f2557600854612f229060146137ce565b92505b600060028360145486612f3891906137ce565b612f4291906137ed565b612f4c91906137ed565b90506000612f5a8583613148565b905047612f668261318a565b6000612f724783613148565b90506000612f8f87612b166015548561306b90919063ffffffff16565b90506000612f9d8284613876565b6000601481905560155590508515801590612fb85750600081115b1561300b57612fc78682613372565b601454604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d8060008114613058576040519150601f19603f3d011682016040523d82523d6000602084013e61305d565b606091505b505050505050505050505050565b60008261307a57506000610cd4565b600061308683856137ce565b90508261309385836137ed565b146120dd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610bba565b60006120dd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613479565b60006120dd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c7f565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106131bf576131bf61380f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561323857600080fd5b505afa15801561324c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613270919061388d565b816001815181106132835761328361380f565b60200260200101906001600160a01b031690816001600160a01b0316815250506132ce307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120e4565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061333c9085906000908690309042906004016138aa565b600060405180830381600087803b15801561335657600080fd5b505af115801561336a573d6000803e3d6000fd5b505050505050565b61339d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120e4565b6006546040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c4016060604051808303818588803b15801561344057600080fd5b505af1158015613454573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b3f919061391b565b6000818361349a5760405162461bcd60e51b8152600401610bba91906134c9565b506000612cb084866137ed565b600080604083850312156134ba57600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156134f6578581018301518582016040015282016134da565b81811115613508576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6001600160a01b038116811461355157600080fd5b50565b6000806040838503121561356757600080fd5b82356135728161353c565b946020939093013593505050565b60006020828403121561359257600080fd5b81356120dd8161353c565b6000602082840312156135af57600080fd5b5035919050565b6000806000606084860312156135cb57600080fd5b83356135d68161353c565b925060208401356135e68161353c565b929592945050506040919091013590565b6000806020838503121561360a57600080fd5b823567ffffffffffffffff8082111561362257600080fd5b818501915085601f83011261363657600080fd5b81358181111561364557600080fd5b8660208260051b850101111561365a57600080fd5b60209290920196919550909350505050565b801515811461355157600080fd5b6000806040838503121561368d57600080fd5b82356136988161353c565b915060208301356136a88161366c565b809150509250929050565b6000602082840312156136c557600080fd5b81356120dd8161366c565b600080604083850312156136e357600080fd5b8235915060208301356136a88161353c565b60008060006060848603121561370a57600080fd5b83356137158161353c565b925060208401359150604084013561372c8161353c565b809150509250925092565b6000806040838503121561374a57600080fd5b82356137558161353c565b915060208301356136a88161353c565b634e487b7160e01b600052601160045260246000fd5b6000821982111561378e5761378e613765565b500190565b600181811c908216806137a757607f821691505b602082108114156137c857634e487b7160e01b600052602260045260246000fd5b50919050565b60008160001904831182151516156137e8576137e8613765565b500290565b60008261380a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060001982141561383957613839613765565b5060010190565b60006020828403121561385257600080fd5b5051919050565b60006020828403121561386b57600080fd5b81516120dd8161366c565b60008282101561388857613888613765565b500390565b60006020828403121561389f57600080fd5b81516120dd8161353c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138fa5784516001600160a01b0316835293830193918301916001016138d5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561393057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b56b8603d8531d552e7f0f957b0ba1bccb8a27bd9e237852ded69000aee94abb64736f6c63430008090033

Deployed Bytecode Sourcemap

29464:16712:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36287:317;;;;;;;;;;-1:-1:-1;36287:317:0;;;;;:::i;:::-;;:::i;:::-;;7620:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9787:169;;;;;;;;;;-1:-1:-1;9787:169:0;;;;;:::i;:::-;;:::i;:::-;;;1572:14:1;;1565:22;1547:41;;1535:2;1520:18;9787:169:0;1407:187:1;30287:37:0;;;;;;;;;;-1:-1:-1;30287:37:0;;;;;;;;;;;30891:64;;;;;;;;;;-1:-1:-1;30891:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29542:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2042:55:1;;;2024:74;;2012:2;1997:18;29542:51:0;1851:253:1;36802:237:0;;;;;;;;;;-1:-1:-1;36802:237:0;;;;;:::i;:::-;;:::i;8740:108::-;;;;;;;;;;-1:-1:-1;8828:12:0;;8740:108;;;2255:25:1;;;2243:2;2228:18;8740:108:0;2109:177:1;30564:33:0;;;;;;;;;;;;;;;;38260:270;;;;;;;;;;-1:-1:-1;38260:270:0;;;;;:::i;:::-;;:::i;30604:33::-;;;;;;;;;;;;;;;;35138:234;;;;;;;;;;-1:-1:-1;35138:234:0;;;;;:::i;:::-;;:::i;10438:355::-;;;;;;;;;;-1:-1:-1;10438:355:0;;;;;:::i;:::-;;:::i;29645:53::-;;;;;;;;;;;;29691:6;29645:53;;38538:382;;;;;;;;;;-1:-1:-1;38538:382:0;;;;;:::i;:::-;;:::i;8582:93::-;;;;;;;;;;-1:-1:-1;8582:93:0;;8665:2;3930:36:1;;3918:2;3903:18;8582:93:0;3788:184:1;11202:218:0;;;;;;;;;;-1:-1:-1;11202:218:0;;;;;:::i;:::-;;:::i;38164:88::-;;;;;;;;;;;;;:::i;29600:38::-;;;;;;;;;;;;;;;29895:33;;;;;;;;;;-1:-1:-1;29895:33:0;;;;;;;;39030:125;;;;;;;;;;-1:-1:-1;39030:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;39119:28:0;39095:4;39119:28;;;:19;:28;;;;;;;;;39030:125;35964:311;;;;;;;;;;-1:-1:-1;35964:311:0;;;;;:::i;:::-;;:::i;30447:28::-;;;;;;;;;;;;;;;;29975:31;;;;;;;;;;-1:-1:-1;29975:31:0;;;;;;;;;;;8911:127;;;;;;;;;;-1:-1:-1;8911:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9012:18:0;8985:7;9012:18;;;;;;;;;;;;8911:127;22085:148;;;;;;;;;;;;;:::i;34346:120::-;;;;;;;;;;;;;:::i;35607:144::-;;;;;;;;;;-1:-1:-1;35607:144:0;;;;;:::i;:::-;;:::i;29737:30::-;;;;;;;;;;-1:-1:-1;29737:30:0;;;;-1:-1:-1;;;;;29737:30:0;;;30404;;;;;;;;;;;;;;;;21443:79;;;;;;;;;;-1:-1:-1;21508:6:0;;-1:-1:-1;;;;;21508:6:0;21443:79;;30715:28;;;;;;;;;;-1:-1:-1;30715:28:0;;;;;;;;30520:31;;;;;;;;;;;;;;;;35851:101;;;;;;;;;;-1:-1:-1;35851:101:0;;;;;:::i;:::-;;:::i;7839:104::-;;;;;;;;;;;;;:::i;37047:244::-;;;;;;;;;;-1:-1:-1;37047:244:0;;;;;:::i;:::-;;:::i;37692:189::-;;;;;;;;;;-1:-1:-1;37692:189:0;;;;;:::i;:::-;;:::i;34211:79::-;;;;;;;;;;;;;:::i;11923:269::-;;;;;;;;;;-1:-1:-1;11923:269:0;;;;;:::i;:::-;;:::i;30646:26::-;;;;;;;;;;;;;;;;38928:94;;;;;;;;;;-1:-1:-1;38928:94:0;;;;;:::i;:::-;;:::i;9251:175::-;;;;;;;;;;-1:-1:-1;9251:175:0;;;;;:::i;:::-;;:::i;37499:181::-;;;;;;;;;;-1:-1:-1;37499:181:0;;;;;:::i;:::-;;:::i;30679:27::-;;;;;;;;;;;;;;;;37889:267;;;;;;;;;;-1:-1:-1;37889:267:0;;;;;:::i;:::-;;:::i;31113:58::-;;;;;;;;;;-1:-1:-1;31113:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29935:33;;;;;;;;;;-1:-1:-1;29935:33:0;;;;;;;;;;;30198:36;;;;;;;;;;-1:-1:-1;30198:36:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36612:182;;;;;;;;;;-1:-1:-1;36612:182:0;;;;;:::i;:::-;;:::i;35380:215::-;;;;;;;;;;-1:-1:-1;35380:215:0;;;;;:::i;:::-;;:::i;30241:39::-;;;;;;;;;;-1:-1:-1;30241:39:0;;;;;;;;29780:35;;;;;;;;;;;;;;;;34740:386;;;;;;;;;;-1:-1:-1;34740:386:0;;;;;:::i;:::-;;:::i;33972:231::-;;;;;;;;;;-1:-1:-1;33972:231:0;;;;;:::i;:::-;;:::i;30333:27::-;;;;;;;;;;;;;;;;9489:151;;;;;;;;;;-1:-1:-1;9489:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9605:18:0;;;9578:7;9605:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9489:151;29822:33;;;;;;;;;;;;;;;;34531:134;;;;;;;;;;;;;:::i;30367:30::-;;;;;;;;;;;;;;;;22388:244;;;;;;;;;;-1:-1:-1;22388:244:0;;;;;:::i;:::-;;:::i;30482:31::-;;;;;;;;;;;;;;;;29862:24;;;;;;;;;;;;;;;;36287:317;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;;;;;;;;;36387:16:::1;:32:::0;;;36430:16:::1;:32:::0;;;36489:35:::1;36449:13:::0;36406;36489:35:::1;:::i;:::-;36473:13;:51:::0;;;36560:3:::1;-1:-1:-1::0;36543:20:0::1;36535:61;;;::::0;-1:-1:-1;;;36535:61:0;;6800:2:1;36535:61:0::1;::::0;::::1;6782:21:1::0;6839:2;6819:18;;;6812:30;6878;6858:18;;;6851:58;6926:18;;36535:61:0::1;6598:352:1::0;36535:61:0::1;36287:317:::0;;:::o;7620:100::-;7674:13;7707:5;7700:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7620:100;:::o;9787:169::-;9870:4;9887:39;336:10;9910:7;9919:6;9887:8;:39::i;:::-;-1:-1:-1;9944:4:0;9787:169;;;;;:::o;36802:237::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;;;;;36878:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;36870:76;;;::::0;-1:-1:-1;;;36870:76:0;;7599:2:1;36870:76:0::1;::::0;::::1;7581:21:1::0;7638:2;7618:18;;;7611:30;7677:34;7657:18;;;7650:62;7748:5;7728:18;;;7721:33;7771:19;;36870:76:0::1;7397:399:1::0;36870:76:0::1;-1:-1:-1::0;;;;;36957:28:0;::::1;36988:5;36957:28:::0;;;:19:::1;:28;::::0;;;;;:36;;-1:-1:-1;;36957:36:0::1;::::0;;37009:22;::::1;::::0;36988:5;37009:22:::1;36802:237:::0;:::o;38260:270::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;38332:17:::1;::::0;::::1;::::0;::::1;;;38331:18;38323:60;;;::::0;-1:-1:-1;;;38323:60:0;;8003:2:1;38323:60:0::1;::::0;::::1;7985:21:1::0;8042:2;8022:18;;;8015:30;8081:31;8061:18;;;8054:59;8130:18;;38323:60:0::1;7801:353:1::0;38323:60:0::1;38421:13;-1:-1:-1::0;;;;;38402:33:0::1;:7;-1:-1:-1::0;;;;;38402:33:0::1;;;38394:42;;;::::0;::::1;;38474:15;-1:-1:-1::0;;;;;38455:35:0::1;:7;-1:-1:-1::0;;;;;38455:35:0::1;;;38447:44;;;::::0;::::1;;-1:-1:-1::0;;;;;38502:13:0::1;;::::0;;;:4:::1;:13;::::0;;;;:20;;-1:-1:-1;;38502:20:0::1;38518:4;38502:20;::::0;;38260:270::o;35138:234::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;35257:4:::1;35251;35231:13;8828:12:::0;;;8740:108;35231:13:::1;:17;::::0;35247:1:::1;35231:17;:::i;:::-;:24;;;;:::i;:::-;35230:31;;;;:::i;:::-;35220:6;:41;;35212:101;;;::::0;-1:-1:-1;;;35212:101:0;;8873:2:1;35212:101:0::1;::::0;::::1;8855:21:1::0;8912:2;8892:18;;;8885:30;8951:34;8931:18;;;8924:62;9022:17;9002:18;;;8995:45;9057:19;;35212:101:0::1;8671:411:1::0;35212:101:0::1;35347:17;:6:::0;35357::::1;35347:17;:::i;:::-;35324:20;:40:::0;-1:-1:-1;35138:234:0:o;10438:355::-;10578:4;10595:36;10605:6;10613:9;10624:6;10595:9;:36::i;:::-;10642:121;10651:6;336:10;10673:89;10711:6;10673:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10673:19:0;;;;;;:11;:19;;;;;;;;336:10;10673:33;;;;;;;;;;:37;:89::i;:::-;10642:8;:121::i;:::-;-1:-1:-1;10781:4:0;10438:355;;;;;:::o;38538:382::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;38631:17:::1;::::0;::::1;::::0;::::1;;;38630:18;38622:60;;;::::0;-1:-1:-1;;;38622:60:0;;8003:2:1;38622:60:0::1;::::0;::::1;7985:21:1::0;8042:2;8022:18;;;8015:30;8081:31;8061:18;;;8054:59;8130:18;;38622:60:0::1;7801:353:1::0;38622:60:0::1;38697:9;38693:220;38712:19:::0;;::::1;38693:220;;;38784:13;-1:-1:-1::0;;;;;38761:37:0::1;:8;;38770:1;38761:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38761:37:0::1;;;38753:46;;;::::0;::::1;;38845:15;-1:-1:-1::0;;;;;38822:39:0::1;:8;;38831:1;38822:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38822:39:0::1;;;38814:48;;;::::0;::::1;;38897:4;38877;:17;38882:8;;38891:1;38882:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38877:17:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;38877:17:0;:24;;-1:-1:-1;;38877:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38733:3;::::1;::::0;::::1;:::i;:::-;;;;38693:220;;;;38538:382:::0;;:::o;11202:218::-;336:10;11290:4;11339:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11339:34:0;;;;;;;;;;11290:4;;11307:83;;11330:7;;11339:50;;11378:10;11339:38;:50::i;38164:88::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;38220:17:::1;:24:::0;;;::::1;;;::::0;;38164:88::o;35964:311::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;36064:15:::1;:31:::0;;;36106:15:::1;:31:::0;;;36163:33:::1;36124:13:::0;36082;36163:33:::1;:::i;:::-;36148:12;:48:::0;;;36231:3:::1;-1:-1:-1::0;36215:19:0::1;36207:60;;;::::0;-1:-1:-1;;;36207:60:0;;6800:2:1;36207:60:0::1;::::0;::::1;6782:21:1::0;6839:2;6819:18;;;6812:30;6878;6858:18;;;6851:58;6926:18;;36207:60:0::1;6598:352:1::0;22085:148:0;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;22176:6:::1;::::0;22155:40:::1;::::0;22192:1:::1;::::0;-1:-1:-1;;;;;22176:6:0::1;::::0;22155:40:::1;::::0;22192:1;;22155:40:::1;22206:6;:19:::0;;-1:-1:-1;;22206:19:0::1;::::0;;22085:148::o;34346:120::-;21655:6;;34398:4;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;34414:14:0::1;:22:::0;;-1:-1:-1;;34414:22:0::1;::::0;;;34346:120;:::o;35607:144::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;;;;;35697:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;35697:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35607:144::o;35851:101::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;35923:11:::1;:21:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;35851:101::o;7839:104::-;7895:13;7928:7;7921:14;;;;;:::i;37047:244::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;37154:13:::1;-1:-1:-1::0;;;;;37146:21:0::1;:4;-1:-1:-1::0;;;;;37146:21:0::1;;;37138:91;;;::::0;-1:-1:-1;;;37138:91:0;;9678:2:1;37138:91:0::1;::::0;::::1;9660:21:1::0;9717:2;9697:18;;;9690:30;9756:34;9736:18;;;9729:62;9827:27;9807:18;;;9800:55;9872:19;;37138:91:0::1;9476:421:1::0;37138:91:0::1;37242:41;37271:4;37277:5;37242:28;:41::i;37692:189::-:0;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;37797:21:::1;37787:6;:31;;37779:64;;;::::0;-1:-1:-1;;;37779:64:0;;10104:2:1;37779:64:0::1;::::0;::::1;10086:21:1::0;10143:2;10123:18;;;10116:30;10182:22;10162:18;;;10155:50;10222:18;;37779:64:0::1;9902:344:1::0;37779:64:0::1;37854:19;::::0;-1:-1:-1;;;;;37854:11:0;::::1;::::0;:19;::::1;;;::::0;37866:6;;37854:19:::1;::::0;;;37866:6;37854:11;:19;::::1;;;;;;;;;;;;;::::0;::::1;;;;34211:79:::0;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;34265:9:::1;:17:::0;;-1:-1:-1;;34265:17:0::1;::::0;;34211:79::o;11923:269::-;12016:4;12033:129;336:10;12056:7;12065:96;12104:15;12065:96;;;;;;;;;;;;;;;;;336:10;12065:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12065:34:0;;;;;;;;;;;;:38;:96::i;38928:94::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;;;;;38993:13:0::1;39009:5;38993:13:::0;;;:4:::1;:13;::::0;;;;:21;;-1:-1:-1;;38993:21:0::1;::::0;;38928:94::o;9251:175::-;9337:4;9354:42;336:10;9378:9;9389:6;9354:9;:42::i;37499:181::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;37618:15:::1;::::0;37584:50:::1;::::0;-1:-1:-1;;;;;37618:15:0;;::::1;::::0;37584:50;::::1;::::0;::::1;::::0;37618:15:::1;::::0;37584:50:::1;37645:15;:27:::0;;-1:-1:-1;;37645:27:0::1;-1:-1:-1::0;;;;;37645:27:0;;;::::1;::::0;;;::::1;::::0;;37499:181::o;37889:267::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;38056:30:::1;::::0;;;;38080:4:::1;38056:30;::::0;::::1;2024:74:1::0;38014:12:0;;-1:-1:-1;;;;;38056:15:0;::::1;::::0;::::1;::::0;1997:18:1;;38056:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38046:6;:40;;38038:73;;;::::0;-1:-1:-1;;;38038:73:0;;10104:2:1;38038:73:0::1;::::0;::::1;10086:21:1::0;10143:2;10123:18;;;10116:30;10182:22;10162:18;;;10155:50;10222:18;;38038:73:0::1;9902:344:1::0;38038:73:0::1;38122:26;::::0;;;;-1:-1:-1;;;;;10632:55:1;;;38122:26:0::1;::::0;::::1;10614:74:1::0;10704:18;;;10697:34;;;38122:14:0;::::1;::::0;::::1;::::0;10587:18:1;;38122:26:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37981:175;37889:267:::0;;;:::o;36612:182::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;;;;;36697:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;36697:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36752:34;;1547:41:1;;;36752:34:0::1;::::0;1520:18:1;36752:34:0::1;;;;;;;36612:182:::0;;:::o;35380:215::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;35502:4:::1;35496;35476:13;8828:12:::0;;;8740:108;35476:13:::1;:17;::::0;35492:1:::1;35476:17;:::i;:::-;:24;;;;:::i;:::-;35475:31;;;;:::i;:::-;35465:6;:41;;35457:90;;;::::0;-1:-1:-1;;;35457:90:0;;11194:2:1;35457:90:0::1;::::0;::::1;11176:21:1::0;11233:2;11213:18;;;11206:30;11272:34;11252:18;;;11245:62;11343:6;11323:18;;;11316:34;11367:19;;35457:90:0::1;10992:400:1::0;35457:90:0::1;35570:17;:6:::0;35580::::1;35570:17;:::i;:::-;35558:9;:29:::0;-1:-1:-1;35380:215:0:o;34740:386::-;21655:6;;34821:4;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;34878:6:::1;34858:13;8828:12:::0;;;8740:108;34858:13:::1;:17;::::0;34874:1:::1;34858:17;:::i;:::-;:26;;;;:::i;:::-;34845:9;:39;;34837:105;;;::::0;-1:-1:-1;;;34837:105:0;;11599:2:1;34837:105:0::1;::::0;::::1;11581:21:1::0;11638:2;11618:18;;;11611:30;11677:34;11657:18;;;11650:62;11748:23;11728:18;;;11721:51;11789:19;;34837:105:0::1;11397:417:1::0;34837:105:0::1;34994:4;34974:13;8828:12:::0;;;8740:108;34974:13:::1;:17;::::0;34990:1:::1;34974:17;:::i;:::-;:24;;;;:::i;:::-;34961:9;:37;;34953:102;;;::::0;-1:-1:-1;;;34953:102:0;;12021:2:1;34953:102:0::1;::::0;::::1;12003:21:1::0;12060:2;12040:18;;;12033:30;12099:34;12079:18;;;12072:62;12170:22;12150:18;;;12143:50;12210:19;;34953:102:0::1;11819:416:1::0;34953:102:0::1;-1:-1:-1::0;35066:18:0::1;:30:::0;35114:4:::1;::::0;34740:386::o;33972:231::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;34070:13:::1;:20:::0;;34101:18;;;;;;34130:11:::1;:26:::0;;;;34167:12:::1;:28:::0;33972:231::o;34531:134::-;21655:6;;34591:4;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;34607:20:0::1;:28:::0;;-1:-1:-1;;34607:28:0::1;::::0;;;34531:134;:::o;22388:244::-;21655:6;;-1:-1:-1;;;;;21655:6:0;336:10;21655:22;21647:67;;;;-1:-1:-1;;;21647:67:0;;6117:2:1;21647:67:0;;;6099:21:1;;;6136:18;;;6129:30;-1:-1:-1;;;;;;;;;;;6175:18:1;;;6168:62;6247:18;;21647:67:0;5915:356:1;21647:67:0;-1:-1:-1;;;;;22477:22:0;::::1;22469:73;;;::::0;-1:-1:-1;;;22469:73:0;;12442:2:1;22469:73:0::1;::::0;::::1;12424:21:1::0;12481:2;12461:18;;;12454:30;12520:34;12500:18;;;12493:62;12591:8;12571:18;;;12564:36;12617:19;;22469:73:0::1;12240:402:1::0;22469:73:0::1;22579:6;::::0;22558:38:::1;::::0;-1:-1:-1;;;;;22558:38:0;;::::1;::::0;22579:6:::1;::::0;22558:38:::1;::::0;22579:6:::1;::::0;22558:38:::1;22607:6;:17:::0;;-1:-1:-1;;22607:17:0::1;-1:-1:-1::0;;;;;22607:17:0;;;::::1;::::0;;;::::1;::::0;;22388:244::o;16487:181::-;16545:7;;16577:5;16581:1;16577;:5;:::i;:::-;16565:17;;16606:1;16601;:6;;16593:46;;;;-1:-1:-1;;;16593:46:0;;12849:2:1;16593:46:0;;;12831:21:1;12888:2;12868:18;;;12861:30;12927:29;12907:18;;;12900:57;12974:18;;16593:46:0;12647:351:1;16593:46:0;16659:1;16487:181;-1:-1:-1;;;16487:181:0:o;15109:380::-;-1:-1:-1;;;;;15245:19:0;;15237:68;;;;-1:-1:-1;;;15237:68:0;;13205:2:1;15237:68:0;;;13187:21:1;13244:2;13224:18;;;13217:30;13283:34;13263:18;;;13256:62;13354:6;13334:18;;;13327:34;13378:19;;15237:68:0;13003:400:1;15237:68:0;-1:-1:-1;;;;;15324:21:0;;15316:68;;;;-1:-1:-1;;;15316:68:0;;13610:2:1;15316:68:0;;;13592:21:1;13649:2;13629:18;;;13622:30;13688:34;13668:18;;;13661:62;13759:4;13739:18;;;13732:32;13781:19;;15316:68:0;13408:398:1;15316:68:0;-1:-1:-1;;;;;15397:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15449:32;;2255:25:1;;;15449:32:0;;2228:18:1;15449:32:0;;;;;;;;15109:380;;;:::o;39167:4391::-;-1:-1:-1;;;;;39299:18:0;;39291:68;;;;-1:-1:-1;;;39291:68:0;;14013:2:1;39291:68:0;;;13995:21:1;14052:2;14032:18;;;14025:30;14091:34;14071:18;;;14064:62;14162:7;14142:18;;;14135:35;14187:19;;39291:68:0;13811:401:1;39291:68:0;-1:-1:-1;;;;;39378:16:0;;39370:64;;;;-1:-1:-1;;;39370:64:0;;14419:2:1;39370:64:0;;;14401:21:1;14458:2;14438:18;;;14431:30;14497:34;14477:18;;;14470:62;14568:5;14548:18;;;14541:33;14591:19;;39370:64:0;14217:399:1;39370:64:0;39462:1;39453:6;:10;39445:64;;;;-1:-1:-1;;;39445:64:0;;14823:2:1;39445:64:0;;;14805:21:1;14862:2;14842:18;;;14835:30;14901:34;14881:18;;;14874:62;14972:11;14952:18;;;14945:39;15001:19;;39445:64:0;14621:405:1;39445:64:0;-1:-1:-1;;;;;39529:10:0;;;;;;:4;:10;;;;;;;;39528:11;:24;;;;-1:-1:-1;;;;;;39544:8:0;;;;;;:4;:8;;;;;;;;39543:9;39528:24;39520:65;;;;-1:-1:-1;;;39520:65:0;;15233:2:1;39520:65:0;;;15215:21:1;15272:2;15252:18;;;15245:30;15311;15291:18;;;15284:58;15359:18;;39520:65:0;15031:352:1;39520:65:0;39610:11;39607:92;;39638:28;39654:4;39660:2;39664:1;39638:15;:28::i;39607:92::-;39722:14;;;;39719:1836;;;21508:6;;-1:-1:-1;;;;;39774:15:0;;;21508:6;;39774:15;;;;:49;;-1:-1:-1;21508:6:0;;-1:-1:-1;;;;;39810:13:0;;;21508:6;;39810:13;;39774:49;:86;;;;-1:-1:-1;;;;;;39844:16:0;;;;39774:86;:128;;;;-1:-1:-1;;;;;;39881:21:0;;39895:6;39881:21;;39774:128;:158;;;;-1:-1:-1;39924:8:0;;-1:-1:-1;;;39924:8:0;;;;39923:9;39774:158;39752:1792;;;39970:13;;;;;;;39966:148;;-1:-1:-1;;;;;40015:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;40044:23:0;;;;;;:19;:23;;;;;;;;40015:52;40007:87;;;;-1:-1:-1;;;40007:87:0;;15590:2:1;40007:87:0;;;15572:21:1;15629:2;15609:18;;;15602:30;15668:24;15648:18;;;15641:52;15710:18;;40007:87:0;15388:346:1;40007:87:0;40272:20;;;;40268:423;;;21508:6;;-1:-1:-1;;;;;40320:13:0;;;21508:6;;40320:13;;;;:47;;;40351:15;-1:-1:-1;;;;;40337:30:0;:2;-1:-1:-1;;;;;40337:30:0;;;40320:47;:79;;;;;40385:13;-1:-1:-1;;;;;40371:28:0;:2;-1:-1:-1;;;;;40371:28:0;;;40320:79;40316:356;;;40464:9;40435:39;;;;:28;:39;;;;;;40477:12;-1:-1:-1;40427:140:0;;;;-1:-1:-1;;;40427:140:0;;15941:2:1;40427:140:0;;;15923:21:1;15980:2;15960:18;;;15953:30;16019:34;15999:18;;;15992:62;16090:34;16070:18;;;16063:62;16162:11;16141:19;;;16134:40;16191:19;;40427:140:0;15739:477:1;40427:140:0;40623:9;40594:39;;;;:28;:39;;;;;40636:12;40594:54;;40316:356;-1:-1:-1;;;;;40760:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;40796:35:0;;;;;;:31;:35;;;;;;;;40795:36;40760:71;40756:773;;;40874:20;;40864:6;:30;;40856:96;;;;-1:-1:-1;;;40856:96:0;;16423:2:1;40856:96:0;;;16405:21:1;16462:2;16442:18;;;16435:30;16501:34;16481:18;;;16474:62;16572:23;16552:18;;;16545:51;16613:19;;40856:96:0;16221:417:1;40856:96:0;41009:9;;-1:-1:-1;;;;;9012:18:0;;8985:7;9012:18;;;;;;;;;;;40983:22;;:6;:22;:::i;:::-;:35;;40975:67;;;;-1:-1:-1;;;40975:67:0;;16845:2:1;40975:67:0;;;16827:21:1;16884:2;16864:18;;;16857:30;16923:21;16903:18;;;16896:49;16962:18;;40975:67:0;16643:343:1;40975:67:0;40756:773;;;-1:-1:-1;;;;;41139:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;41173:37:0;;;;;;:31;:37;;;;;;;;41172:38;41139:71;41135:394;;;41257:20;;41247:6;:30;;41239:97;;;;-1:-1:-1;;;41239:97:0;;17193:2:1;41239:97:0;;;17175:21:1;17232:2;17212:18;;;17205:30;17271:34;17251:18;;;17244:62;17342:24;17322:18;;;17315:52;17384:19;;41239:97:0;16991:418:1;41135:394:0;-1:-1:-1;;;;;41383:35:0;;;;;;:31;:35;;;;;;;;41379:150;;41476:9;;-1:-1:-1;;;;;9012:18:0;;8985:7;9012:18;;;;;;;;;;;41450:22;;:6;:22;:::i;:::-;:35;;41442:67;;;;-1:-1:-1;;;41442:67:0;;16845:2:1;41442:67:0;;;16827:21:1;16884:2;16864:18;;;16857:30;16923:21;16903:18;;;16896:49;16962:18;;41442:67:0;16643:343:1;41442:67:0;41644:4;41595:28;9012:18;;;;;;;;;;;41710;;41686:42;;;;;;;41759:35;;-1:-1:-1;41783:11:0;;;;;;;41759:35;:61;;;;-1:-1:-1;41812:8:0;;-1:-1:-1;;;41812:8:0;;;;41811:9;41759:61;:110;;;;-1:-1:-1;;;;;;41838:31:0;;;;;;:25;:31;;;;;;;;41837:32;41759:110;:153;;;;-1:-1:-1;;;;;;41887:25:0;;;;;;:19;:25;;;;;;;;41886:26;41759:153;:194;;;;-1:-1:-1;;;;;;41930:23:0;;;;;;:19;:23;;;;;;;;41929:24;41759:194;41741:338;;;41980:8;:15;;;;-1:-1:-1;;;41980:15:0;;;42024:10;:8;:10::i;:::-;42051:8;:16;;;;;;41741:338;42115:8;;-1:-1:-1;;;;;42224:25:0;;42099:12;42224:25;;;:19;:25;;;;;;42115:8;-1:-1:-1;;;42115:8:0;;;;;42114:9;;42224:25;;:52;;-1:-1:-1;;;;;;42253:23:0;;;;;;:19;:23;;;;;;;;42224:52;42221:99;;;-1:-1:-1;42303:5:0;42221:99;42340:12;42444:7;42441:1064;;;-1:-1:-1;;;;;42530:29:0;;42467:16;42530:29;;;:25;:29;;;;;;;;:50;;;;;42579:1;42563:13;;:17;42530:50;42526:833;;;42603:9;;;;42600:41;;;-1:-1:-1;42627:12:0;;42600:41;42666:47;42707:5;42666:36;42693:8;42677:13;;:24;;;;:::i;:::-;42666:6;;:10;:36::i;:::-;:40;;:47::i;:::-;42659:54;;42780:13;;42761:16;;42754:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;42732:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;42860:13:0;;42841:16;;42834:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;42812:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;42894:14:0;;-1:-1:-1;42904:4:0;42894:14;;:::i;:::-;;;42526:833;;;-1:-1:-1;;;;;42969:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;43019:1;43004:12;;:16;42969:51;42966:393;;;43044:9;;;;43041:40;;;-1:-1:-1;43068:11:0;;43041:40;43106:46;43146:5;43106:35;43132:8;43117:12;;:23;;;;:::i;43106:46::-;43099:53;;43218:12;;43200:15;;43193:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43171:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;43296:12:0;;43278:15;;43271:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;43249:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;43329:14:0;;-1:-1:-1;43339:4:0;43329:14;;:::i;:::-;;;42966:393;43390:8;;43387:93;;43422:42;43438:4;43452;43459;43422:15;:42::i;:::-;42452:1053;42441:1064;43517:33;43533:4;43539:2;43543:6;43517:15;:33::i;:::-;39280:4278;;;;39167:4391;;;:::o;17390:192::-;17476:7;17512:12;17504:6;;;;17496:29;;;;-1:-1:-1;;;17496:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17536:9:0;17548:5;17552:1;17548;:5;:::i;:::-;17536:17;17390:192;-1:-1:-1;;;;;17390:192:0:o;37299:188::-;-1:-1:-1;;;;;37382:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;37382:39:0;;;;;;;;;;37439:40;;37382:39;;:31;37439:40;;;37299:188;;:::o;12682:573::-;-1:-1:-1;;;;;12822:20:0;;12814:70;;;;-1:-1:-1;;;12814:70:0;;14013:2:1;12814:70:0;;;13995:21:1;14052:2;14032:18;;;14025:30;14091:34;14071:18;;;14064:62;14162:7;14142:18;;;14135:35;14187:19;;12814:70:0;13811:401:1;12814:70:0;-1:-1:-1;;;;;12903:23:0;;12895:71;;;;-1:-1:-1;;;12895:71:0;;14419:2:1;12895:71:0;;;14401:21:1;14458:2;14438:18;;;14431:30;14497:34;14477:18;;;14470:62;14568:5;14548:18;;;14541:33;14591:19;;12895:71:0;14217:399:1;12895:71:0;13059;13081:6;13059:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13059:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;13039:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13164:20;;;;;;;:32;;13189:6;13164:24;:32::i;:::-;-1:-1:-1;;;;;13141:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13212:35;2255:25:1;;;13141:20:0;;13212:35;;;;;;2228:18:1;13212:35:0;2109:177:1;44708:1459:0;44791:4;44747:23;9012:18;;;;;;;;;;;44747:50;;44808:25;44857:18;;44836;;:39;;;;:::i;:::-;44808:67;-1:-1:-1;44886:12:0;44922:20;;;:46;;-1:-1:-1;44946:22:0;;44922:46;44919:60;;;44971:7;;;44708:1459::o;44919:60::-;45012:18;;:23;;45033:2;45012:23;:::i;:::-;44994:15;:41;44991:111;;;45067:18;;:23;;45088:2;45067:23;:::i;:::-;45049:41;;44991:111;45171:23;45256:1;45236:17;45215:18;;45197:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45171:86;-1:-1:-1;45268:26:0;45297:36;:15;45171:86;45297:19;:36::i;:::-;45268:65;-1:-1:-1;45382:21:0;45416:36;45268:65;45416:16;:36::i;:::-;45474:18;45495:44;:21;45521:17;45495:25;:44::i;:::-;45474:65;;45560:23;45586:57;45625:17;45586:34;45601:18;;45586:10;:14;;:34;;;;:::i;:57::-;45560:83;-1:-1:-1;45674:23:0;45700:28;45560:83;45700:10;:28;:::i;:::-;45780:1;45759:18;:22;;;45792:18;:22;45674:54;-1:-1:-1;45846:19:0;;;;;:42;;;45887:1;45869:15;:19;45846:42;45843:210;;;45904:46;45917:15;45934;45904:12;:46::i;:::-;46022:18;;45970:71;;;17746:25:1;;;17802:2;17787:18;;17780:34;;;17830:18;;;17823:34;;;;45970:71:0;;;;;;17734:2:1;45970:71:0;;;45843:210;46104:15;;46096:63;;-1:-1:-1;;;;;46104:15:0;;;;46133:21;;46096:63;;;;46133:21;46104:15;46096:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;44708:1459:0:o;17841:471::-;17899:7;18144:6;18140:47;;-1:-1:-1;18174:1:0;18167:8;;18140:47;18199:9;18211:5;18215:1;18211;:5;:::i;:::-;18199:17;-1:-1:-1;18244:1:0;18235:5;18239:1;18199:17;18235:5;:::i;:::-;:10;18227:56;;;;-1:-1:-1;;;18227:56:0;;18280:2:1;18227:56:0;;;18262:21:1;18319:2;18299:18;;;18292:30;18358:34;18338:18;;;18331:62;18429:3;18409:18;;;18402:31;18450:19;;18227:56:0;18078:397:1;18788:132:0;18846:7;18873:39;18877:1;18880;18873:39;;;;;;;;;;;;;;;;;:3;:39::i;16951:136::-;17009:7;17036:43;17040:1;17043;17036:43;;;;;;;;;;;;;;;;;:3;:43::i;43566:601::-;43718:16;;;43732:1;43718:16;;;;;;;;43694:21;;43718:16;;;;;;;;;;-1:-1:-1;43718:16:0;43694:40;;43763:4;43745;43750:1;43745:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;43745:23:0;;;-1:-1:-1;;;;;43745:23:0;;;;;43789:15;-1:-1:-1;;;;;43789:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43779:4;43784:1;43779:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;43779:32:0;;;-1:-1:-1;;;;;43779:32:0;;;;;43824:62;43841:4;43856:15;43874:11;43824:8;:62::i;:::-;43925:224;;;;;-1:-1:-1;;;;;43925:15:0;:66;;;;:224;;44006:11;;44032:1;;44076:4;;44103;;44123:15;;43925:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43621:546;43566:601;:::o;44179:521::-;44327:62;44344:4;44359:15;44377:11;44327:8;:62::i;:::-;44636:15;;44432:260;;;;;44504:4;44432:260;;;20320:34:1;20370:18;;;20363:34;;;44550:1:0;20413:18:1;;;20406:34;;;20456:18;;;20449:34;-1:-1:-1;;;;;44636:15:0;;;20499:19:1;;;20492:44;44666:15:0;20552:19:1;;;20545:35;44432:15:0;:31;;;;;;44471:9;;20231:19:1;;44432:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19416:278::-;19502:7;19537:12;19530:5;19522:28;;;;-1:-1:-1;;;19522:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19561:9:0;19573:5;19577:1;19573;:5;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:656::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;705:6;702:1;699:13;696:91;;;775:1;770:2;761:6;750:9;746:22;742:31;735:42;696:91;-1:-1:-1;839:2:1;827:15;844:66;823:88;808:104;;;;914:2;804:113;;267:656;-1:-1:-1;;;267:656:1:o;928:154::-;-1:-1:-1;;;;;1007:5:1;1003:54;996:5;993:65;983:93;;1072:1;1069;1062:12;983:93;928:154;:::o;1087:315::-;1155:6;1163;1216:2;1204:9;1195:7;1191:23;1187:32;1184:52;;;1232:1;1229;1222:12;1184:52;1271:9;1258:23;1290:31;1315:5;1290:31;:::i;:::-;1340:5;1392:2;1377:18;;;;1364:32;;-1:-1:-1;;;1087:315:1:o;1599:247::-;1658:6;1711:2;1699:9;1690:7;1686:23;1682:32;1679:52;;;1727:1;1724;1717:12;1679:52;1766:9;1753:23;1785:31;1810:5;1785:31;:::i;2291:180::-;2350:6;2403:2;2391:9;2382:7;2378:23;2374:32;2371:52;;;2419:1;2416;2409:12;2371:52;-1:-1:-1;2442:23:1;;2291:180;-1:-1:-1;2291:180:1:o;2476:456::-;2553:6;2561;2569;2622:2;2610:9;2601:7;2597:23;2593:32;2590:52;;;2638:1;2635;2628:12;2590:52;2677:9;2664:23;2696:31;2721:5;2696:31;:::i;:::-;2746:5;-1:-1:-1;2803:2:1;2788:18;;2775:32;2816:33;2775:32;2816:33;:::i;:::-;2476:456;;2868:7;;-1:-1:-1;;;2922:2:1;2907:18;;;;2894:32;;2476:456::o;3168:615::-;3254:6;3262;3315:2;3303:9;3294:7;3290:23;3286:32;3283:52;;;3331:1;3328;3321:12;3283:52;3371:9;3358:23;3400:18;3441:2;3433:6;3430:14;3427:34;;;3457:1;3454;3447:12;3427:34;3495:6;3484:9;3480:22;3470:32;;3540:7;3533:4;3529:2;3525:13;3521:27;3511:55;;3562:1;3559;3552:12;3511:55;3602:2;3589:16;3628:2;3620:6;3617:14;3614:34;;;3644:1;3641;3634:12;3614:34;3697:7;3692:2;3682:6;3679:1;3675:14;3671:2;3667:23;3663:32;3660:45;3657:65;;;3718:1;3715;3708:12;3657:65;3749:2;3741:11;;;;;3771:6;;-1:-1:-1;3168:615:1;;-1:-1:-1;;;;3168:615:1:o;3977:118::-;4063:5;4056:13;4049:21;4042:5;4039:32;4029:60;;4085:1;4082;4075:12;4100:382;4165:6;4173;4226:2;4214:9;4205:7;4201:23;4197:32;4194:52;;;4242:1;4239;4232:12;4194:52;4281:9;4268:23;4300:31;4325:5;4300:31;:::i;:::-;4350:5;-1:-1:-1;4407:2:1;4392:18;;4379:32;4420:30;4379:32;4420:30;:::i;:::-;4469:7;4459:17;;;4100:382;;;;;:::o;4487:241::-;4543:6;4596:2;4584:9;4575:7;4571:23;4567:32;4564:52;;;4612:1;4609;4602:12;4564:52;4651:9;4638:23;4670:28;4692:5;4670:28;:::i;4733:323::-;4809:6;4817;4870:2;4858:9;4849:7;4845:23;4841:32;4838:52;;;4886:1;4883;4876:12;4838:52;4922:9;4909:23;4899:33;;4982:2;4971:9;4967:18;4954:32;4995:31;5020:5;4995:31;:::i;5061:456::-;5138:6;5146;5154;5207:2;5195:9;5186:7;5182:23;5178:32;5175:52;;;5223:1;5220;5213:12;5175:52;5262:9;5249:23;5281:31;5306:5;5281:31;:::i;:::-;5331:5;-1:-1:-1;5383:2:1;5368:18;;5355:32;;-1:-1:-1;5439:2:1;5424:18;;5411:32;5452:33;5411:32;5452:33;:::i;:::-;5504:7;5494:17;;;5061:456;;;;;:::o;5522:388::-;5590:6;5598;5651:2;5639:9;5630:7;5626:23;5622:32;5619:52;;;5667:1;5664;5657:12;5619:52;5706:9;5693:23;5725:31;5750:5;5725:31;:::i;:::-;5775:5;-1:-1:-1;5832:2:1;5817:18;;5804:32;5845:33;5804:32;5845:33;:::i;6276:184::-;-1:-1:-1;;;6325:1:1;6318:88;6425:4;6422:1;6415:15;6449:4;6446:1;6439:15;6465:128;6505:3;6536:1;6532:6;6529:1;6526:13;6523:39;;;6542:18;;:::i;:::-;-1:-1:-1;6578:9:1;;6465:128::o;6955:437::-;7034:1;7030:12;;;;7077;;;7098:61;;7152:4;7144:6;7140:17;7130:27;;7098:61;7205:2;7197:6;7194:14;7174:18;7171:38;7168:218;;;-1:-1:-1;;;7239:1:1;7232:88;7343:4;7340:1;7333:15;7371:4;7368:1;7361:15;7168:218;;6955:437;;;:::o;8159:228::-;8199:7;8325:1;-1:-1:-1;;8253:74:1;8250:1;8247:81;8242:1;8235:9;8228:17;8224:105;8221:131;;;8332:18;;:::i;:::-;-1:-1:-1;8372:9:1;;8159:228::o;8392:274::-;8432:1;8458;8448:189;;-1:-1:-1;;;8490:1:1;8483:88;8594:4;8591:1;8584:15;8622:4;8619:1;8612:15;8448:189;-1:-1:-1;8651:9:1;;8392:274::o;9087:184::-;-1:-1:-1;;;9136:1:1;9129:88;9236:4;9233:1;9226:15;9260:4;9257:1;9250:15;9276:195;9315:3;-1:-1:-1;;9339:5:1;9336:77;9333:103;;;9416:18;;:::i;:::-;-1:-1:-1;9463:1:1;9452:13;;9276:195::o;10251:184::-;10321:6;10374:2;10362:9;10353:7;10349:23;10345:32;10342:52;;;10390:1;10387;10380:12;10342:52;-1:-1:-1;10413:16:1;;10251:184;-1:-1:-1;10251:184:1:o;10742:245::-;10809:6;10862:2;10850:9;10841:7;10837:23;10833:32;10830:52;;;10878:1;10875;10868:12;10830:52;10910:9;10904:16;10929:28;10951:5;10929:28;:::i;17414:125::-;17454:4;17482:1;17479;17476:8;17473:34;;;17487:18;;:::i;:::-;-1:-1:-1;17524:9:1;;17414:125::o;18669:251::-;18739:6;18792:2;18780:9;18771:7;18767:23;18763:32;18760:52;;;18808:1;18805;18798:12;18760:52;18840:9;18834:16;18859:31;18884:5;18859:31;:::i;18925:1026::-;19187:4;19235:3;19224:9;19220:19;19266:6;19255:9;19248:25;19292:2;19330:6;19325:2;19314:9;19310:18;19303:34;19373:3;19368:2;19357:9;19353:18;19346:31;19397:6;19432;19426:13;19463:6;19455;19448:22;19501:3;19490:9;19486:19;19479:26;;19540:2;19532:6;19528:15;19514:29;;19561:1;19571:218;19585:6;19582:1;19579:13;19571:218;;;19650:13;;-1:-1:-1;;;;;19646:62:1;19634:75;;19764:15;;;;19729:12;;;;19607:1;19600:9;19571:218;;;-1:-1:-1;;;;;;;19845:55:1;;;;19840:2;19825:18;;19818:83;-1:-1:-1;;;19932:3:1;19917:19;19910:35;19806:3;18925:1026;-1:-1:-1;;;18925:1026:1:o;20591:306::-;20679:6;20687;20695;20748:2;20736:9;20727:7;20723:23;20719:32;20716:52;;;20764:1;20761;20754:12;20716:52;20793:9;20787:16;20777:26;;20843:2;20832:9;20828:18;20822:25;20812:35;;20887:2;20876:9;20872:18;20866:25;20856:35;;20591:306;;;;;:::o

Swarm Source

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