ETH Price: $3,375.53 (+0.61%)
Gas: 8 Gwei

Token

KANGO (KANGO)
 

Overview

Max Total Supply

100,000,000 KANGO

Holders

146

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
34,016.811010000000154227 KANGO

Value
$0.00
0x3568cb689c9077e5946c71c3685be44a96f18cd6
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:
KANGO

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

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

pragma solidity >=0.6.2;

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

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

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

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

pragma solidity >=0.6.2;


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

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

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

pragma solidity >=0.5.0;

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

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

pragma solidity >=0.5.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: hardhat/console.sol


pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
	}

	function logUint(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
	}

	function log(uint p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
	}

	function log(uint p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
	}

	function log(uint p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
	}

	function log(string memory p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
	}

	function log(uint p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
	}

	function log(uint p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
	}

	function log(uint p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
	}

	function log(uint p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
	}

	function log(uint p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
	}

	function log(uint p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
	}

	function log(uint p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
	}

	function log(uint p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
	}

	function log(uint p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
	}

	function log(uint p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
	}

	function log(uint p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
	}

	function log(bool p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
	}

	function log(bool p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
	}

	function log(bool p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
	}

	function log(address p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
	}

	function log(address p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
	}

	function log(address p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}

// File: contracts/KANGO.sol

//SPDX-License-Identifier: Unlicense
pragma solidity = 0.8.7;










contract KANGO is ERC20, Ownable {

    modifier lockSwap {
        _inSwap = true;
        _;
        _inSwap = false;
    }

    modifier liquidityAdd {
        _inLiquidityAdd = true;
        _;
        _inLiquidityAdd = false;
    }

    bool internal _inSwap = false;
    bool internal _inLiquidityAdd = false;
    bool public tradingActive = false;
    address internal _pair;

    uint public constant MAX_SUPPLY = 100_000_000 ether;

    uint internal _maxTransfer = 5;

    uint public buyTax = 90;
    uint public sellTax = 90;
    uint public antiJeetTax = 240;

    uint public minSwapThreshold = 100_000 ether;
    uint public maxWallet = 1_000_000 ether;
    bool public swapFees = true;

    address payable public marketingWallet;

    uint internal _totalSupply = 0;
    IUniswapV2Router02 internal _router = IUniswapV2Router02(address(0));

    mapping(address => uint) private _balances;
    mapping(address => bool) private _taxExcluded;
    mapping(address => uint256) public taxReliefStartDate;

    constructor(
        address _uniswapFactory,
        address _uniswapRouter,
        address payable _marketingWallet
    ) ERC20("KANGO", "KANGO") Ownable() {
        addTaxExcluded(owner());
        addTaxExcluded(address(0));
        addTaxExcluded(_marketingWallet);
        addTaxExcluded(address(this));

        marketingWallet = _marketingWallet;

        _router = IUniswapV2Router02(_uniswapRouter);
        IUniswapV2Factory uniswapContract = IUniswapV2Factory(_uniswapFactory);
        _pair = uniswapContract.createPair(address(this), _router.WETH());
    }

    /// @notice Change the address of the marketing wallet
    /// @param _marketingWallet The new address of the marketing wallet
    function setMarketingWallet(address payable _marketingWallet) external onlyOwner() {
        marketingWallet = _marketingWallet;
    }

    /// @notice Change the buy tax rate
    /// @param _buyTax - 1 digit precision e.g. _buyTax = 60 results in a 6% buy tax
    function setBuyTax(uint _buyTax) external onlyOwner() {
        require(_buyTax <= 900, "Buy tax cannot be higher than 90%");
        buyTax = _buyTax;
    }

    /// @notice Change the sell tax rate
    /// @param _sellTax - 1 digit precision e.g. _sellTax = 60 results in a 6% sell tax
    function setSellTax(uint _sellTax) external onlyOwner() {
        require(_sellTax <= 900, "Sell tax cannot be higher than 90%");
        sellTax = _sellTax;
    }

    /// @notice Change the anti-jeet sell tax rate
    /// @param _antiJeetTax - 1 digit precision e.g. _antiJeetTax = 200 results in a 20% anti-jeet sell tax
    function setAntiJeetTax(uint _antiJeetTax) external onlyOwner() {
        require(_antiJeetTax <= 900, "Anti-jeet sell tax cannot be higher than 90%");
        antiJeetTax = _antiJeetTax;
    }

    /// @notice Change the minimum contract KANGO balance before `_swap` gets invoked
    /// @param _minSwapThreshold The new minimum balance
    function setMinSwapThreshold(uint _minSwapThreshold) external onlyOwner() {
        minSwapThreshold = _minSwapThreshold;
    }

    /// @notice Rescue KANGO from the marketing amount
    /// @dev Should only be used in an emergency
    /// @param _amount The amount of KANGO to rescue
    /// @param _recipient The recipient of the rescued KANGO
    function rescueMarketingTokens(uint _amount, address _recipient) external onlyOwner() {
        uint amount = balanceOf(address(this));
        uint marketingAmount = amount / 2;
        require(_amount <= marketingAmount, "Amount cannot be greater than the available marketing tokens");
        _rawTransfer(address(this), _recipient, _amount);
    }

    /// @notice Rescue KANGO from the liquidity amount
    /// @dev Should only be used in an emergency
    /// @param _amount The amount of KANGO to rescue
    /// @param _recipient The recipient of the rescued KANGO
    function rescueLiquidityTokens(uint _amount, address _recipient) external onlyOwner() {
        uint amount = balanceOf(address(this));
        uint liquidityAmount = amount / 2;
        require(_amount <= liquidityAmount, "Amount cannot be greater than the available liquidity tokens");
        _rawTransfer(address(this), _recipient, _amount);
    }

    /// @notice Add to the liquidity
    /// @param tokens Amount of KANGO tokens
    function addLiquidity(uint tokens) external payable onlyOwner() liquidityAdd {
        _mint(address(this), tokens);
        _approve(address(this), address(_router), tokens);

        _router.addLiquidityETH{value : msg.value}(
            address(this),
            tokens,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    /// @notice Enables trading on Uniswap v2
    function enableTrading() external onlyOwner {
        tradingActive = true;
    }

    /// @notice Disables trading on Uniswap v2
    function disableTrading() external onlyOwner {
        tradingActive = false;
    }

    /// @notice Check if a wallet is excluded from tax
    /// @param account Address
    function isTaxExcluded(address account) public view returns (bool) {
        return _taxExcluded[account];
    }

    /// @notice Add a wallet to be excluded from tax
    /// @param account Address
    function addTaxExcluded(address account) public onlyOwner() {
        require(!isTaxExcluded(account), "Account must not be excluded");

        _taxExcluded[account] = true;
    }

    /// @notice Remove a wallet from being excluded from tax
    /// @param account Address
    function removeTaxExcluded(address account) external onlyOwner() {
        require(isTaxExcluded(account), "Account must not be excluded");

        _taxExcluded[account] = false;
    }

    function balanceOf(address account)
    public
    view
    virtual
    override
    returns (uint)
    {
        return _balances[account];
    }

    function _addBalance(address account, uint amount) internal {
        _balances[account] = _balances[account] + amount;
    }

    function _subtractBalance(address account, uint amount) internal {
        _balances[account] = _balances[account] - amount;
    }

    function _transfer(
        address sender,
        address recipient,
        uint amount
    ) internal override {
        if (isTaxExcluded(sender) || isTaxExcluded(recipient)) {
            _rawTransfer(sender, recipient, amount);
            return;
        }

        uint maxTxAmount = totalSupply() * _maxTransfer / 1000;
        require(amount <= maxTxAmount || _inLiquidityAdd || _inSwap || recipient == address(_router), "Exceeds max transaction amount");

        uint amountToSwap = balanceOf(address(this));
        bool overMinSwapThreshold = amountToSwap >= minSwapThreshold;

        if (
            overMinSwapThreshold &&
            !_inSwap &&
            sender != _pair &&
            swapFees
        ) {
            _swap(minSwapThreshold);
        }

        uint send = amount;
        if (sender == _pair || recipient == _pair) {
            require(tradingActive, "Trading is not yet active");
            if (sender == _pair) {
                // buy
                if (balanceOf(recipient) <= 1 ether) {
                    taxReliefStartDate[recipient] = block.timestamp;
                }
                send = _getTaxAmounts(buyTax, amount);
                require(balanceOf(recipient) + send <= maxWallet, "Cannot buy over the maximum wallet limit");
            }
            if (recipient == _pair) {
                // sell
                uint userTaxReliefStartDate = getTaxReliefStartDate(sender);
                uint userSellTax = sellTax;
                if (userTaxReliefStartDate > 0 && block.timestamp < userTaxReliefStartDate + 1 days) {
                    userSellTax = antiJeetTax;
                }
                send = _getTaxAmounts(userSellTax, amount);
            }
        } else {
            // normal transfer between wallets
            if (balanceOf(recipient) <= 1 ether) {
                taxReliefStartDate[recipient] = block.timestamp;
            }
            require(balanceOf(recipient) + send <= maxWallet, "Cannot transfer to a wallet that would exceed the maximum wallet limit");
        }
        _rawTransfer(sender, recipient, send);

        uint totalAmount = amount - send;
        _rawTransfer(sender, address(this), totalAmount);
    }

    /// @notice Perform a Uniswap v2 swap from KANGO to ETH and handle tax distribution
    /// @param amount The amount of KANGO to swap in wei
    /// @dev `amount` is always <= this contract's ETH balance. Calculate and distribute marketing and reflection taxes
    function _swap(uint amount) internal lockSwap {
        uint liquidityAmount = amount / 2;
        // put aside half for liquidity
        uint totalTokensToSwap = amount - (liquidityAmount / 2);

        // approve the total amount so that the KANGO->ETH swap can take place as well as the addition to liquidity
        uint contractEthBalance = address(this).balance;
        _approve(address(this), address(_router), amount);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _router.WETH();
        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            totalTokensToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint tradeValue = address(this).balance - contractEthBalance;
        uint marketing = tradeValue * 2 / 3;
        uint liquidity = tradeValue - marketing;

        marketingWallet.transfer(marketing);
        _addToKANGOLiquidity(liquidityAmount, liquidity);
    }

    function getTaxReliefStartDate(address addr) public view returns (uint256) {
        return taxReliefStartDate[addr];
    }

    function _addToKANGOLiquidity(uint tokenAmount, uint ethAmount) private liquidityAdd {
        _approve(address(this), address(_router), tokenAmount);
        _router.addLiquidityETH{value : ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
    }

    function swapAll() external onlyOwner() {
        uint maxTxAmount = totalSupply() * _maxTransfer / 1000;
        uint amountToSwap = balanceOf(address(this));

        if (amountToSwap >= maxTxAmount)
        {
            amountToSwap = maxTxAmount;
        }

        if (
            !_inSwap
        ) {
            _swap(amountToSwap);
        }
    }

    function withdrawAll() external onlyOwner() {
        payable(owner()).transfer(address(this).balance);
    }

    function _getTaxAmounts(uint tax, uint amount)
    internal pure returns (uint send)
    {
        uint totalTaxAmount = amount * tax / 1000;
        uint marketingTaxAmount = totalTaxAmount / 2;
        uint liquidityTaxAmount = totalTaxAmount - marketingTaxAmount;
        send = amount - marketingTaxAmount - liquidityTaxAmount;
    }

    function _rawTransfer(
        address sender,
        address recipient,
        uint amount
    ) internal {
        require(sender != address(0) && recipient != address(0), "transfer from the zero address");
        uint senderBalance = balanceOf(sender);
        require(senderBalance >= amount, "transfer amount exceeds balance");
        _subtractBalance(sender, amount);
        _addBalance(recipient, amount);
        emit Transfer(sender, recipient, amount);
    }

    /// @notice Set a maximum possible transfer limit
    /// @param maxTransfer - 1 digit precision in percent e.g. maxTransfer = 10 results in a maximum transfer limit of 1% for a given transfer
    function setMaxTransfer(uint maxTransfer) external onlyOwner() {
        require(maxTransfer <= maxWallet, "Max transfer cannot exceed max wallet");
        _maxTransfer = maxTransfer;
    }

    /// @notice Set a maximum wallet limit
    /// @param _maxWallet - maximum number of tokens (including 18 decimals)
    function setMaxWallet(uint _maxWallet) external onlyOwner() {
        require(_maxWallet <= totalSupply(), "Max wallet cannot exceed 100%");
        maxWallet = _maxWallet;
    }

    /// @notice Enable/disable whether or not swaps should occur
    /// @param _swapFees enabled = true, disabled = false
    function setSwapFees(bool _swapFees) external onlyOwner() {
        swapFees = _swapFees;
    }

    function totalSupply() public view override returns (uint) {
        return _totalSupply;
    }

    function _mint(address account, uint amount) internal override {
        require(_totalSupply + amount <= MAX_SUPPLY, "Max supply exceeded");
        _totalSupply += amount;
        _addBalance(account, amount);
        emit Transfer(address(0), account, amount);
    }

    function mint(address account, uint amount) external onlyOwner() {
        _mint(account, amount);
    }

    function airdrop(address[] memory accounts, uint[] memory amounts) external onlyOwner() {
        require(accounts.length == amounts.length, "array lengths must match");

        for (uint i = 0; i < accounts.length; i++) {
            _mint(accounts[i], amounts[i]);
        }
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_uniswapFactory","type":"address"},{"internalType":"address","name":"_uniswapRouter","type":"address"},{"internalType":"address payable","name":"_marketingWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":[],"name":"antiJeetTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getTaxReliefStartDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTaxExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"rescueLiquidityTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"rescueMarketingTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_antiJeetTax","type":"uint256"}],"name":"setAntiJeetTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTransfer","type":"uint256"}],"name":"setMaxTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minSwapThreshold","type":"uint256"}],"name":"setMinSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellTax","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapFees","type":"bool"}],"name":"setSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxReliefStartDate","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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526005805462ffffff60a01b19168155600755605a600881905560095560f0600a5569152d02c7e14af6800000600b5569d3c21bcecceda1000000600c55600d805460ff191660011790556000600e55600f80546001600160a01b03191690553480156200007057600080fd5b506040516200308f3803806200308f8339810160408190526200009391620004c4565b6040805180820182526005808252644b414e474f60d81b602080840182815285518087019096529285528401528151919291620000d391600391620003f7565b508051620000e9906004906020840190620003f7565b5050506200010662000100620002b260201b60201c565b620002b6565b620001236200011d6005546001600160a01b031690565b62000308565b6200012f600062000308565b6200013a8162000308565b620001453062000308565b600d80546001600160a01b0380841661010002610100600160a81b031990921691909117909155600f80548483166001600160a01b03199091168117909155604080516315ab88c960e31b81529051869384169263c9c6539692309263ad5c464891600480820192602092909190829003018186803b158015620001c857600080fd5b505afa158015620001dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020391906200049d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200024c57600080fd5b505af115801562000261573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028791906200049d565b600680546001600160a01b0319166001600160a01b0392909216919091179055506200056e92505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620003685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526011602052604090205460ff1615620003d35760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e74206d757374206e6f74206265206578636c756465640000000060448201526064016200035f565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b828054620004059062000518565b90600052602060002090601f01602090048101928262000429576000855562000474565b82601f106200044457805160ff191683800117855562000474565b8280016001018555821562000474579182015b828111156200047457825182559160200191906001019062000457565b506200048292915062000486565b5090565b5b8082111562000482576000815560010162000487565b600060208284031215620004b057600080fd5b8151620004bd8162000555565b9392505050565b600080600060608486031215620004da57600080fd5b8351620004e78162000555565b6020850151909350620004fa8162000555565b60408501519092506200050d8162000555565b809150509250925092565b600181811c908216806200052d57607f821691505b602082108114156200054f57634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b03811681146200056b57600080fd5b50565b612b11806200057e6000396000f3fe6080604052600436106102f65760003560e01c806369ec8e9c1161018f57806395d89b41116100e1578063cc1776d31161008a578063e3f9fc6311610064578063e3f9fc6314610870578063f2fde38b14610890578063f8b45b05146108b057600080fd5b8063cc1776d3146107f4578063dc1052e21461080a578063dd62ed3e1461082a57600080fd5b8063b41356c9116100bb578063b41356c914610799578063b9ccf21d146107b9578063bbc0c742146107d357600080fd5b806395d89b4114610744578063a457c2d714610759578063a9059cbb1461077957600080fd5b806379cde594116101435780638a8c523c1161011d5780638a8c523c146106f15780638cd09d50146107065780638da5cb5b1461072657600080fd5b806379cde59414610690578063853828b6146106c657806387644953146106db57600080fd5b8063715018a611610174578063715018a61461061e57806375f0a8741461063357806377348de91461067057600080fd5b806369ec8e9c146105af57806370a08231146105e857600080fd5b80633daacfef116102485780634f7041a5116101fc5780635d0044ca116101d65780635d0044ca1461054f5780635d098b381461056f578063672434821461058f57600080fd5b80634f7041a5146105065780634fb0b7e71461051c57806351c6590a1461053c57600080fd5b806340c10f191161022d57806340c10f19146104b057806341a7a4a8146104d057806341ac9036146104e657600080fd5b80633daacfef1461047b5780633e9ffbea1461049b57600080fd5b806318160ddd116102aa57806332cb6b0c1161028457806332cb6b0c1461040f578063349c70d51461042e578063395093511461045b57600080fd5b806318160ddd146103b457806323b872dd146103d3578063313ce567146103f357600080fd5b8063095ea7b3116102db578063095ea7b31461034f57806311550bf31461037f57806317700f011461039f57600080fd5b80630231a6491461030257806306fdde031461032457600080fd5b366102fd57005b600080fd5b34801561030e57600080fd5b5061032261031d366004612817565b6108c6565b005b34801561033057600080fd5b50610339610990565b6040516103469190612883565b60405180910390f35b34801561035b57600080fd5b5061036f61036a366004612700565b610a22565b6040519015158152602001610346565b34801561038b57600080fd5b5061032261039a366004612830565b610a3a565b3480156103ab57600080fd5b50610322610b27565b3480156103c057600080fd5b50600e545b604051908152602001610346565b3480156103df57600080fd5b5061036f6103ee3660046126bf565b610b7e565b3480156103ff57600080fd5b5060405160128152602001610346565b34801561041b57600080fd5b506103c56a52b7d2dcc80cd2e400000081565b34801561043a57600080fd5b506103c5610449366004612645565b60126020526000908152604090205481565b34801561046757600080fd5b5061036f610476366004612700565b610ba2565b34801561048757600080fd5b50610322610496366004612830565b610be1565b3480156104a757600080fd5b50610322610cbd565b3480156104bc57600080fd5b506103226104cb366004612700565b610d65565b3480156104dc57600080fd5b506103c5600a5481565b3480156104f257600080fd5b50610322610501366004612817565b610db7565b34801561051257600080fd5b506103c560085481565b34801561052857600080fd5b50610322610537366004612645565b610e04565b61032261054a366004612817565b610ed9565b34801561055b57600080fd5b5061032261056a366004612817565b611046565b34801561057b57600080fd5b5061032261058a366004612645565b6110e5565b34801561059b57600080fd5b506103226105aa36600461272c565b61116c565b3480156105bb57600080fd5b5061036f6105ca366004612645565b6001600160a01b031660009081526011602052604090205460ff1690565b3480156105f457600080fd5b506103c5610603366004612645565b6001600160a01b031660009081526010602052604090205490565b34801561062a57600080fd5b50610322611264565b34801561063f57600080fd5b50600d546106589061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610346565b34801561067c57600080fd5b5061032261068b366004612817565b6112b8565b34801561069c57600080fd5b506103c56106ab366004612645565b6001600160a01b031660009081526012602052604090205490565b3480156106d257600080fd5b5061032261137d565b3480156106e757600080fd5b506103c5600b5481565b3480156106fd57600080fd5b50610322611401565b34801561071257600080fd5b50610322610721366004612817565b61145e565b34801561073257600080fd5b506005546001600160a01b0316610658565b34801561075057600080fd5b50610339611523565b34801561076557600080fd5b5061036f610774366004612700565b611532565b34801561078557600080fd5b5061036f610794366004612700565b6115dc565b3480156107a557600080fd5b506103226107b4366004612645565b6115ea565b3480156107c557600080fd5b50600d5461036f9060ff1681565b3480156107df57600080fd5b5060055461036f90600160b01b900460ff1681565b34801561080057600080fd5b506103c560095481565b34801561081657600080fd5b50610322610825366004612817565b6116bb565b34801561083657600080fd5b506103c5610845366004612686565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561087c57600080fd5b5061032261088b3660046127f5565b611780565b34801561089c57600080fd5b506103226108ab366004612645565b6117db565b3480156108bc57600080fd5b506103c5600c5481565b6005546001600160a01b031633146109135760405162461bcd60e51b81526020600482018190526024820152600080516020612abc83398151915260448201526064015b60405180910390fd5b61038481111561098b5760405162461bcd60e51b815260206004820152602c60248201527f416e74692d6a6565742073656c6c207461782063616e6e6f742062652068696760448201527f686572207468616e203930250000000000000000000000000000000000000000606482015260840161090a565b600a55565b60606003805461099f90612a0e565b80601f01602080910402602001604051908101604052809291908181526020018280546109cb90612a0e565b8015610a185780601f106109ed57610100808354040283529160200191610a18565b820191906000526020600020905b8154815290600101906020018083116109fb57829003601f168201915b5050505050905090565b600033610a308185856118a8565b5060019392505050565b6005546001600160a01b03163314610a825760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b3060009081526010602052604081205490610a9e6002836129b6565b905080841115610b165760405162461bcd60e51b815260206004820152603c60248201527f416d6f756e742063616e6e6f742062652067726561746572207468616e20746860448201527f6520617661696c61626c65206c697175696469747920746f6b656e7300000000606482015260840161090a565b610b21308486611a00565b50505050565b6005546001600160a01b03163314610b6f5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6005805460ff60b01b19169055565b600033610b8c858285611b3c565b610b97858585611bc8565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610a309082908690610bdc90879061299e565b6118a8565b6005546001600160a01b03163314610c295760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b3060009081526010602052604081205490610c456002836129b6565b905080841115610b165760405162461bcd60e51b815260206004820152603c60248201527f416d6f756e742063616e6e6f742062652067726561746572207468616e20746860448201527f6520617661696c61626c65206d61726b6574696e6720746f6b656e7300000000606482015260840161090a565b6005546001600160a01b03163314610d055760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b60006103e8600754610d16600e5490565b610d2091906129d8565b610d2a91906129b6565b30600090815260106020526040902054909150818110610d475750805b600554600160a01b900460ff16610d6157610d6181612073565b5050565b6005546001600160a01b03163314610dad5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b610d6182826122e0565b6005546001600160a01b03163314610dff5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b600b55565b6005546001600160a01b03163314610e4c5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6001600160a01b03811660009081526011602052604090205460ff1615610eb55760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e74206d757374206e6f74206265206578636c7564656400000000604482015260640161090a565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6005546001600160a01b03163314610f215760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6005805460ff60a81b1916600160a81b179055610f3e30826122e0565b600f54610f569030906001600160a01b0316836118a8565b600f546001600160a01b031663f305d719343084600080610f7f6005546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015610ffa57600080fd5b505af115801561100e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110339190612855565b50506005805460ff60a81b191690555050565b6005546001600160a01b0316331461108e5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b600e548111156110e05760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c65742063616e6e6f74206578636565642031303025000000604482015260640161090a565b600c55565b6005546001600160a01b0316331461112d5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b600d80546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6005546001600160a01b031633146111b45760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b80518251146112055760405162461bcd60e51b815260206004820152601860248201527f6172726179206c656e67746873206d757374206d617463680000000000000000604482015260640161090a565b60005b825181101561125f5761124d83828151811061122657611226612a7a565b602002602001015183838151811061124057611240612a7a565b60200260200101516122e0565b8061125781612a49565b915050611208565b505050565b6005546001600160a01b031633146112ac5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6112b660006123af565b565b6005546001600160a01b031633146113005760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b600c548111156113785760405162461bcd60e51b815260206004820152602560248201527f4d6178207472616e736665722063616e6e6f7420657863656564206d6178207760448201527f616c6c6574000000000000000000000000000000000000000000000000000000606482015260840161090a565b600755565b6005546001600160a01b031633146113c55760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156113fe573d6000803e3d6000fd5b50565b6005546001600160a01b031633146114495760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6005805460ff60b01b1916600160b01b179055565b6005546001600160a01b031633146114a65760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b61038481111561151e5760405162461bcd60e51b815260206004820152602260248201527f53656c6c207461782063616e6e6f7420626520686967686572207468616e203960448201527f3025000000000000000000000000000000000000000000000000000000000000606482015260840161090a565b600955565b60606004805461099f90612a0e565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156115cf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161090a565b610b9782868684036118a8565b600033610a30818585611bc8565b6005546001600160a01b031633146116325760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6001600160a01b03811660009081526011602052604090205460ff1661169a5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e74206d757374206e6f74206265206578636c7564656400000000604482015260640161090a565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6005546001600160a01b031633146117035760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b61038481111561177b5760405162461bcd60e51b815260206004820152602160248201527f427579207461782063616e6e6f7420626520686967686572207468616e20393060448201527f2500000000000000000000000000000000000000000000000000000000000000606482015260840161090a565b600855565b6005546001600160a01b031633146117c85760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b600d805460ff1916911515919091179055565b6005546001600160a01b031633146118235760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6001600160a01b03811661189f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161090a565b6113fe816123af565b6001600160a01b0383166119235760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161090a565b6001600160a01b03821661199f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161090a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831615801590611a2057506001600160a01b03821615155b611a6c5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f20616464726573730000604482015260640161090a565b6001600160a01b03831660009081526010602052604090205481811015611ad55760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e636500604482015260640161090a565b611adf8483612419565b611ae9838361245d565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b2e91815260200190565b60405180910390a350505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610b215781811015611bbb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161090a565b610b2184848484036118a8565b6001600160a01b03831660009081526011602052604090205460ff1680611c0757506001600160a01b03821660009081526011602052604090205460ff165b15611c175761125f838383611a00565b60006103e8600754611c28600e5490565b611c3291906129d8565b611c3c91906129b6565b90508082111580611c565750600554600160a81b900460ff165b80611c6a5750600554600160a01b900460ff165b80611c825750600f546001600160a01b038481169116145b611cce5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178207472616e73616374696f6e20616d6f756e740000604482015260640161090a565b30600090815260106020526040902054600b5481108015908190611cfc5750600554600160a01b900460ff16155b8015611d1657506006546001600160a01b03878116911614155b8015611d245750600d5460ff165b15611d3457611d34600b54612073565b60065484906001600160a01b0388811691161480611d5f57506006546001600160a01b038781169116145b15611f3557600554600160b01b900460ff16611dbd5760405162461bcd60e51b815260206004820152601960248201527f54726164696e67206973206e6f74207965742061637469766500000000000000604482015260640161090a565b6006546001600160a01b0388811691161415611ecb57670de0b6b3a7640000611dfb876001600160a01b031660009081526010602052604090205490565b11611e1c576001600160a01b03861660009081526012602052604090204290555b611e2860085486612481565b9050600c5481611e4d886001600160a01b031660009081526010602052604090205490565b611e57919061299e565b1115611ecb5760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420627579206f76657220746865206d6178696d756d2077616c6c60448201527f6574206c696d6974000000000000000000000000000000000000000000000000606482015260840161090a565b6006546001600160a01b0387811691161415611f30576001600160a01b0387166000908152601260205260409020546009548115801590611f175750611f14826201518061299e565b42105b15611f215750600a545b611f2b8188612481565b925050505b612045565b670de0b6b3a7640000611f5d876001600160a01b031660009081526010602052604090205490565b11611f7e576001600160a01b03861660009081526012602052604090204290555b600c5481611fa1886001600160a01b031660009081526010602052604090205490565b611fab919061299e565b11156120455760405162461bcd60e51b815260206004820152604660248201527f43616e6e6f74207472616e7366657220746f20612077616c6c6574207468617460448201527f20776f756c642065786365656420746865206d6178696d756d2077616c6c657460648201527f206c696d69740000000000000000000000000000000000000000000000000000608482015260a40161090a565b612050878783611a00565b600061205c82876129f7565b9050612069883083611a00565b5050505050505050565b6005805460ff60a01b1916600160a01b17905560006120936002836129b6565b905060006120a26002836129b6565b6120ac90846129f7565b600f5490915047906120c99030906001600160a01b0316866118a8565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120fe576120fe612a7a565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561216b57600080fd5b505afa15801561217f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a39190612669565b816001815181106121b6576121b6612a7a565b6001600160a01b039283166020918202929092010152600f546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906122159086906000908690309042906004016128d8565b600060405180830381600087803b15801561222f57600080fd5b505af1158015612243573d6000803e3d6000fd5b505050506000824761225591906129f7565b9050600060036122668360026129d8565b61227091906129b6565b9050600061227e82846129f7565b600d5460405191925061010090046001600160a01b0316906108fc8415029084906000818181858888f193505050501580156122be573d6000803e3d6000fd5b506122c987826124d9565b50506005805460ff60a01b19169055505050505050565b6a52b7d2dcc80cd2e400000081600e546122fa919061299e565b11156123485760405162461bcd60e51b815260206004820152601360248201527f4d617820737570706c7920657863656564656400000000000000000000000000604482015260640161090a565b80600e600082825461235a919061299e565b9091555061236a9050828261245d565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526010602052604090205461243d9082906129f7565b6001600160a01b0390921660009081526010602052604090209190915550565b6001600160a01b03821660009081526010602052604090205461243d90829061299e565b6000806103e861249185856129d8565b61249b91906129b6565b905060006124aa6002836129b6565b905060006124b882846129f7565b9050806124c583876129f7565b6124cf91906129f7565b9695505050505050565b6005805460ff60a81b1916600160a81b179055600f546125049030906001600160a01b0316846118a8565b600f546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b15801561258657600080fd5b505af115801561259a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125bf9190612855565b50506005805460ff60a81b19169055505050565b600082601f8301126125e457600080fd5b813560206125f96125f48361297a565b612949565b80838252828201915082860187848660051b890101111561261957600080fd5b60005b858110156126385781358452928401929084019060010161261c565b5090979650505050505050565b60006020828403121561265757600080fd5b813561266281612aa6565b9392505050565b60006020828403121561267b57600080fd5b815161266281612aa6565b6000806040838503121561269957600080fd5b82356126a481612aa6565b915060208301356126b481612aa6565b809150509250929050565b6000806000606084860312156126d457600080fd5b83356126df81612aa6565b925060208401356126ef81612aa6565b929592945050506040919091013590565b6000806040838503121561271357600080fd5b823561271e81612aa6565b946020939093013593505050565b6000806040838503121561273f57600080fd5b823567ffffffffffffffff8082111561275757600080fd5b818501915085601f83011261276b57600080fd5b8135602061277b6125f48361297a565b8083825282820191508286018a848660051b890101111561279b57600080fd5b600096505b848710156127c75780356127b381612aa6565b8352600196909601959183019183016127a0565b50965050860135925050808211156127de57600080fd5b506127eb858286016125d3565b9150509250929050565b60006020828403121561280757600080fd5b8135801515811461266257600080fd5b60006020828403121561282957600080fd5b5035919050565b6000806040838503121561284357600080fd5b8235915060208301356126b481612aa6565b60008060006060848603121561286a57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156128b057858101830151858201604001528201612894565b818111156128c2576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129285784516001600160a01b031683529383019391830191600101612903565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561297257612972612a90565b604052919050565b600067ffffffffffffffff82111561299457612994612a90565b5060051b60200190565b600082198211156129b1576129b1612a64565b500190565b6000826129d357634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156129f2576129f2612a64565b500290565b600082821015612a0957612a09612a64565b500390565b600181811c90821680612a2257607f821691505b60208210811415612a4357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612a5d57612a5d612a64565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146113fe57600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122033130f9326ae63fbcdc2bf0918ec4a6e2cd437b9888b4597c896da67dfbf44e664736f6c634300080700330000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000bdb0b4e03de37b856d6f71b8905084b597e6ceda

Deployed Bytecode

0x6080604052600436106102f65760003560e01c806369ec8e9c1161018f57806395d89b41116100e1578063cc1776d31161008a578063e3f9fc6311610064578063e3f9fc6314610870578063f2fde38b14610890578063f8b45b05146108b057600080fd5b8063cc1776d3146107f4578063dc1052e21461080a578063dd62ed3e1461082a57600080fd5b8063b41356c9116100bb578063b41356c914610799578063b9ccf21d146107b9578063bbc0c742146107d357600080fd5b806395d89b4114610744578063a457c2d714610759578063a9059cbb1461077957600080fd5b806379cde594116101435780638a8c523c1161011d5780638a8c523c146106f15780638cd09d50146107065780638da5cb5b1461072657600080fd5b806379cde59414610690578063853828b6146106c657806387644953146106db57600080fd5b8063715018a611610174578063715018a61461061e57806375f0a8741461063357806377348de91461067057600080fd5b806369ec8e9c146105af57806370a08231146105e857600080fd5b80633daacfef116102485780634f7041a5116101fc5780635d0044ca116101d65780635d0044ca1461054f5780635d098b381461056f578063672434821461058f57600080fd5b80634f7041a5146105065780634fb0b7e71461051c57806351c6590a1461053c57600080fd5b806340c10f191161022d57806340c10f19146104b057806341a7a4a8146104d057806341ac9036146104e657600080fd5b80633daacfef1461047b5780633e9ffbea1461049b57600080fd5b806318160ddd116102aa57806332cb6b0c1161028457806332cb6b0c1461040f578063349c70d51461042e578063395093511461045b57600080fd5b806318160ddd146103b457806323b872dd146103d3578063313ce567146103f357600080fd5b8063095ea7b3116102db578063095ea7b31461034f57806311550bf31461037f57806317700f011461039f57600080fd5b80630231a6491461030257806306fdde031461032457600080fd5b366102fd57005b600080fd5b34801561030e57600080fd5b5061032261031d366004612817565b6108c6565b005b34801561033057600080fd5b50610339610990565b6040516103469190612883565b60405180910390f35b34801561035b57600080fd5b5061036f61036a366004612700565b610a22565b6040519015158152602001610346565b34801561038b57600080fd5b5061032261039a366004612830565b610a3a565b3480156103ab57600080fd5b50610322610b27565b3480156103c057600080fd5b50600e545b604051908152602001610346565b3480156103df57600080fd5b5061036f6103ee3660046126bf565b610b7e565b3480156103ff57600080fd5b5060405160128152602001610346565b34801561041b57600080fd5b506103c56a52b7d2dcc80cd2e400000081565b34801561043a57600080fd5b506103c5610449366004612645565b60126020526000908152604090205481565b34801561046757600080fd5b5061036f610476366004612700565b610ba2565b34801561048757600080fd5b50610322610496366004612830565b610be1565b3480156104a757600080fd5b50610322610cbd565b3480156104bc57600080fd5b506103226104cb366004612700565b610d65565b3480156104dc57600080fd5b506103c5600a5481565b3480156104f257600080fd5b50610322610501366004612817565b610db7565b34801561051257600080fd5b506103c560085481565b34801561052857600080fd5b50610322610537366004612645565b610e04565b61032261054a366004612817565b610ed9565b34801561055b57600080fd5b5061032261056a366004612817565b611046565b34801561057b57600080fd5b5061032261058a366004612645565b6110e5565b34801561059b57600080fd5b506103226105aa36600461272c565b61116c565b3480156105bb57600080fd5b5061036f6105ca366004612645565b6001600160a01b031660009081526011602052604090205460ff1690565b3480156105f457600080fd5b506103c5610603366004612645565b6001600160a01b031660009081526010602052604090205490565b34801561062a57600080fd5b50610322611264565b34801561063f57600080fd5b50600d546106589061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610346565b34801561067c57600080fd5b5061032261068b366004612817565b6112b8565b34801561069c57600080fd5b506103c56106ab366004612645565b6001600160a01b031660009081526012602052604090205490565b3480156106d257600080fd5b5061032261137d565b3480156106e757600080fd5b506103c5600b5481565b3480156106fd57600080fd5b50610322611401565b34801561071257600080fd5b50610322610721366004612817565b61145e565b34801561073257600080fd5b506005546001600160a01b0316610658565b34801561075057600080fd5b50610339611523565b34801561076557600080fd5b5061036f610774366004612700565b611532565b34801561078557600080fd5b5061036f610794366004612700565b6115dc565b3480156107a557600080fd5b506103226107b4366004612645565b6115ea565b3480156107c557600080fd5b50600d5461036f9060ff1681565b3480156107df57600080fd5b5060055461036f90600160b01b900460ff1681565b34801561080057600080fd5b506103c560095481565b34801561081657600080fd5b50610322610825366004612817565b6116bb565b34801561083657600080fd5b506103c5610845366004612686565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561087c57600080fd5b5061032261088b3660046127f5565b611780565b34801561089c57600080fd5b506103226108ab366004612645565b6117db565b3480156108bc57600080fd5b506103c5600c5481565b6005546001600160a01b031633146109135760405162461bcd60e51b81526020600482018190526024820152600080516020612abc83398151915260448201526064015b60405180910390fd5b61038481111561098b5760405162461bcd60e51b815260206004820152602c60248201527f416e74692d6a6565742073656c6c207461782063616e6e6f742062652068696760448201527f686572207468616e203930250000000000000000000000000000000000000000606482015260840161090a565b600a55565b60606003805461099f90612a0e565b80601f01602080910402602001604051908101604052809291908181526020018280546109cb90612a0e565b8015610a185780601f106109ed57610100808354040283529160200191610a18565b820191906000526020600020905b8154815290600101906020018083116109fb57829003601f168201915b5050505050905090565b600033610a308185856118a8565b5060019392505050565b6005546001600160a01b03163314610a825760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b3060009081526010602052604081205490610a9e6002836129b6565b905080841115610b165760405162461bcd60e51b815260206004820152603c60248201527f416d6f756e742063616e6e6f742062652067726561746572207468616e20746860448201527f6520617661696c61626c65206c697175696469747920746f6b656e7300000000606482015260840161090a565b610b21308486611a00565b50505050565b6005546001600160a01b03163314610b6f5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6005805460ff60b01b19169055565b600033610b8c858285611b3c565b610b97858585611bc8565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610a309082908690610bdc90879061299e565b6118a8565b6005546001600160a01b03163314610c295760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b3060009081526010602052604081205490610c456002836129b6565b905080841115610b165760405162461bcd60e51b815260206004820152603c60248201527f416d6f756e742063616e6e6f742062652067726561746572207468616e20746860448201527f6520617661696c61626c65206d61726b6574696e6720746f6b656e7300000000606482015260840161090a565b6005546001600160a01b03163314610d055760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b60006103e8600754610d16600e5490565b610d2091906129d8565b610d2a91906129b6565b30600090815260106020526040902054909150818110610d475750805b600554600160a01b900460ff16610d6157610d6181612073565b5050565b6005546001600160a01b03163314610dad5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b610d6182826122e0565b6005546001600160a01b03163314610dff5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b600b55565b6005546001600160a01b03163314610e4c5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6001600160a01b03811660009081526011602052604090205460ff1615610eb55760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e74206d757374206e6f74206265206578636c7564656400000000604482015260640161090a565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6005546001600160a01b03163314610f215760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6005805460ff60a81b1916600160a81b179055610f3e30826122e0565b600f54610f569030906001600160a01b0316836118a8565b600f546001600160a01b031663f305d719343084600080610f7f6005546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015610ffa57600080fd5b505af115801561100e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110339190612855565b50506005805460ff60a81b191690555050565b6005546001600160a01b0316331461108e5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b600e548111156110e05760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c65742063616e6e6f74206578636565642031303025000000604482015260640161090a565b600c55565b6005546001600160a01b0316331461112d5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b600d80546001600160a01b03909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6005546001600160a01b031633146111b45760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b80518251146112055760405162461bcd60e51b815260206004820152601860248201527f6172726179206c656e67746873206d757374206d617463680000000000000000604482015260640161090a565b60005b825181101561125f5761124d83828151811061122657611226612a7a565b602002602001015183838151811061124057611240612a7a565b60200260200101516122e0565b8061125781612a49565b915050611208565b505050565b6005546001600160a01b031633146112ac5760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6112b660006123af565b565b6005546001600160a01b031633146113005760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b600c548111156113785760405162461bcd60e51b815260206004820152602560248201527f4d6178207472616e736665722063616e6e6f7420657863656564206d6178207760448201527f616c6c6574000000000000000000000000000000000000000000000000000000606482015260840161090a565b600755565b6005546001600160a01b031633146113c55760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6005546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156113fe573d6000803e3d6000fd5b50565b6005546001600160a01b031633146114495760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6005805460ff60b01b1916600160b01b179055565b6005546001600160a01b031633146114a65760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b61038481111561151e5760405162461bcd60e51b815260206004820152602260248201527f53656c6c207461782063616e6e6f7420626520686967686572207468616e203960448201527f3025000000000000000000000000000000000000000000000000000000000000606482015260840161090a565b600955565b60606004805461099f90612a0e565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156115cf5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161090a565b610b9782868684036118a8565b600033610a30818585611bc8565b6005546001600160a01b031633146116325760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6001600160a01b03811660009081526011602052604090205460ff1661169a5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e74206d757374206e6f74206265206578636c7564656400000000604482015260640161090a565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6005546001600160a01b031633146117035760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b61038481111561177b5760405162461bcd60e51b815260206004820152602160248201527f427579207461782063616e6e6f7420626520686967686572207468616e20393060448201527f2500000000000000000000000000000000000000000000000000000000000000606482015260840161090a565b600855565b6005546001600160a01b031633146117c85760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b600d805460ff1916911515919091179055565b6005546001600160a01b031633146118235760405162461bcd60e51b81526020600482018190526024820152600080516020612abc833981519152604482015260640161090a565b6001600160a01b03811661189f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161090a565b6113fe816123af565b6001600160a01b0383166119235760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161090a565b6001600160a01b03821661199f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161090a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831615801590611a2057506001600160a01b03821615155b611a6c5760405162461bcd60e51b815260206004820152601e60248201527f7472616e736665722066726f6d20746865207a65726f20616464726573730000604482015260640161090a565b6001600160a01b03831660009081526010602052604090205481811015611ad55760405162461bcd60e51b815260206004820152601f60248201527f7472616e7366657220616d6f756e7420657863656564732062616c616e636500604482015260640161090a565b611adf8483612419565b611ae9838361245d565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b2e91815260200190565b60405180910390a350505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610b215781811015611bbb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161090a565b610b2184848484036118a8565b6001600160a01b03831660009081526011602052604090205460ff1680611c0757506001600160a01b03821660009081526011602052604090205460ff165b15611c175761125f838383611a00565b60006103e8600754611c28600e5490565b611c3291906129d8565b611c3c91906129b6565b90508082111580611c565750600554600160a81b900460ff165b80611c6a5750600554600160a01b900460ff165b80611c825750600f546001600160a01b038481169116145b611cce5760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178207472616e73616374696f6e20616d6f756e740000604482015260640161090a565b30600090815260106020526040902054600b5481108015908190611cfc5750600554600160a01b900460ff16155b8015611d1657506006546001600160a01b03878116911614155b8015611d245750600d5460ff165b15611d3457611d34600b54612073565b60065484906001600160a01b0388811691161480611d5f57506006546001600160a01b038781169116145b15611f3557600554600160b01b900460ff16611dbd5760405162461bcd60e51b815260206004820152601960248201527f54726164696e67206973206e6f74207965742061637469766500000000000000604482015260640161090a565b6006546001600160a01b0388811691161415611ecb57670de0b6b3a7640000611dfb876001600160a01b031660009081526010602052604090205490565b11611e1c576001600160a01b03861660009081526012602052604090204290555b611e2860085486612481565b9050600c5481611e4d886001600160a01b031660009081526010602052604090205490565b611e57919061299e565b1115611ecb5760405162461bcd60e51b815260206004820152602860248201527f43616e6e6f7420627579206f76657220746865206d6178696d756d2077616c6c60448201527f6574206c696d6974000000000000000000000000000000000000000000000000606482015260840161090a565b6006546001600160a01b0387811691161415611f30576001600160a01b0387166000908152601260205260409020546009548115801590611f175750611f14826201518061299e565b42105b15611f215750600a545b611f2b8188612481565b925050505b612045565b670de0b6b3a7640000611f5d876001600160a01b031660009081526010602052604090205490565b11611f7e576001600160a01b03861660009081526012602052604090204290555b600c5481611fa1886001600160a01b031660009081526010602052604090205490565b611fab919061299e565b11156120455760405162461bcd60e51b815260206004820152604660248201527f43616e6e6f74207472616e7366657220746f20612077616c6c6574207468617460448201527f20776f756c642065786365656420746865206d6178696d756d2077616c6c657460648201527f206c696d69740000000000000000000000000000000000000000000000000000608482015260a40161090a565b612050878783611a00565b600061205c82876129f7565b9050612069883083611a00565b5050505050505050565b6005805460ff60a01b1916600160a01b17905560006120936002836129b6565b905060006120a26002836129b6565b6120ac90846129f7565b600f5490915047906120c99030906001600160a01b0316866118a8565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106120fe576120fe612a7a565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b15801561216b57600080fd5b505afa15801561217f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a39190612669565b816001815181106121b6576121b6612a7a565b6001600160a01b039283166020918202929092010152600f546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906122159086906000908690309042906004016128d8565b600060405180830381600087803b15801561222f57600080fd5b505af1158015612243573d6000803e3d6000fd5b505050506000824761225591906129f7565b9050600060036122668360026129d8565b61227091906129b6565b9050600061227e82846129f7565b600d5460405191925061010090046001600160a01b0316906108fc8415029084906000818181858888f193505050501580156122be573d6000803e3d6000fd5b506122c987826124d9565b50506005805460ff60a01b19169055505050505050565b6a52b7d2dcc80cd2e400000081600e546122fa919061299e565b11156123485760405162461bcd60e51b815260206004820152601360248201527f4d617820737570706c7920657863656564656400000000000000000000000000604482015260640161090a565b80600e600082825461235a919061299e565b9091555061236a9050828261245d565b6040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526010602052604090205461243d9082906129f7565b6001600160a01b0390921660009081526010602052604090209190915550565b6001600160a01b03821660009081526010602052604090205461243d90829061299e565b6000806103e861249185856129d8565b61249b91906129b6565b905060006124aa6002836129b6565b905060006124b882846129f7565b9050806124c583876129f7565b6124cf91906129f7565b9695505050505050565b6005805460ff60a81b1916600160a81b179055600f546125049030906001600160a01b0316846118a8565b600f546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b15801561258657600080fd5b505af115801561259a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125bf9190612855565b50506005805460ff60a81b19169055505050565b600082601f8301126125e457600080fd5b813560206125f96125f48361297a565b612949565b80838252828201915082860187848660051b890101111561261957600080fd5b60005b858110156126385781358452928401929084019060010161261c565b5090979650505050505050565b60006020828403121561265757600080fd5b813561266281612aa6565b9392505050565b60006020828403121561267b57600080fd5b815161266281612aa6565b6000806040838503121561269957600080fd5b82356126a481612aa6565b915060208301356126b481612aa6565b809150509250929050565b6000806000606084860312156126d457600080fd5b83356126df81612aa6565b925060208401356126ef81612aa6565b929592945050506040919091013590565b6000806040838503121561271357600080fd5b823561271e81612aa6565b946020939093013593505050565b6000806040838503121561273f57600080fd5b823567ffffffffffffffff8082111561275757600080fd5b818501915085601f83011261276b57600080fd5b8135602061277b6125f48361297a565b8083825282820191508286018a848660051b890101111561279b57600080fd5b600096505b848710156127c75780356127b381612aa6565b8352600196909601959183019183016127a0565b50965050860135925050808211156127de57600080fd5b506127eb858286016125d3565b9150509250929050565b60006020828403121561280757600080fd5b8135801515811461266257600080fd5b60006020828403121561282957600080fd5b5035919050565b6000806040838503121561284357600080fd5b8235915060208301356126b481612aa6565b60008060006060848603121561286a57600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156128b057858101830151858201604001528201612894565b818111156128c2576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129285784516001600160a01b031683529383019391830191600101612903565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561297257612972612a90565b604052919050565b600067ffffffffffffffff82111561299457612994612a90565b5060051b60200190565b600082198211156129b1576129b1612a64565b500190565b6000826129d357634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156129f2576129f2612a64565b500290565b600082821015612a0957612a09612a64565b500390565b600181811c90821680612a2257607f821691505b60208210811415612a4357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612a5d57612a5d612a64565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146113fe57600080fdfe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122033130f9326ae63fbcdc2bf0918ec4a6e2cd437b9888b4597c896da67dfbf44e664736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000bdb0b4e03de37b856d6f71b8905084b597e6ceda

-----Decoded View---------------
Arg [0] : _uniswapFactory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Arg [1] : _uniswapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [2] : _marketingWallet (address): 0xBdb0b4E03DE37b856D6f71b8905084b597E6cEdA

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [2] : 000000000000000000000000bdb0b4e03de37b856d6f71b8905084b597e6ceda


Deployed Bytecode Sourcemap

92051:13552:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;94745:196;;;;;;;;;;-1:-1:-1;94745:196:0;;;;;:::i;:::-;;:::i;:::-;;17557:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19908:201;;;;;;;;;;-1:-1:-1;19908:201:0;;;;;:::i;:::-;;:::i;:::-;;;6237:14:1;;6230:22;6212:41;;6200:2;6185:18;19908:201:0;6072:187:1;96039:356:0;;;;;;;;;;-1:-1:-1;96039:356:0;;;;;:::i;:::-;;:::i;97064:85::-;;;;;;;;;;;;;:::i;104773:97::-;;;;;;;;;;-1:-1:-1;104850:12:0;;104773:97;;;15570:25:1;;;15558:2;15543:18;104773:97:0;15424:177:1;20689:295:0;;;;;;;;;;-1:-1:-1;20689:295:0;;;;;:::i;:::-;;:::i;18519:93::-;;;;;;;;;;-1:-1:-1;18519:93:0;;18602:2;16779:36:1;;16767:2;16752:18;18519:93:0;16637:184:1;92458:51:0;;;;;;;;;;;;92492:17;92458:51;;93051:53;;;;;;;;;;-1:-1:-1;93051:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;21393:238;;;;;;;;;;-1:-1:-1;21393:238:0;;;;;:::i;:::-;;:::i;95453:356::-;;;;;;;;;;-1:-1:-1;95453:356:0;;;;;:::i;:::-;;:::i;102490:371::-;;;;;;;;;;;;;:::i;105160:106::-;;;;;;;;;;-1:-1:-1;105160:106:0;;;;;:::i;:::-;;:::i;92618:29::-;;;;;;;;;;;;;;;;95094:129;;;;;;;;;;-1:-1:-1;95094:129:0;;;;;:::i;:::-;;:::i;92557:23::-;;;;;;;;;;;;;;;;97453:184;;;;;;;;;;-1:-1:-1;97453:184:0;;;;;:::i;:::-;;:::i;96487:383::-;;;;;;:::i;:::-;;:::i;104354:181::-;;;;;;;;;;-1:-1:-1;104354:181:0;;;;;:::i;:::-;;:::i;93840:136::-;;;;;;;;;;-1:-1:-1;93840:136:0;;;;;:::i;:::-;;:::i;105274:289::-;;;;;;;;;;-1:-1:-1;105274:289:0;;;;;:::i;:::-;;:::i;97245:114::-;;;;;;;;;;-1:-1:-1;97245:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;97330:21:0;97306:4;97330:21;;;:12;:21;;;;;;;;;97245:114;97936:154;;;;;;;;;;-1:-1:-1;97936:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;98064:18:0;98035:4;98064:18;;;:9;:18;;;;;;;97936:154;10980:103;;;;;;;;;;;;;:::i;92789:38::-;;;;;;;;;;-1:-1:-1;92789:38:0;;;;;;;-1:-1:-1;;;;;92789:38:0;;;;;;-1:-1:-1;;;;;5123:55:1;;;5105:74;;5093:2;5078:18;92789:38:0;4959:226:1;104031:193:0;;;;;;;;;;-1:-1:-1;104031:193:0;;;;;:::i;:::-;;:::i;101981:125::-;;;;;;;;;;-1:-1:-1;101981:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;102074:24:0;102047:7;102074:24;;;:18;:24;;;;;;;101981:125;102869:111;;;;;;;;;;;;;:::i;92656:44::-;;;;;;;;;;;;;;;;96925:83;;;;;;;;;;;;;:::i;94410:166::-;;;;;;;;;;-1:-1:-1;94410:166:0;;;;;:::i;:::-;;:::i;10329:87::-;;;;;;;;;;-1:-1:-1;10402:6:0;;-1:-1:-1;;;;;10402:6:0;10329:87;;17776:104;;;;;;;;;;;;;:::i;22134:436::-;;;;;;;;;;-1:-1:-1;22134:436:0;;;;;:::i;:::-;;:::i;19181:193::-;;;;;;;;;;-1:-1:-1;19181:193:0;;;;;:::i;:::-;;:::i;97739:189::-;;;;;;;;;;-1:-1:-1;97739:189:0;;;;;:::i;:::-;;:::i;92753:27::-;;;;;;;;;;-1:-1:-1;92753:27:0;;;;;;;;92387:33;;;;;;;;;;-1:-1:-1;92387:33:0;;;;-1:-1:-1;;;92387:33:0;;;;;;92587:24;;;;;;;;;;;;;;;;94111:160;;;;;;;;;;-1:-1:-1;94111:160:0;;;;;:::i;:::-;;:::i;19437:151::-;;;;;;;;;;-1:-1:-1;19437:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;19553:18:0;;;19526:7;19553:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19437:151;104668:97;;;;;;;;;;-1:-1:-1;104668:97:0;;;;;:::i;:::-;;:::i;11238:201::-;;;;;;;;;;-1:-1:-1;11238:201:0;;;;;:::i;:::-;;:::i;92707:39::-;;;;;;;;;;;;;;;;94745:196;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;;;;;;;;;94844:3:::1;94828:12;:19;;94820:76;;;::::0;-1:-1:-1;;;94820:76:0;;13993:2:1;94820:76:0::1;::::0;::::1;13975:21:1::0;14032:2;14012:18;;;14005:30;14071:34;14051:18;;;14044:62;14142:14;14122:18;;;14115:42;14174:19;;94820:76:0::1;13791:408:1::0;94820:76:0::1;94907:11;:26:::0;94745:196::o;17557:100::-;17611:13;17644:5;17637:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17557:100;:::o;19908:201::-;19991:4;9133:10;20047:32;9133:10;20063:7;20072:6;20047:8;:32::i;:::-;-1:-1:-1;20097:4:0;;19908:201;-1:-1:-1;;;19908:201:0:o;96039:356::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;96168:4:::1;96136:11;98064:18:::0;;;:9;:18;;;;;;;96208:10:::1;96217:1;98064:18:::0;96208:10:::1;:::i;:::-;96185:33;;96248:15;96237:7;:26;;96229:99;;;::::0;-1:-1:-1;;;96229:99:0;;7416:2:1;96229:99:0::1;::::0;::::1;7398:21:1::0;7455:2;7435:18;;;7428:30;7494:34;7474:18;;;7467:62;7565:30;7545:18;;;7538:58;7613:19;;96229:99:0::1;7214:424:1::0;96229:99:0::1;96339:48;96360:4;96367:10;96379:7;96339:12;:48::i;:::-;96125:270;;96039:356:::0;;:::o;97064:85::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;97120:13:::1;:21:::0;;-1:-1:-1;;;;97120:21:0::1;::::0;;97064:85::o;20689:295::-;20820:4;9133:10;20878:38;20894:4;9133:10;20909:6;20878:15;:38::i;:::-;20927:27;20937:4;20943:2;20947:6;20927:9;:27::i;:::-;-1:-1:-1;20972:4:0;;20689:295;-1:-1:-1;;;;20689:295:0:o;21393:238::-;9133:10;21481:4;19553:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;19553:27:0;;;;;;;;;;21481:4;;9133:10;21537:64;;9133:10;;19553:27;;21562:38;;21590:10;;21562:38;:::i;:::-;21537:8;:64::i;95453:356::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;95582:4:::1;95550:11;98064:18:::0;;;:9;:18;;;;;;;95622:10:::1;95631:1;98064:18:::0;95622:10:::1;:::i;:::-;95599:33;;95662:15;95651:7;:26;;95643:99;;;::::0;-1:-1:-1;;;95643:99:0;;13207:2:1;95643:99:0::1;::::0;::::1;13189:21:1::0;13246:2;13226:18;;;13219:30;13285:34;13265:18;;;13258:62;13356:30;13336:18;;;13329:58;13404:19;;95643:99:0::1;13005:424:1::0;102490:371:0;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;102541:16:::1;102591:4;102576:12;;102560:13;104850:12:::0;;;104773:97;102560:13:::1;:28;;;;:::i;:::-;:35;;;;:::i;:::-;102644:4;102606:17;98064:18:::0;;;:9;:18;;;;;;102541:54;;-1:-1:-1;102667:27:0;;::::1;102663:95;;-1:-1:-1::0;102735:11:0;102663:95:::1;102789:7;::::0;-1:-1:-1;;;102789:7:0;::::1;;;102770:84;;102823:19;102829:12;102823:5;:19::i;:::-;102530:331;;102490:371::o:0;105160:106::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;105236:22:::1;105242:7;105251:6;105236:5;:22::i;95094:129::-:0;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;95179:16:::1;:36:::0;95094:129::o;97453:184::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;-1:-1:-1;;;;;97330:21:0;;97306:4;97330:21;;;:12;:21;;;;;;;;97532:23:::1;97524:64;;;::::0;-1:-1:-1;;;97524:64:0;;13636:2:1;97524:64:0::1;::::0;::::1;13618:21:1::0;13675:2;13655:18;;;13648:30;13714;13694:18;;;13687:58;13762:18;;97524:64:0::1;13434:352:1::0;97524:64:0::1;-1:-1:-1::0;;;;;97601:21:0::1;;::::0;;;:12:::1;:21;::::0;;;;:28;;-1:-1:-1;;97601:28:0::1;97625:4;97601:28;::::0;;97453:184::o;96487:383::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;92223:15:::1;:22:::0;;-1:-1:-1;;;;92223:22:0::1;-1:-1:-1::0;;;92223:22:0::1;::::0;;96575:28:::2;96589:4;96596:6:::0;96575:5:::2;:28::i;:::-;96646:7;::::0;96614:49:::2;::::0;96631:4:::2;::::0;-1:-1:-1;;;;;96646:7:0::2;96656:6:::0;96614:8:::2;:49::i;:::-;96676:7;::::0;-1:-1:-1;;;;;96676:7:0::2;:23;96708:9;96741:4;96761:6:::0;96676:7:::2;::::0;96814::::2;10402:6:::0;;-1:-1:-1;;;;;10402:6:0;;10329:87;96814:7:::2;96676:186;::::0;::::2;::::0;;;;;;;-1:-1:-1;;;;;5819:15:1;;;96676:186:0::2;::::0;::::2;5801:34:1::0;5851:18;;;5844:34;;;;5894:18;;;5887:34;;;;5937:18;;;5930:34;6001:15;;;5980:19;;;5973:44;96836:15:0::2;6033:19:1::0;;;6026:35;5712:19;;96676:186:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;92268:15:0::1;:23:::0;;-1:-1:-1;;;;92268:23:0::1;::::0;;-1:-1:-1;;96487:383:0:o;104354:181::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;104850:12;;104433:10:::1;:27;;104425:69;;;::::0;-1:-1:-1;;;104425:69:0;;8324:2:1;104425:69:0::1;::::0;::::1;8306:21:1::0;8363:2;8343:18;;;8336:30;8402:31;8382:18;;;8375:59;8451:18;;104425:69:0::1;8122:353:1::0;104425:69:0::1;104505:9;:22:::0;104354:181::o;93840:136::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;93934:15:::1;:34:::0;;-1:-1:-1;;;;;93934:34:0;;::::1;;;::::0;;;::::1;::::0;;;::::1;::::0;;93840:136::o;105274:289::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;105400:7:::1;:14;105381:8;:15;:33;105373:70;;;::::0;-1:-1:-1;;;105373:70:0;;10568:2:1;105373:70:0::1;::::0;::::1;10550:21:1::0;10607:2;10587:18;;;10580:30;10646:26;10626:18;;;10619:54;10690:18;;105373:70:0::1;10366:348:1::0;105373:70:0::1;105461:6;105456:100;105477:8;:15;105473:1;:19;105456:100;;;105514:30;105520:8;105529:1;105520:11;;;;;;;;:::i;:::-;;;;;;;105533:7;105541:1;105533:10;;;;;;;;:::i;:::-;;;;;;;105514:5;:30::i;:::-;105494:3:::0;::::1;::::0;::::1;:::i;:::-;;;;105456:100;;;;105274:289:::0;;:::o;10980:103::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;11045:30:::1;11072:1;11045:18;:30::i;:::-;10980:103::o:0;104031:193::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;104128:9:::1;;104113:11;:24;;104105:74;;;::::0;-1:-1:-1;;;104105:74:0;;11683:2:1;104105:74:0::1;::::0;::::1;11665:21:1::0;11722:2;11702:18;;;11695:30;11761:34;11741:18;;;11734:62;11832:7;11812:18;;;11805:35;11857:19;;104105:74:0::1;11481:401:1::0;104105:74:0::1;104190:12;:26:::0;104031:193::o;102869:111::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;10402:6;;102924:48:::1;::::0;-1:-1:-1;;;;;10402:6:0;;;;102950:21:::1;102924:48:::0;::::1;;;::::0;::::1;::::0;;;102950:21;10402:6;102924:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;102869:111::o:0;96925:83::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;96980:13:::1;:20:::0;;-1:-1:-1;;;;96980:20:0::1;-1:-1:-1::0;;;96980:20:0::1;::::0;;96925:83::o;94410:166::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;94497:3:::1;94485:8;:15;;94477:62;;;::::0;-1:-1:-1;;;94477:62:0;;12089:2:1;94477:62:0::1;::::0;::::1;12071:21:1::0;12128:2;12108:18;;;12101:30;12167:34;12147:18;;;12140:62;12238:4;12218:18;;;12211:32;12260:19;;94477:62:0::1;11887:398:1::0;94477:62:0::1;94550:7;:18:::0;94410:166::o;17776:104::-;17832:13;17865:7;17858:14;;;;;:::i;22134:436::-;9133:10;22227:4;19553:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;19553:27:0;;;;;;;;;;22227:4;;9133:10;22374:15;22354:16;:35;;22346:85;;;;-1:-1:-1;;;22346:85:0;;15220:2:1;22346:85:0;;;15202:21:1;15259:2;15239:18;;;15232:30;15298:34;15278:18;;;15271:62;15369:7;15349:18;;;15342:35;15394:19;;22346:85:0;15018:401:1;22346:85:0;22467:60;22476:5;22483:7;22511:15;22492:16;:34;22467:8;:60::i;19181:193::-;19260:4;9133:10;19316:28;9133:10;19333:2;19337:6;19316:9;:28::i;97739:189::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;-1:-1:-1;;;;;97330:21:0;;97306:4;97330:21;;;:12;:21;;;;;;;;97815:63:::1;;;::::0;-1:-1:-1;;;97815:63:0;;13636:2:1;97815:63:0::1;::::0;::::1;13618:21:1::0;13675:2;13655:18;;;13648:30;13714;13694:18;;;13687:58;13762:18;;97815:63:0::1;13434:352:1::0;97815:63:0::1;-1:-1:-1::0;;;;;97891:21:0::1;97915:5;97891:21:::0;;;:12:::1;:21;::::0;;;;:29;;-1:-1:-1;;97891:29:0::1;::::0;;97739:189::o;94111:160::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;94195:3:::1;94184:7;:14;;94176:60;;;::::0;-1:-1:-1;;;94176:60:0;;10921:2:1;94176:60:0::1;::::0;::::1;10903:21:1::0;10960:2;10940:18;;;10933:30;10999:34;10979:18;;;10972:62;11070:3;11050:18;;;11043:31;11091:19;;94176:60:0::1;10719:397:1::0;94176:60:0::1;94247:6;:16:::0;94111:160::o;104668:97::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;104737:8:::1;:20:::0;;-1:-1:-1;;104737:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;104668:97::o;11238:201::-;10402:6;;-1:-1:-1;;;;;10402:6:0;9133:10;10549:23;10541:68;;;;-1:-1:-1;;;10541:68:0;;12846:2:1;10541:68:0;;;12828:21:1;;;12865:18;;;12858:30;-1:-1:-1;;;;;;;;;;;12904:18:1;;;12897:62;12976:18;;10541:68:0;12644:356:1;10541:68:0;-1:-1:-1;;;;;11327:22:0;::::1;11319:73;;;::::0;-1:-1:-1;;;11319:73:0;;9041:2:1;11319:73:0::1;::::0;::::1;9023:21:1::0;9080:2;9060:18;;;9053:30;9119:34;9099:18;;;9092:62;9190:8;9170:18;;;9163:36;9216:19;;11319:73:0::1;8839:402:1::0;11319:73:0::1;11403:28;11422:8;11403:18;:28::i;25768:380::-:0;-1:-1:-1;;;;;25904:19:0;;25896:68;;;;-1:-1:-1;;;25896:68:0;;14406:2:1;25896:68:0;;;14388:21:1;14445:2;14425:18;;;14418:30;14484:34;14464:18;;;14457:62;14555:6;14535:18;;;14528:34;14579:19;;25896:68:0;14204:400:1;25896:68:0;-1:-1:-1;;;;;25983:21:0;;25975:68;;;;-1:-1:-1;;;25975:68:0;;9448:2:1;25975:68:0;;;9430:21:1;9487:2;9467:18;;;9460:30;9526:34;9506:18;;;9499:62;9597:4;9577:18;;;9570:32;9619:19;;25975:68:0;9246:398:1;25975:68:0;-1:-1:-1;;;;;26056:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26108:32;;15570:25:1;;;26108:32:0;;15543:18:1;26108:32:0;;;;;;;25768:380;;;:::o;103340:484::-;-1:-1:-1;;;;;103472:20:0;;;;;;:47;;-1:-1:-1;;;;;;103496:23:0;;;;103472:47;103464:90;;;;-1:-1:-1;;;103464:90:0;;9851:2:1;103464:90:0;;;9833:21:1;9890:2;9870:18;;;9863:30;9929:32;9909:18;;;9902:60;9979:18;;103464:90:0;9649:354:1;103464:90:0;-1:-1:-1;;;;;98064:18:0;;103565;98064;;;:9;:18;;;;;;103622:23;;;;103614:67;;;;-1:-1:-1;;;103614:67:0;;11323:2:1;103614:67:0;;;11305:21:1;11362:2;11342:18;;;11335:30;11401:33;11381:18;;;11374:61;11452:18;;103614:67:0;11121:355:1;103614:67:0;103692:32;103709:6;103717;103692:16;:32::i;:::-;103735:30;103747:9;103758:6;103735:11;:30::i;:::-;103798:9;-1:-1:-1;;;;;103781:35:0;103790:6;-1:-1:-1;;;;;103781:35:0;;103809:6;103781:35;;;;15570:25:1;;15558:2;15543:18;;15424:177;103781:35:0;;;;;;;;103453:371;103340:484;;;:::o;26439:453::-;-1:-1:-1;;;;;19553:18:0;;;26574:24;19553:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;26641:37:0;;26637:248;;26723:6;26703:16;:26;;26695:68;;;;-1:-1:-1;;;26695:68:0;;10210:2:1;26695:68:0;;;10192:21:1;10249:2;10229:18;;;10222:30;10288:31;10268:18;;;10261:59;10337:18;;26695:68:0;10008:353:1;26695:68:0;26807:51;26816:5;26823:7;26851:6;26832:16;:25;26807:8;:51::i;98373:2279::-;-1:-1:-1;;;;;97330:21:0;;97306:4;97330:21;;;:12;:21;;;;;;;;98507:49;;;-1:-1:-1;;;;;;97330:21:0;;97306:4;97330:21;;;:12;:21;;;;;;;;98532:24;98503:142;;;98573:39;98586:6;98594:9;98605:6;98573:12;:39::i;98503:142::-;98657:16;98707:4;98692:12;;98676:13;104850:12;;;104773:97;98676:13;:28;;;;:::i;:::-;:35;;;;:::i;:::-;98657:54;;98740:11;98730:6;:21;;:40;;;-1:-1:-1;98755:15:0;;-1:-1:-1;;;98755:15:0;;;;98730:40;:51;;;-1:-1:-1;98774:7:0;;-1:-1:-1;;;98774:7:0;;;;98730:51;:84;;;-1:-1:-1;98806:7:0;;-1:-1:-1;;;;;98785:29:0;;;98806:7;;98785:29;98730:84;98722:127;;;;-1:-1:-1;;;98722:127:0;;8682:2:1;98722:127:0;;;8664:21:1;8721:2;8701:18;;;8694:30;8760:32;8740:18;;;8733:60;8810:18;;98722:127:0;8480:354:1;98722:127:0;98900:4;98862:17;98064:18;;;:9;:18;;;;;;98961:16;;98945:32;;;;;;;99008:45;;-1:-1:-1;99046:7:0;;-1:-1:-1;;;99046:7:0;;;;99045:8;99008:45;:77;;;;-1:-1:-1;99080:5:0;;-1:-1:-1;;;;;99070:15:0;;;99080:5;;99070:15;;99008:77;:102;;;;-1:-1:-1;99102:8:0;;;;99008:102;98990:182;;;99137:23;99143:16;;99137:5;:23::i;:::-;99227:5;;99196:6;;-1:-1:-1;;;;;99217:15:0;;;99227:5;;99217:15;;:37;;-1:-1:-1;99249:5:0;;-1:-1:-1;;;;;99236:18:0;;;99249:5;;99236:18;99217:37;99213:1280;;;99279:13;;-1:-1:-1;;;99279:13:0;;;;99271:51;;;;-1:-1:-1;;;99271:51:0;;12492:2:1;99271:51:0;;;12474:21:1;12531:2;12511:18;;;12504:30;12570:27;12550:18;;;12543:55;12615:18;;99271:51:0;12290:349:1;99271:51:0;99351:5;;-1:-1:-1;;;;;99341:15:0;;;99351:5;;99341:15;99337:374;;;99429:7;99405:20;99415:9;-1:-1:-1;;;;;98064:18:0;98035:4;98064:18;;;:9;:18;;;;;;;97936:154;99405:20;:31;99401:127;;-1:-1:-1;;;;;99461:29:0;;;;;;:18;:29;;;;;99493:15;99461:47;;99401:127;99553:30;99568:6;;99576;99553:14;:30::i;:::-;99546:37;;99641:9;;99633:4;99610:20;99620:9;-1:-1:-1;;;;;98064:18:0;98035:4;98064:18;;;:9;:18;;;;;;;97936:154;99610:20;:27;;;;:::i;:::-;:40;;99602:93;;;;-1:-1:-1;;;99602:93:0;;14811:2:1;99602:93:0;;;14793:21:1;14850:2;14830:18;;;14823:30;14889:34;14869:18;;;14862:62;14960:10;14940:18;;;14933:38;14988:19;;99602:93:0;14609:404:1;99602:93:0;99742:5;;-1:-1:-1;;;;;99729:18:0;;;99742:5;;99729:18;99725:420;;;-1:-1:-1;;;;;102074:24:0;;99793:27;102074:24;;;:18;:24;;;;;;99890:7;;99920:26;;;;;:79;;-1:-1:-1;99968:31:0;:22;99993:6;99968:31;:::i;:::-;99950:15;:49;99920:79;99916:153;;;-1:-1:-1;100038:11:0;;99916:153;100094:35;100109:11;100122:6;100094:14;:35::i;:::-;100087:42;;99749:396;;99725:420;99213:1280;;;100253:7;100229:20;100239:9;-1:-1:-1;;;;;98064:18:0;98035:4;98064:18;;;:9;:18;;;;;;;97936:154;100229:20;:31;100225:119;;-1:-1:-1;;;;;100281:29:0;;;;;;:18;:29;;;;;100313:15;100281:47;;100225:119;100397:9;;100389:4;100366:20;100376:9;-1:-1:-1;;;;;98064:18:0;98035:4;98064:18;;;:9;:18;;;;;;;97936:154;100366:20;:27;;;;:::i;:::-;:40;;100358:123;;;;-1:-1:-1;;;100358:123:0;;7845:2:1;100358:123:0;;;7827:21:1;7884:2;7864:18;;;7857:30;7923:34;7903:18;;;7896:62;7994:34;7974:18;;;7967:62;8066:8;8045:19;;;8038:37;8092:19;;100358:123:0;7643:474:1;100358:123:0;100503:37;100516:6;100524:9;100535:4;100503:12;:37::i;:::-;100553:16;100572:13;100581:4;100572:6;:13;:::i;:::-;100553:32;;100596:48;100609:6;100625:4;100632:11;100596:12;:48::i;:::-;98492:2160;;;;;98373:2279;;;:::o;100928:1045::-;92122:7;:14;;-1:-1:-1;;;;92122:14:0;-1:-1:-1;;;92122:14:0;;;;101008:10:::1;101017:1;101008:6:::0;:10:::1;:::i;:::-;100985:33:::0;-1:-1:-1;101070:22:0::1;101105:19;101123:1;100985:33:::0;101105:19:::1;:::i;:::-;101095:30;::::0;:6;:30:::1;:::i;:::-;101345:7;::::0;101070:55;;-1:-1:-1;101281:21:0::1;::::0;101313:49:::1;::::0;101330:4:::1;::::0;-1:-1:-1;;;;;101345:7:0::1;101355:6:::0;101313:8:::1;:49::i;:::-;101399:16;::::0;;101413:1:::1;101399:16:::0;;;;;::::1;::::0;;101375:21:::1;::::0;101399:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;101399:16:0::1;101375:40;;101444:4;101426;101431:1;101426:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;101426:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;101470:7:::1;::::0;:14:::1;::::0;;;;;;;:7;;;::::1;::::0;:12:::1;::::0;:14:::1;::::0;;::::1;::::0;101426:7;;101470:14;;;;;:7;:14;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;101460:4;101465:1;101460:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;101460:24:0;;::::1;:7;::::0;;::::1;::::0;;;;;:24;101495:7:::1;::::0;:194:::1;::::0;;;;:7;::::1;::::0;:58:::1;::::0;:194:::1;::::0;101568:17;;101495:7:::1;::::0;101616:4;;101643::::1;::::0;101663:15:::1;::::0;101495:194:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;101702:15;101744:18;101720:21;:42;;;;:::i;:::-;101702:60:::0;-1:-1:-1;101773:14:0::1;101807:1;101790:14;101702:60:::0;101803:1:::1;101790:14;:::i;:::-;:18;;;;:::i;:::-;101773:35:::0;-1:-1:-1;101819:14:0::1;101836:22;101773:35:::0;101836:10;:22:::1;:::i;:::-;101871:15;::::0;:35:::1;::::0;101819:39;;-1:-1:-1;101871:15:0::1;::::0;::::1;-1:-1:-1::0;;;;;101871:15:0::1;::::0;:35:::1;::::0;::::1;;::::0;;;::::1;::::0;;;;:15;:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;101917:48;101938:15;101955:9;101917:20;:48::i;:::-;-1:-1:-1::0;;92159:7:0;:15;;-1:-1:-1;;;;92159:15:0;;;-1:-1:-1;;;;;;100928:1045:0:o;104878:274::-;92492:17;104975:6;104960:12;;:21;;;;:::i;:::-;:35;;104952:67;;;;-1:-1:-1;;;104952:67:0;;7068:2:1;104952:67:0;;;7050:21:1;7107:2;7087:18;;;7080:30;7146:21;7126:18;;;7119:49;7185:18;;104952:67:0;6866:343:1;104952:67:0;105046:6;105030:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;105063:28:0;;-1:-1:-1;105075:7:0;105084:6;105063:11;:28::i;:::-;105107:37;;15570:25:1;;;-1:-1:-1;;;;;105107:37:0;;;105124:1;;105107:37;;15558:2:1;15543:18;105107:37:0;;;;;;;104878:274;;:::o;11599:191::-;11692:6;;;-1:-1:-1;;;;;11709:17:0;;;;;;;;;;;11742:40;;11692:6;;;11709:17;11692:6;;11742:40;;11673:16;;11742:40;11662:128;11599:191;:::o;98233:132::-;-1:-1:-1;;;;;98330:18:0;;;;;;:9;:18;;;;;;:27;;98351:6;;98330:27;:::i;:::-;-1:-1:-1;;;;;98309:18:0;;;;;;;:9;:18;;;;;:48;;;;-1:-1:-1;98233:132:0:o;98098:127::-;-1:-1:-1;;;;;98190:18:0;;;;;;:9;:18;;;;;;:27;;98211:6;;98190:27;:::i;102988:344::-;103063:9;;103127:4;103112:12;103121:3;103112:6;:12;:::i;:::-;:19;;;;:::i;:::-;103090:41;-1:-1:-1;103142:23:0;103168:18;103185:1;103090:41;103168:18;:::i;:::-;103142:44;-1:-1:-1;103197:23:0;103223:35;103142:44;103223:14;:35;:::i;:::-;103197:61;-1:-1:-1;103197:61:0;103276:27;103285:18;103276:6;:27;:::i;:::-;:48;;;;:::i;:::-;103269:55;102988:344;-1:-1:-1;;;;;;102988:344:0:o;102114:368::-;92223:15;:22;;-1:-1:-1;;;;92223:22:0;-1:-1:-1;;;92223:22:0;;;102242:7:::1;::::0;102210:54:::1;::::0;102227:4:::1;::::0;-1:-1:-1;;;;;102242:7:0::1;102252:11:::0;102210:8:::1;:54::i;:::-;102275:7;::::0;:199:::1;::::0;;;;102340:4:::1;102275:199;::::0;::::1;5801:34:1::0;5851:18;;;5844:34;;;102275:7:0::1;5894:18:1::0;;;5887:34;;;5937:18;;;5930:34;102426:6:0::1;5980:19:1::0;;;5973:44;102448:15:0::1;6033:19:1::0;;;6026:35;-1:-1:-1;;;;;102275:7:0;;::::1;::::0;:23:::1;::::0;102307:9;;5712:19:1;;102275:199:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;92268:15:0;:23;;-1:-1:-1;;;;92268:23:0;;;-1:-1:-1;;;102114:368:0:o;14:673:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:163;509:2;506:1;503:9;495:163;;;566:17;;554:30;;604:12;;;;636;;;;527:1;520:9;495:163;;;-1:-1:-1;676:5:1;;14:673;-1:-1:-1;;;;;;;14:673:1:o;692:247::-;751:6;804:2;792:9;783:7;779:23;775:32;772:52;;;820:1;817;810:12;772:52;859:9;846:23;878:31;903:5;878:31;:::i;:::-;928:5;692:247;-1:-1:-1;;;692:247:1:o;944:251::-;1014:6;1067:2;1055:9;1046:7;1042:23;1038:32;1035:52;;;1083:1;1080;1073:12;1035:52;1115:9;1109:16;1134:31;1159:5;1134:31;:::i;1460:388::-;1528:6;1536;1589:2;1577:9;1568:7;1564:23;1560:32;1557:52;;;1605:1;1602;1595:12;1557:52;1644:9;1631:23;1663:31;1688:5;1663:31;:::i;:::-;1713:5;-1:-1:-1;1770:2:1;1755:18;;1742:32;1783:33;1742:32;1783:33;:::i;:::-;1835:7;1825:17;;;1460:388;;;;;:::o;1853:456::-;1930:6;1938;1946;1999:2;1987:9;1978:7;1974:23;1970:32;1967:52;;;2015:1;2012;2005:12;1967:52;2054:9;2041:23;2073:31;2098:5;2073:31;:::i;:::-;2123:5;-1:-1:-1;2180:2:1;2165:18;;2152:32;2193:33;2152:32;2193:33;:::i;:::-;1853:456;;2245:7;;-1:-1:-1;;;2299:2:1;2284:18;;;;2271:32;;1853:456::o;2314:315::-;2382:6;2390;2443:2;2431:9;2422:7;2418:23;2414:32;2411:52;;;2459:1;2456;2449:12;2411:52;2498:9;2485:23;2517:31;2542:5;2517:31;:::i;:::-;2567:5;2619:2;2604:18;;;;2591:32;;-1:-1:-1;;;2314:315:1:o;2634:1226::-;2752:6;2760;2813:2;2801:9;2792:7;2788:23;2784:32;2781:52;;;2829:1;2826;2819:12;2781:52;2869:9;2856:23;2898:18;2939:2;2931:6;2928:14;2925:34;;;2955:1;2952;2945:12;2925:34;2993:6;2982:9;2978:22;2968:32;;3038:7;3031:4;3027:2;3023:13;3019:27;3009:55;;3060:1;3057;3050:12;3009:55;3096:2;3083:16;3118:4;3142:60;3158:43;3198:2;3158:43;:::i;3142:60::-;3224:3;3248:2;3243:3;3236:15;3276:2;3271:3;3267:12;3260:19;;3307:2;3303;3299:11;3355:7;3350:2;3344;3341:1;3337:10;3333:2;3329:19;3325:28;3322:41;3319:61;;;3376:1;3373;3366:12;3319:61;3398:1;3389:10;;3408:238;3422:2;3419:1;3416:9;3408:238;;;3493:3;3480:17;3510:31;3535:5;3510:31;:::i;:::-;3554:18;;3440:1;3433:9;;;;;3592:12;;;;3624;;3408:238;;;-1:-1:-1;3665:5:1;-1:-1:-1;;3708:18:1;;3695:32;;-1:-1:-1;;3739:16:1;;;3736:36;;;3768:1;3765;3758:12;3736:36;;3791:63;3846:7;3835:8;3824:9;3820:24;3791:63;:::i;:::-;3781:73;;;2634:1226;;;;;:::o;3865:273::-;3921:6;3974:2;3962:9;3953:7;3949:23;3945:32;3942:52;;;3990:1;3987;3980:12;3942:52;4029:9;4016:23;4082:5;4075:13;4068:21;4061:5;4058:32;4048:60;;4104:1;4101;4094:12;4143:180;4202:6;4255:2;4243:9;4234:7;4230:23;4226:32;4223:52;;;4271:1;4268;4261:12;4223:52;-1:-1:-1;4294:23:1;;4143:180;-1:-1:-1;4143:180:1:o;4328:315::-;4396:6;4404;4457:2;4445:9;4436:7;4432:23;4428:32;4425:52;;;4473:1;4470;4463:12;4425:52;4509:9;4496:23;4486:33;;4569:2;4558:9;4554:18;4541:32;4582:31;4607:5;4582:31;:::i;4648:306::-;4736:6;4744;4752;4805:2;4793:9;4784:7;4780:23;4776:32;4773:52;;;4821:1;4818;4811:12;4773:52;4850:9;4844:16;4834:26;;4900:2;4889:9;4885:18;4879:25;4869:35;;4944:2;4933:9;4929:18;4923:25;4913:35;;4648:306;;;;;:::o;6264:597::-;6376:4;6405:2;6434;6423:9;6416:21;6466:6;6460:13;6509:6;6504:2;6493:9;6489:18;6482:34;6534:1;6544:140;6558:6;6555:1;6552:13;6544:140;;;6653:14;;;6649:23;;6643:30;6619:17;;;6638:2;6615:26;6608:66;6573:10;;6544:140;;;6702:6;6699:1;6696:13;6693:91;;;6772:1;6767:2;6758:6;6747:9;6743:22;6739:31;6732:42;6693:91;-1:-1:-1;6845:2:1;6824:15;-1:-1:-1;;6820:29:1;6805:45;;;;6852:2;6801:54;;6264:597;-1:-1:-1;;;6264:597:1:o;15606:1026::-;15868:4;15916:3;15905:9;15901:19;15947:6;15936:9;15929:25;15973:2;16011:6;16006:2;15995:9;15991:18;15984:34;16054:3;16049:2;16038:9;16034:18;16027:31;16078:6;16113;16107:13;16144:6;16136;16129:22;16182:3;16171:9;16167:19;16160:26;;16221:2;16213:6;16209:15;16195:29;;16242:1;16252:218;16266:6;16263:1;16260:13;16252:218;;;16331:13;;-1:-1:-1;;;;;16327:62:1;16315:75;;16445:15;;;;16410:12;;;;16288:1;16281:9;16252:218;;;-1:-1:-1;;;;;;;16526:55:1;;;;16521:2;16506:18;;16499:83;-1:-1:-1;;;16613:3:1;16598:19;16591:35;16487:3;15606:1026;-1:-1:-1;;;15606:1026:1:o;16826:275::-;16897:2;16891:9;16962:2;16943:13;;-1:-1:-1;;16939:27:1;16927:40;;16997:18;16982:34;;17018:22;;;16979:62;16976:88;;;17044:18;;:::i;:::-;17080:2;17073:22;16826:275;;-1:-1:-1;16826:275:1:o;17106:183::-;17166:4;17199:18;17191:6;17188:30;17185:56;;;17221:18;;:::i;:::-;-1:-1:-1;17266:1:1;17262:14;17278:4;17258:25;;17106:183::o;17294:128::-;17334:3;17365:1;17361:6;17358:1;17355:13;17352:39;;;17371:18;;:::i;:::-;-1:-1:-1;17407:9:1;;17294:128::o;17427:274::-;17467:1;17493;17483:189;;-1:-1:-1;;;17525:1:1;17518:88;17629:4;17626:1;17619:15;17657:4;17654:1;17647:15;17483:189;-1:-1:-1;17686:9:1;;17427:274::o;17706:168::-;17746:7;17812:1;17808;17804:6;17800:14;17797:1;17794:21;17789:1;17782:9;17775:17;17771:45;17768:71;;;17819:18;;:::i;:::-;-1:-1:-1;17859:9:1;;17706:168::o;17879:125::-;17919:4;17947:1;17944;17941:8;17938:34;;;17952:18;;:::i;:::-;-1:-1:-1;17989:9:1;;17879:125::o;18009:437::-;18088:1;18084:12;;;;18131;;;18152:61;;18206:4;18198:6;18194:17;18184:27;;18152:61;18259:2;18251:6;18248:14;18228:18;18225:38;18222:218;;;-1:-1:-1;;;18293:1:1;18286:88;18397:4;18394:1;18387:15;18425:4;18422:1;18415:15;18222:218;;18009:437;;;:::o;18451:135::-;18490:3;-1:-1:-1;;18511:17:1;;18508:43;;;18531:18;;:::i;:::-;-1:-1:-1;18578:1:1;18567:13;;18451:135::o;18591:184::-;-1:-1:-1;;;18640:1:1;18633:88;18740:4;18737:1;18730:15;18764:4;18761:1;18754:15;18780:184;-1:-1:-1;;;18829:1:1;18822:88;18929:4;18926:1;18919:15;18953:4;18950:1;18943:15;18969:184;-1:-1:-1;;;19018:1:1;19011:88;19118:4;19115:1;19108:15;19142:4;19139:1;19132:15;19158:154;-1:-1:-1;;;;;19237:5:1;19233:54;19226:5;19223:65;19213:93;;19302:1;19299;19292:12

Swarm Source

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