ETH Price: $3,664.13 (+1.76%)

Token

ERC-20: Jitter ($jitter)
 

Overview

Max Total Supply

100,000,000 $jitter

Holders

224

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
427,500 $jitter

Value
$0.00
0x01add399e8d56cb5ca9f40885260b9eda854beea
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:
Jitter

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// twitter: https://twitter.com/elonmusk/status/1658525853934813201?s=20



// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions 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.8.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * 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 `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @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: @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: contracts/Jitter.sol

// twitter: https://twitter.com/elonmusk/status/1658525853934813201?s=20

pragma solidity ^0.8.9;







library Address{
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

contract Jitter is Ownable, ERC20 {
    using Address for address payable;
    using SafeMath for uint256;
    
    IUniswapV2Router02 public router;
    address public pair;
    
    bool private swapping;
    bool public swapEnabled;
    bool public tradingEnabled;

    uint256 public genesis_block;
    uint256 public deadblocks = 0;
    
    
    
    address public marketingWallet;
    address public devWallet;
    
    struct Taxes {
        uint256 marketing;
        uint256 liquidity; 
        uint256 dev;
    }

    uint256 public supply = 1e8 * 10 ** 18;
    uint256 public swapThreshold = 10_000 * 10e18;
    uint256 public maxTxAmount = supply * 5 / 1000;//2_000_000 * 10**18;
    uint256 public maxWalletAmount = supply * 5 / 1000;//2_000_000 * 10**18;
    Taxes public taxes = Taxes(12,0,3);
    Taxes public sellTaxes = Taxes(32,0,8);
    uint256 public totTax = 15;
    uint256 public totSellTax = 40;
    
    mapping (address => bool) public excludedFromFees;
    mapping (address => bool) private isBot;
    
    modifier inSwap() {
        if (!swapping) {
            swapping = true;
            _;
            swapping = false;
        }
    }
        
    constructor(address dw, address mw, address rt) ERC20("Jitter", "$jitter") {
        _mint(msg.sender, supply);

        IUniswapV2Router02 _router = IUniswapV2Router02(rt);
        address _pair = IUniswapV2Factory(_router.factory())
            .createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        excludedFromFees[address(this)] = true;
        excludedFromFees[marketingWallet] = true;
        excludedFromFees[devWallet] = true;
        excludedFromFees[msg.sender] = true;

        devWallet = dw;
        marketingWallet = mw;
    }
    
    function _transfer(address sender, address recipient, uint256 amount) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!isBot[sender] && !isBot[recipient], "You can't transfer tokens");
                
        
        if(!excludedFromFees[sender] && !excludedFromFees[recipient] && !swapping){
            require(tradingEnabled, "Trading not active yet");
            if(genesis_block + deadblocks > block.number){
                if(recipient != pair) isBot[recipient] = true;
                if(sender != pair) isBot[sender] = true;
            }
            require(amount <= maxTxAmount, "You are exceeding maxTxAmount");
            if(recipient != pair){
                require(balanceOf(recipient) + amount <= maxWalletAmount, "You are exceeding maxWalletAmount");
            }
        }

        uint256 fee;
        
  
        if (swapping || excludedFromFees[sender] || excludedFromFees[recipient]) fee = 0;
        
 
        else{
            if(recipient == pair) fee = amount * totSellTax / 100;
            else fee = amount * totTax / 100;
        }
        

        if (swapEnabled && !swapping && sender != pair && fee > 0) swapForFees();

        super._transfer(sender, recipient, amount - fee);
        if(fee > 0) super._transfer(sender, address(this) ,fee);

    }

    function swapForFees() private inSwap {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= swapThreshold) {

            uint256 denominator = totSellTax * 2;
            uint256 tokensToAddLiquidityWith = contractBalance * sellTaxes.liquidity / denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;
    
            uint256 initialBalance = address(this).balance;
    
            swapTokensForETH(toSwap);
    
            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance= deltaBalance / (denominator - sellTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * sellTaxes.liquidity;
    
            if(ethToAddLiquidityWith > 0){
                // Add liquidity to Uniswap
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }
    
            uint256 marketingAmt = unitBalance * 2 * sellTaxes.marketing;
            if(marketingAmt > 0){
                payable(marketingWallet).sendValue(marketingAmt);
            }
            
            uint256 devAmt = unitBalance * 2 * sellTaxes.dev;
            if(devAmt > 0){
                payable(devWallet).sendValue(devAmt);
            }
        }
    }


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

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);

    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);

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

    function setSwapEnabled(bool state) external onlyOwner {
        swapEnabled = state;
    }

    function setSwapThreshold(uint256 new_amount) external onlyOwner {
        swapThreshold = new_amount;
    }

    function enableTrading(uint256 numOfDeadBlocks) external onlyOwner{
        require(!tradingEnabled, "Trading already active");
        tradingEnabled = true;
        swapEnabled = true;
        genesis_block = block.number;
        deadblocks = numOfDeadBlocks;
    }

    function setBuyTaxes(uint256 _marketing, uint256 _liquidity, uint256 _dev) external onlyOwner{
        taxes = Taxes(_marketing, _liquidity, _dev);
        totTax = _marketing + _liquidity + _dev;
    }

    function setSellTaxes(uint256 _marketing, uint256 _liquidity, uint256 _dev) external onlyOwner{
        sellTaxes = Taxes(_marketing, _liquidity, _dev);
        totSellTax = _marketing + _liquidity + _dev;
    }
    
    function updateMarketingWallet(address newWallet) external onlyOwner{
        marketingWallet = newWallet;
    }
    
    function updatePeppaWallet(address newWallet) external onlyOwner{
        devWallet = newWallet;
    }

    function updateRouterAndPair(IUniswapV2Router02 _router, address _pair) external onlyOwner{
        router = _router;
        pair = _pair;
    }
    
    function addBots(address[] memory isBot_) public onlyOwner {
        for (uint i = 0; i < isBot_.length; i++) {
            isBot[isBot_[i]] = true;
        }
    }
    function updateExcludedFromFees(address _address, bool state) external onlyOwner {
        excludedFromFees[_address] = state;
    }
    
    function updateMaxTxAmount(uint256 amount) external onlyOwner{
        maxTxAmount = supply * amount / 1000;
    }
    
    function updateMaxWalletAmount(uint256 amount) external onlyOwner{
        maxWalletAmount = supply * amount / 1000;
    }

    function rescueERC20(address tokenAddress, uint256 amount) external onlyOwner{
        IERC20(tokenAddress).transfer(owner(), amount);
    }

    function rescueETH(uint256 weiAmount) external onlyOwner{
        payable(owner()).sendValue(weiAmount);
    }

    function manualSwap(uint256 amount, uint256 devPercentage, uint256 marketingPercentage) external onlyOwner{
        uint256 initBalance = address(this).balance;
        swapTokensForETH(amount);
        uint256 newBalance = address(this).balance - initBalance;
        if(marketingPercentage > 0) payable(marketingWallet).sendValue(newBalance * marketingPercentage / (devPercentage + marketingPercentage));
        if(devPercentage > 0) payable(devWallet).sendValue(newBalance * devPercentage / (devPercentage + marketingPercentage));
    }

    // fallbacks
    receive() external payable {}

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"dw","type":"address"},{"internalType":"address","name":"mw","type":"address"},{"internalType":"address","name":"rt","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":[{"internalType":"address[]","name":"isBot_","type":"address[]"}],"name":"addBots","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":[{"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":"deadblocks","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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numOfDeadBlocks","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesis_block","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":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"devPercentage","type":"uint256"},{"internalType":"uint256","name":"marketingPercentage","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totTax","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":"tradingEnabled","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":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatePeppaWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IUniswapV2Router02","name":"_router","type":"address"},{"internalType":"address","name":"_pair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006009556a52b7d2dcc80cd2e4000000600c5569152d02c7e14af6800000600d556103e8600c5460056200003a9190620005a0565b620000469190620005c2565b600e556103e8600c5460056200005d9190620005a0565b620000699190620005c2565b600f9081556040805160608082018352600c8083526000602080850182905260039486018590526010929092556011819055601293909355835191820184528082528181018390526008919093018190526013929092556014556015556016556028601755348015620000db57600080fd5b506040516200274838038062002748833981016040819052620000fe9162000602565b604051806040016040528060068152602001652534ba3a32b960d11b81525060405180604001604052806007815260200166123534ba3a32b960c91b8152506200015762000151620003c860201b60201c565b620003cc565b81516200016c906004906020850190620004e4565b50805162000182906005906020840190620004e4565b5050506200019933600c546200041c60201b60201c565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001da57600080fd5b505afa158015620001ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021591906200064c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025e57600080fd5b505afa15801562000273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029991906200064c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002e257600080fd5b505af1158015620002f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031d91906200064c565b600680546001600160a01b03199081166001600160a01b03958616179091556007805482169285169290921790915530600090815260186020526040808220805460ff199081166001908117909255600a8054881685528385208054831684179055600b805489168652848620805484168517905533865293909420805490911690911790558054831697851697909717909655855416939091169290921790925550620006c99050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038216620004775760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b80600360008282546200048b919062000671565b90915550506001600160a01b0382166000818152600160209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b828054620004f2906200068c565b90600052602060002090601f01602090048101928262000516576000855562000561565b82601f106200053157805160ff191683800117855562000561565b8280016001018555821562000561579182015b828111156200056157825182559160200191906001019062000544565b506200056f92915062000573565b5090565b5b808211156200056f576000815560010162000574565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620005bd57620005bd6200058a565b500290565b600082620005e057634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b0381168114620005fd57600080fd5b919050565b6000806000606084860312156200061857600080fd5b6200062384620005e5565b92506200063360208501620005e5565b91506200064360408501620005e5565b90509250925092565b6000602082840312156200065f57600080fd5b6200066a82620005e5565b9392505050565b600082198211156200068757620006876200058a565b500190565b600181811c90821680620006a157607f821691505b60208210811415620006c357634e487b7160e01b600052602260045260246000fd5b50919050565b61206f80620006d96000396000f3fe6080604052600436106102815760003560e01c806382aa7c681161014f578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e14610797578063e01af92c146107b7578063e545fd6d146107d7578063f2fde38b146107f7578063f66895a314610817578063f887ea401461083657600080fd5b8063a9059cbb146106d1578063aa4bde28146106f1578063aacebbe314610707578063c18bc19514610727578063d34628cc14610747578063dbe66ca01461076757600080fd5b806395d89b411161011357806395d89b411461061c5780639d0014b1146106315780639e252f00146106515780639f55efb914610671578063a457c2d714610691578063a8aa1b31146106b157600080fd5b806382aa7c68146105885780638c0b5e22146105a85780638cd4426d146105be5780638da5cb5b146105de5780638ea5220f146105fc57600080fd5b8063293b7ef4116101f35780636256d181116101ac5780636256d1811461048a5780636ddd1713146104aa57806370a08231146104cb578063715018a614610501578063728f8eea1461051657806375f0a8741461055057600080fd5b8063293b7ef4146103e1578063313ce567146103f7578063395093511461041357806340b28c2f146104335780634ada218b1461045357806350c9a88f1461047457600080fd5b806318160ddd1161024557806318160ddd146103405780631870517a146103555780632253163d1461037557806323b872dd1461038b57806326b5d32f146103ab578063274a533c146103cb57600080fd5b80630445b6671461028d578063047fc9aa146102b657806306fdde03146102cc57806308733214146102ee578063095ea7b31461031057600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a3600d5481565b6040519081526020015b60405180910390f35b3480156102c257600080fd5b506102a3600c5481565b3480156102d857600080fd5b506102e1610856565b6040516102ad9190611bb1565b3480156102fa57600080fd5b5061030e610309366004611c06565b6108e8565b005b34801561031c57600080fd5b5061033061032b366004611c57565b610934565b60405190151581526020016102ad565b34801561034c57600080fd5b506003546102a3565b34801561036157600080fd5b5061030e610370366004611c06565b61094c565b34801561038157600080fd5b506102a360175481565b34801561039757600080fd5b506103306103a6366004611c83565b610998565b3480156103b757600080fd5b5061030e6103c6366004611c06565b6109bc565b3480156103d757600080fd5b506102a360085481565b3480156103ed57600080fd5b506102a360165481565b34801561040357600080fd5b50604051601281526020016102ad565b34801561041f57600080fd5b5061033061042e366004611c57565b610a55565b34801561043f57600080fd5b5061030e61044e366004611cc4565b610a77565b34801561045f57600080fd5b5060075461033090600160b01b900460ff1681565b34801561048057600080fd5b506102a360095481565b34801561049657600080fd5b5061030e6104a5366004611cfd565b610aad565b3480156104b657600080fd5b5060075461033090600160a81b900460ff1681565b3480156104d757600080fd5b506102a36104e6366004611d16565b6001600160a01b031660009081526001602052604090205490565b34801561050d57600080fd5b5061030e610ad6565b34801561052257600080fd5b5060105460115460125461053592919083565b604080519384526020840192909252908201526060016102ad565b34801561055c57600080fd5b50600a54610570906001600160a01b031681565b6040516001600160a01b0390911681526020016102ad565b34801561059457600080fd5b5061030e6105a3366004611cfd565b610aea565b3480156105b457600080fd5b506102a3600e5481565b3480156105ca57600080fd5b5061030e6105d9366004611c57565b610b68565b3480156105ea57600080fd5b506000546001600160a01b0316610570565b34801561060857600080fd5b50600b54610570906001600160a01b031681565b34801561062857600080fd5b506102e1610c16565b34801561063d57600080fd5b5061030e61064c366004611cfd565b610c25565b34801561065d57600080fd5b5061030e61066c366004611cfd565b610c32565b34801561067d57600080fd5b5061030e61068c366004611d16565b610c62565b34801561069d57600080fd5b506103306106ac366004611c57565b610c8c565b3480156106bd57600080fd5b50600754610570906001600160a01b031681565b3480156106dd57600080fd5b506103306106ec366004611c57565b610d07565b3480156106fd57600080fd5b506102a3600f5481565b34801561071357600080fd5b5061030e610722366004611d16565b610d15565b34801561073357600080fd5b5061030e610742366004611cfd565b610d3f565b34801561075357600080fd5b5061030e610762366004611d50565b610d68565b34801561077357600080fd5b50610330610782366004611d16565b60186020526000908152604090205460ff1681565b3480156107a357600080fd5b506102a36107b2366004611cc4565b610ddc565b3480156107c357600080fd5b5061030e6107d2366004611e23565b610e07565b3480156107e357600080fd5b5061030e6107f2366004611e40565b610e2d565b34801561080357600080fd5b5061030e610812366004611d16565b610e60565b34801561082357600080fd5b5060135460145460155461053592919083565b34801561084257600080fd5b50600654610570906001600160a01b031681565b60606004805461086590611e6e565b80601f016020809104026020016040519081016040528092919081815260200182805461089190611e6e565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b5050505050905090565b6108f0610ed6565b604080516060810182528481526020810184905201819052601383905560148290556015819055806109228385611ebf565b61092c9190611ebf565b601755505050565b600033610942818585610f30565b5060019392505050565b610954610ed6565b604080516060810182528481526020810184905201819052601083905560118290556012819055806109868385611ebf565b6109909190611ebf565b601655505050565b6000336109a6858285611054565b6109b18585856110ce565b506001949350505050565b6109c4610ed6565b476109ce84611514565b60006109da8247611ed7565b90508215610a1557610a156109ef8486611ebf565b6109f98584611eee565b610a039190611f0d565b600a546001600160a01b03169061167d565b8315610a4e57610a4e610a288486611ebf565b610a328684611eee565b610a3c9190611f0d565b600b546001600160a01b03169061167d565b5050505050565b600033610942818585610a688383610ddc565b610a729190611ebf565b610f30565b610a7f610ed6565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b610ab5610ed6565b6103e881600c54610ac69190611eee565b610ad09190611f0d565b600e5550565b610ade610ed6565b610ae86000611796565b565b610af2610ed6565b600754600160b01b900460ff1615610b4a5760405162461bcd60e51b815260206004820152601660248201527554726164696e6720616c72656164792061637469766560501b60448201526064015b60405180910390fd5b6007805461ffff60a81b191661010160a81b17905543600855600955565b610b70610ed6565b816001600160a01b031663a9059cbb610b916000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015610bd957600080fd5b505af1158015610bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c119190611f2f565b505050565b60606005805461086590611e6e565b610c2d610ed6565b600d55565b610c3a610ed6565b610c5f81610c506000546001600160a01b031690565b6001600160a01b03169061167d565b50565b610c6a610ed6565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60003381610c9a8286610ddc565b905083811015610cfa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b41565b6109b18286868403610f30565b6000336109428185856110ce565b610d1d610ed6565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610d47610ed6565b6103e881600c54610d589190611eee565b610d629190611f0d565b600f5550565b610d70610ed6565b60005b8151811015610dd857600160196000848481518110610d9457610d94611f4c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610dd081611f62565b915050610d73565b5050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610e0f610ed6565b60078054911515600160a81b0260ff60a81b19909216919091179055565b610e35610ed6565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b610e68610ed6565b6001600160a01b038116610ecd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b41565b610c5f81611796565b6000546001600160a01b03163314610ae85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b41565b6001600160a01b038316610f925760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b41565b6001600160a01b038216610ff35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b41565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110608484610ddc565b905060001981146110c857818110156110bb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b41565b6110c88484848403610f30565b50505050565b600081116111305760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b41565b6001600160a01b03831660009081526019602052604090205460ff1615801561117257506001600160a01b03821660009081526019602052604090205460ff16155b6111be5760405162461bcd60e51b815260206004820152601960248201527f596f752063616e2774207472616e7366657220746f6b656e73000000000000006044820152606401610b41565b6001600160a01b03831660009081526018602052604090205460ff1615801561120057506001600160a01b03821660009081526018602052604090205460ff16155b80156112165750600754600160a01b900460ff16155b156113e257600754600160b01b900460ff1661126d5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81b9bdd081858dd1a5d99481e595d60521b6044820152606401610b41565b4360095460085461127e9190611ebf565b11156112f6576007546001600160a01b038381169116146112bd576001600160a01b0382166000908152601960205260409020805460ff191660011790555b6007546001600160a01b038481169116146112f6576001600160a01b0383166000908152601960205260409020805460ff191660011790555b600e548111156113485760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61785478416d6f756e740000006044820152606401610b41565b6007546001600160a01b038381169116146113e257600f5481611380846001600160a01b031660009081526001602052604090205490565b61138a9190611ebf565b11156113e25760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b6064820152608401610b41565b600754600090600160a01b900460ff168061141557506001600160a01b03841660009081526018602052604090205460ff165b8061143857506001600160a01b03831660009081526018602052604090205460ff165b1561144557506000611499565b6007546001600160a01b038481169116141561147c5760646017548361146b9190611eee565b6114759190611f0d565b9050611499565b60646016548361148c9190611eee565b6114969190611f0d565b90505b600754600160a81b900460ff1680156114bc5750600754600160a01b900460ff16155b80156114d657506007546001600160a01b03858116911614155b80156114e25750600081115b156114ef576114ef6117e6565b61150384846114fe8486611ed7565b61194a565b80156110c8576110c884308361194a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061154957611549611f4c565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561159d57600080fd5b505afa1580156115b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d59190611f7d565b816001815181106115e8576115e8611f4c565b6001600160a01b03928316602091820292909201015260065461160e9130911684610f30565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611647908590600090869030904290600401611f9a565b600060405180830381600087803b15801561166157600080fd5b505af1158015611675573d6000803e3d6000fd5b505050505050565b804710156116cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b41565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461171a576040519150601f19603f3d011682016040523d82523d6000602084013e61171f565b606091505b5050905080610c115760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b41565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600754600160a01b900460ff16610ae8576007805460ff60a01b1916600160a01b179055306000908152600160205260408120549050600d54811061193a57600060175460026118369190611eee565b90506000816013600101548461184c9190611eee565b6118569190611f0d565b905060006118648285611ed7565b90504761187082611514565b600061187c8247611ed7565b60145490915060009061188f9087611ed7565b6118999083611f0d565b6014549091506000906118ac9083611eee565b905080156118be576118be8682611af5565b6013546000906118cf846002611eee565b6118d99190611eee565b905080156118f757600a546118f7906001600160a01b03168261167d565b601554600090611908856002611eee565b6119129190611eee565b9050801561193057600b54611930906001600160a01b03168261167d565b5050505050505050505b506007805460ff60a01b19169055565b6001600160a01b0383166119ae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b41565b6001600160a01b038216611a105760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b41565b6001600160a01b03831660009081526001602052604090205481811015611a885760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b41565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ae89086815260200190565b60405180910390a36110c8565b600654611b0d9030906001600160a01b031684610f30565b600654600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015611b7857600080fd5b505af1158015611b8c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a4e919061200b565b600060208083528351808285015260005b81811015611bde57858101830151858201604001528201611bc2565b81811115611bf0576000604083870101525b50601f01601f1916929092016040019392505050565b600080600060608486031215611c1b57600080fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114610c5f57600080fd5b8035611c5281611c32565b919050565b60008060408385031215611c6a57600080fd5b8235611c7581611c32565b946020939093013593505050565b600080600060608486031215611c9857600080fd5b8335611ca381611c32565b92506020840135611cb381611c32565b929592945050506040919091013590565b60008060408385031215611cd757600080fd5b8235611ce281611c32565b91506020830135611cf281611c32565b809150509250929050565b600060208284031215611d0f57600080fd5b5035919050565b600060208284031215611d2857600080fd5b8135611d3381611c32565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611d6357600080fd5b823567ffffffffffffffff80821115611d7b57600080fd5b818501915085601f830112611d8f57600080fd5b813581811115611da157611da1611d3a565b8060051b604051601f19603f83011681018181108582111715611dc657611dc6611d3a565b604052918252848201925083810185019188831115611de457600080fd5b938501935b82851015611e0957611dfa85611c47565b84529385019392850192611de9565b98975050505050505050565b8015158114610c5f57600080fd5b600060208284031215611e3557600080fd5b8135611d3381611e15565b60008060408385031215611e5357600080fd5b8235611e5e81611c32565b91506020830135611cf281611e15565b600181811c90821680611e8257607f821691505b60208210811415611ea357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ed257611ed2611ea9565b500190565b600082821015611ee957611ee9611ea9565b500390565b6000816000190483118215151615611f0857611f08611ea9565b500290565b600082611f2a57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611f4157600080fd5b8151611d3381611e15565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611f7657611f76611ea9565b5060010190565b600060208284031215611f8f57600080fd5b8151611d3381611c32565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611fea5784516001600160a01b031683529383019391830191600101611fc5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561202057600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220b72ec3e038a20efb843eb5f0c46054624657d0b61c30ce29f1acf6451a64382a64736f6c634300080900330000000000000000000000001b89abb7f6e1b9840921d63c0f037dd216944f170000000000000000000000001b89abb7f6e1b9840921d63c0f037dd216944f170000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106102815760003560e01c806382aa7c681161014f578063a9059cbb116100c1578063dd62ed3e1161007a578063dd62ed3e14610797578063e01af92c146107b7578063e545fd6d146107d7578063f2fde38b146107f7578063f66895a314610817578063f887ea401461083657600080fd5b8063a9059cbb146106d1578063aa4bde28146106f1578063aacebbe314610707578063c18bc19514610727578063d34628cc14610747578063dbe66ca01461076757600080fd5b806395d89b411161011357806395d89b411461061c5780639d0014b1146106315780639e252f00146106515780639f55efb914610671578063a457c2d714610691578063a8aa1b31146106b157600080fd5b806382aa7c68146105885780638c0b5e22146105a85780638cd4426d146105be5780638da5cb5b146105de5780638ea5220f146105fc57600080fd5b8063293b7ef4116101f35780636256d181116101ac5780636256d1811461048a5780636ddd1713146104aa57806370a08231146104cb578063715018a614610501578063728f8eea1461051657806375f0a8741461055057600080fd5b8063293b7ef4146103e1578063313ce567146103f7578063395093511461041357806340b28c2f146104335780634ada218b1461045357806350c9a88f1461047457600080fd5b806318160ddd1161024557806318160ddd146103405780631870517a146103555780632253163d1461037557806323b872dd1461038b57806326b5d32f146103ab578063274a533c146103cb57600080fd5b80630445b6671461028d578063047fc9aa146102b657806306fdde03146102cc57806308733214146102ee578063095ea7b31461031057600080fd5b3661028857005b600080fd5b34801561029957600080fd5b506102a3600d5481565b6040519081526020015b60405180910390f35b3480156102c257600080fd5b506102a3600c5481565b3480156102d857600080fd5b506102e1610856565b6040516102ad9190611bb1565b3480156102fa57600080fd5b5061030e610309366004611c06565b6108e8565b005b34801561031c57600080fd5b5061033061032b366004611c57565b610934565b60405190151581526020016102ad565b34801561034c57600080fd5b506003546102a3565b34801561036157600080fd5b5061030e610370366004611c06565b61094c565b34801561038157600080fd5b506102a360175481565b34801561039757600080fd5b506103306103a6366004611c83565b610998565b3480156103b757600080fd5b5061030e6103c6366004611c06565b6109bc565b3480156103d757600080fd5b506102a360085481565b3480156103ed57600080fd5b506102a360165481565b34801561040357600080fd5b50604051601281526020016102ad565b34801561041f57600080fd5b5061033061042e366004611c57565b610a55565b34801561043f57600080fd5b5061030e61044e366004611cc4565b610a77565b34801561045f57600080fd5b5060075461033090600160b01b900460ff1681565b34801561048057600080fd5b506102a360095481565b34801561049657600080fd5b5061030e6104a5366004611cfd565b610aad565b3480156104b657600080fd5b5060075461033090600160a81b900460ff1681565b3480156104d757600080fd5b506102a36104e6366004611d16565b6001600160a01b031660009081526001602052604090205490565b34801561050d57600080fd5b5061030e610ad6565b34801561052257600080fd5b5060105460115460125461053592919083565b604080519384526020840192909252908201526060016102ad565b34801561055c57600080fd5b50600a54610570906001600160a01b031681565b6040516001600160a01b0390911681526020016102ad565b34801561059457600080fd5b5061030e6105a3366004611cfd565b610aea565b3480156105b457600080fd5b506102a3600e5481565b3480156105ca57600080fd5b5061030e6105d9366004611c57565b610b68565b3480156105ea57600080fd5b506000546001600160a01b0316610570565b34801561060857600080fd5b50600b54610570906001600160a01b031681565b34801561062857600080fd5b506102e1610c16565b34801561063d57600080fd5b5061030e61064c366004611cfd565b610c25565b34801561065d57600080fd5b5061030e61066c366004611cfd565b610c32565b34801561067d57600080fd5b5061030e61068c366004611d16565b610c62565b34801561069d57600080fd5b506103306106ac366004611c57565b610c8c565b3480156106bd57600080fd5b50600754610570906001600160a01b031681565b3480156106dd57600080fd5b506103306106ec366004611c57565b610d07565b3480156106fd57600080fd5b506102a3600f5481565b34801561071357600080fd5b5061030e610722366004611d16565b610d15565b34801561073357600080fd5b5061030e610742366004611cfd565b610d3f565b34801561075357600080fd5b5061030e610762366004611d50565b610d68565b34801561077357600080fd5b50610330610782366004611d16565b60186020526000908152604090205460ff1681565b3480156107a357600080fd5b506102a36107b2366004611cc4565b610ddc565b3480156107c357600080fd5b5061030e6107d2366004611e23565b610e07565b3480156107e357600080fd5b5061030e6107f2366004611e40565b610e2d565b34801561080357600080fd5b5061030e610812366004611d16565b610e60565b34801561082357600080fd5b5060135460145460155461053592919083565b34801561084257600080fd5b50600654610570906001600160a01b031681565b60606004805461086590611e6e565b80601f016020809104026020016040519081016040528092919081815260200182805461089190611e6e565b80156108de5780601f106108b3576101008083540402835291602001916108de565b820191906000526020600020905b8154815290600101906020018083116108c157829003601f168201915b5050505050905090565b6108f0610ed6565b604080516060810182528481526020810184905201819052601383905560148290556015819055806109228385611ebf565b61092c9190611ebf565b601755505050565b600033610942818585610f30565b5060019392505050565b610954610ed6565b604080516060810182528481526020810184905201819052601083905560118290556012819055806109868385611ebf565b6109909190611ebf565b601655505050565b6000336109a6858285611054565b6109b18585856110ce565b506001949350505050565b6109c4610ed6565b476109ce84611514565b60006109da8247611ed7565b90508215610a1557610a156109ef8486611ebf565b6109f98584611eee565b610a039190611f0d565b600a546001600160a01b03169061167d565b8315610a4e57610a4e610a288486611ebf565b610a328684611eee565b610a3c9190611f0d565b600b546001600160a01b03169061167d565b5050505050565b600033610942818585610a688383610ddc565b610a729190611ebf565b610f30565b610a7f610ed6565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b610ab5610ed6565b6103e881600c54610ac69190611eee565b610ad09190611f0d565b600e5550565b610ade610ed6565b610ae86000611796565b565b610af2610ed6565b600754600160b01b900460ff1615610b4a5760405162461bcd60e51b815260206004820152601660248201527554726164696e6720616c72656164792061637469766560501b60448201526064015b60405180910390fd5b6007805461ffff60a81b191661010160a81b17905543600855600955565b610b70610ed6565b816001600160a01b031663a9059cbb610b916000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101849052604401602060405180830381600087803b158015610bd957600080fd5b505af1158015610bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c119190611f2f565b505050565b60606005805461086590611e6e565b610c2d610ed6565b600d55565b610c3a610ed6565b610c5f81610c506000546001600160a01b031690565b6001600160a01b03169061167d565b50565b610c6a610ed6565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60003381610c9a8286610ddc565b905083811015610cfa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b41565b6109b18286868403610f30565b6000336109428185856110ce565b610d1d610ed6565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610d47610ed6565b6103e881600c54610d589190611eee565b610d629190611f0d565b600f5550565b610d70610ed6565b60005b8151811015610dd857600160196000848481518110610d9457610d94611f4c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610dd081611f62565b915050610d73565b5050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b610e0f610ed6565b60078054911515600160a81b0260ff60a81b19909216919091179055565b610e35610ed6565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b610e68610ed6565b6001600160a01b038116610ecd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b41565b610c5f81611796565b6000546001600160a01b03163314610ae85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b41565b6001600160a01b038316610f925760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b41565b6001600160a01b038216610ff35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b41565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110608484610ddc565b905060001981146110c857818110156110bb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b41565b6110c88484848403610f30565b50505050565b600081116111305760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b41565b6001600160a01b03831660009081526019602052604090205460ff1615801561117257506001600160a01b03821660009081526019602052604090205460ff16155b6111be5760405162461bcd60e51b815260206004820152601960248201527f596f752063616e2774207472616e7366657220746f6b656e73000000000000006044820152606401610b41565b6001600160a01b03831660009081526018602052604090205460ff1615801561120057506001600160a01b03821660009081526018602052604090205460ff16155b80156112165750600754600160a01b900460ff16155b156113e257600754600160b01b900460ff1661126d5760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81b9bdd081858dd1a5d99481e595d60521b6044820152606401610b41565b4360095460085461127e9190611ebf565b11156112f6576007546001600160a01b038381169116146112bd576001600160a01b0382166000908152601960205260409020805460ff191660011790555b6007546001600160a01b038481169116146112f6576001600160a01b0383166000908152601960205260409020805460ff191660011790555b600e548111156113485760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61785478416d6f756e740000006044820152606401610b41565b6007546001600160a01b038381169116146113e257600f5481611380846001600160a01b031660009081526001602052604090205490565b61138a9190611ebf565b11156113e25760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b6064820152608401610b41565b600754600090600160a01b900460ff168061141557506001600160a01b03841660009081526018602052604090205460ff165b8061143857506001600160a01b03831660009081526018602052604090205460ff165b1561144557506000611499565b6007546001600160a01b038481169116141561147c5760646017548361146b9190611eee565b6114759190611f0d565b9050611499565b60646016548361148c9190611eee565b6114969190611f0d565b90505b600754600160a81b900460ff1680156114bc5750600754600160a01b900460ff16155b80156114d657506007546001600160a01b03858116911614155b80156114e25750600081115b156114ef576114ef6117e6565b61150384846114fe8486611ed7565b61194a565b80156110c8576110c884308361194a565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061154957611549611f4c565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561159d57600080fd5b505afa1580156115b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d59190611f7d565b816001815181106115e8576115e8611f4c565b6001600160a01b03928316602091820292909201015260065461160e9130911684610f30565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790611647908590600090869030904290600401611f9a565b600060405180830381600087803b15801561166157600080fd5b505af1158015611675573d6000803e3d6000fd5b505050505050565b804710156116cd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610b41565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461171a576040519150601f19603f3d011682016040523d82523d6000602084013e61171f565b606091505b5050905080610c115760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610b41565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600754600160a01b900460ff16610ae8576007805460ff60a01b1916600160a01b179055306000908152600160205260408120549050600d54811061193a57600060175460026118369190611eee565b90506000816013600101548461184c9190611eee565b6118569190611f0d565b905060006118648285611ed7565b90504761187082611514565b600061187c8247611ed7565b60145490915060009061188f9087611ed7565b6118999083611f0d565b6014549091506000906118ac9083611eee565b905080156118be576118be8682611af5565b6013546000906118cf846002611eee565b6118d99190611eee565b905080156118f757600a546118f7906001600160a01b03168261167d565b601554600090611908856002611eee565b6119129190611eee565b9050801561193057600b54611930906001600160a01b03168261167d565b5050505050505050505b506007805460ff60a01b19169055565b6001600160a01b0383166119ae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b41565b6001600160a01b038216611a105760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b41565b6001600160a01b03831660009081526001602052604090205481811015611a885760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b41565b6001600160a01b0380851660008181526001602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611ae89086815260200190565b60405180910390a36110c8565b600654611b0d9030906001600160a01b031684610f30565b600654600b5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c4016060604051808303818588803b158015611b7857600080fd5b505af1158015611b8c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610a4e919061200b565b600060208083528351808285015260005b81811015611bde57858101830151858201604001528201611bc2565b81811115611bf0576000604083870101525b50601f01601f1916929092016040019392505050565b600080600060608486031215611c1b57600080fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114610c5f57600080fd5b8035611c5281611c32565b919050565b60008060408385031215611c6a57600080fd5b8235611c7581611c32565b946020939093013593505050565b600080600060608486031215611c9857600080fd5b8335611ca381611c32565b92506020840135611cb381611c32565b929592945050506040919091013590565b60008060408385031215611cd757600080fd5b8235611ce281611c32565b91506020830135611cf281611c32565b809150509250929050565b600060208284031215611d0f57600080fd5b5035919050565b600060208284031215611d2857600080fd5b8135611d3381611c32565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215611d6357600080fd5b823567ffffffffffffffff80821115611d7b57600080fd5b818501915085601f830112611d8f57600080fd5b813581811115611da157611da1611d3a565b8060051b604051601f19603f83011681018181108582111715611dc657611dc6611d3a565b604052918252848201925083810185019188831115611de457600080fd5b938501935b82851015611e0957611dfa85611c47565b84529385019392850192611de9565b98975050505050505050565b8015158114610c5f57600080fd5b600060208284031215611e3557600080fd5b8135611d3381611e15565b60008060408385031215611e5357600080fd5b8235611e5e81611c32565b91506020830135611cf281611e15565b600181811c90821680611e8257607f821691505b60208210811415611ea357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611ed257611ed2611ea9565b500190565b600082821015611ee957611ee9611ea9565b500390565b6000816000190483118215151615611f0857611f08611ea9565b500290565b600082611f2a57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611f4157600080fd5b8151611d3381611e15565b634e487b7160e01b600052603260045260246000fd5b6000600019821415611f7657611f76611ea9565b5060010190565b600060208284031215611f8f57600080fd5b8151611d3381611c32565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015611fea5784516001600160a01b031683529383019391830191600101611fc5565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561202057600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220b72ec3e038a20efb843eb5f0c46054624657d0b61c30ce29f1acf6451a64382a64736f6c63430008090033

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

0000000000000000000000001b89abb7f6e1b9840921d63c0f037dd216944f170000000000000000000000001b89abb7f6e1b9840921d63c0f037dd216944f170000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : dw (address): 0x1b89abB7f6E1b9840921d63c0f037DD216944F17
Arg [1] : mw (address): 0x1b89abB7f6E1b9840921d63c0f037DD216944F17
Arg [2] : rt (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000001b89abb7f6e1b9840921d63c0f037dd216944f17
Arg [1] : 0000000000000000000000001b89abb7f6e1b9840921d63c0f037dd216944f17
Arg [2] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

36528:8278:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37128:45;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;37128:45:0;;;;;;;;37083:38;;;;;;;;;;;;;;;;16472:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;42726:214::-;;;;;;;;;;-1:-1:-1;42726:214:0;;;;;:::i;:::-;;:::i;:::-;;18823:201;;;;;;;;;;-1:-1:-1;18823:201:0;;;;;:::i;:::-;;:::i;:::-;;;1879:14:1;;1872:22;1854:41;;1842:2;1827:18;18823:201:0;1714:187:1;17592:108:0;;;;;;;;;;-1:-1:-1;17680:12:0;;17592:108;;42513:205;;;;;;;;;;-1:-1:-1;42513:205:0;;;;;:::i;:::-;;:::i;37451:30::-;;;;;;;;;;;;;;;;19604:295;;;;;;;;;;-1:-1:-1;19604:295:0;;;;;:::i;:::-;;:::i;44200:546::-;;;;;;;;;;-1:-1:-1;44200:546:0;;;;;:::i;:::-;;:::i;36812:28::-;;;;;;;;;;;;;;;;37418:26;;;;;;;;;;;;;;;;17434:93;;;;;;;;;;-1:-1:-1;17434:93:0;;17517:2;2509:36:1;;2497:2;2482:18;17434:93:0;2367:184:1;20308:238:0;;;;;;;;;;-1:-1:-1;20308:238:0;;;;;:::i;:::-;;:::i;43190:148::-;;;;;;;;;;-1:-1:-1;43190:148:0;;;;;:::i;:::-;;:::i;36777:26::-;;;;;;;;;;-1:-1:-1;36777:26:0;;;;-1:-1:-1;;;36777:26:0;;;;;;36847:29;;;;;;;;;;;;;;;;43670:116;;;;;;;;;;-1:-1:-1;43670:116:0;;;;;:::i;:::-;;:::i;36747:23::-;;;;;;;;;;-1:-1:-1;36747:23:0;;;;-1:-1:-1;;;36747:23:0;;;;;;17763:127;;;;;;;;;;-1:-1:-1;17763:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17864:18:0;17837:7;17864:18;;;:9;:18;;;;;;;17763:127;9897:103;;;;;;;;;;;;;:::i;37332:34::-;;;;;;;;;;-1:-1:-1;37332:34:0;;;;;;;;;;;;;;;;3615:25:1;;;3671:2;3656:18;;3649:34;;;;3699:18;;;3692:34;3603:2;3588:18;37332:34:0;3413:319:1;36901:30:0;;;;;;;;;;-1:-1:-1;36901:30:0;;;;-1:-1:-1;;;;;36901:30:0;;;;;;-1:-1:-1;;;;;3901:32:1;;;3883:51;;3871:2;3856:18;36901:30:0;3737:203:1;42231:274:0;;;;;;;;;;-1:-1:-1;42231:274:0;;;;;:::i;:::-;;:::i;37180:46::-;;;;;;;;;;;;;;;;43930:142;;;;;;;;;;-1:-1:-1;43930:142:0;;;;;:::i;:::-;;:::i;9249:87::-;;;;;;;;;;-1:-1:-1;9295:7:0;9322:6;-1:-1:-1;;;;;9322:6:0;9249:87;;36938:24;;;;;;;;;;-1:-1:-1;36938:24:0;;;;-1:-1:-1;;;;;36938:24:0;;;16691:104;;;;;;;;;;;;;:::i;42113:110::-;;;;;;;;;;-1:-1:-1;42113:110:0;;;;;:::i;:::-;;:::i;44080:112::-;;;;;;;;;;-1:-1:-1;44080:112:0;;;;;:::i;:::-;;:::i;43078:104::-;;;;;;;;;;-1:-1:-1;43078:104:0;;;;;:::i;:::-;;:::i;21049:436::-;;;;;;;;;;-1:-1:-1;21049:436:0;;;;;:::i;:::-;;:::i;36687:19::-;;;;;;;;;;-1:-1:-1;36687:19:0;;;;-1:-1:-1;;;;;36687:19:0;;;18096:193;;;;;;;;;;-1:-1:-1;18096:193:0;;;;;:::i;:::-;;:::i;37254:50::-;;;;;;;;;;;;;;;;42952:114;;;;;;;;;;-1:-1:-1;42952:114:0;;;;;:::i;:::-;;:::i;43798:124::-;;;;;;;;;;-1:-1:-1;43798:124:0;;;;;:::i;:::-;;:::i;43350:168::-;;;;;;;;;;-1:-1:-1;43350:168:0;;;;;:::i;:::-;;:::i;37494:49::-;;;;;;;;;;-1:-1:-1;37494:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18352:151;;;;;;;;;;-1:-1:-1;18352:151:0;;;;;:::i;:::-;;:::i;42012:93::-;;;;;;;;;;-1:-1:-1;42012:93:0;;;;;:::i;:::-;;:::i;43524:134::-;;;;;;;;;;-1:-1:-1;43524:134:0;;;;;:::i;:::-;;:::i;10155:201::-;;;;;;;;;;-1:-1:-1;10155:201:0;;;;;:::i;:::-;;:::i;37373:38::-;;;;;;;;;;-1:-1:-1;37373:38:0;;;;;;;;;;;;36648:32;;;;;;;;;;-1:-1:-1;36648:32:0;;;;-1:-1:-1;;;;;36648:32:0;;;16472:100;16526:13;16559:5;16552:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16472:100;:::o;42726:214::-;9135:13;:11;:13::i;:::-;42843:35:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;42831:9:::1;:47:::0;;;;;;;;;;;42873:4;42902:23:::1;42861:10:::0;42849;42902:23:::1;:::i;:::-;:30;;;;:::i;:::-;42889:10;:43:::0;-1:-1:-1;;;42726:214:0:o;18823:201::-;18906:4;7880:10;18962:32;7880:10;18978:7;18987:6;18962:8;:32::i;:::-;-1:-1:-1;19012:4:0;;18823:201;-1:-1:-1;;;18823:201:0:o;42513:205::-;9135:13;:11;:13::i;:::-;42625:35:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;42617:5:::1;:43:::0;;;;;;;;;;;42655:4;42680:23:::1;42643:10:::0;42631;42680:23:::1;:::i;:::-;:30;;;;:::i;:::-;42671:6;:39:::0;-1:-1:-1;;;42513:205:0:o;19604:295::-;19735:4;7880:10;19793:38;19809:4;7880:10;19824:6;19793:15;:38::i;:::-;19842:27;19852:4;19858:2;19862:6;19842:9;:27::i;:::-;-1:-1:-1;19887:4:0;;19604:295;-1:-1:-1;;;;19604:295:0:o;44200:546::-;9135:13;:11;:13::i;:::-;44339:21:::1;44371:24;44388:6:::0;44371:16:::1;:24::i;:::-;44406:18;44427:35;44451:11:::0;44427:21:::1;:35;:::i;:::-;44406:56:::0;-1:-1:-1;44476:23:0;;44473:136:::1;;44501:108;44572:35;44588:19:::0;44572:13;:35:::1;:::i;:::-;44536:32;44549:19:::0;44536:10;:32:::1;:::i;:::-;:72;;;;:::i;:::-;44509:15;::::0;-1:-1:-1;;;;;44509:15:0::1;::::0;44501:34:::1;:108::i;:::-;44623:17:::0;;44620:118:::1;;44642:96;44701:35;44717:19:::0;44701:13;:35:::1;:::i;:::-;44671:26;44684:13:::0;44671:10;:26:::1;:::i;:::-;:66;;;;:::i;:::-;44650:9;::::0;-1:-1:-1;;;;;44650:9:0::1;::::0;44642:28:::1;:96::i;:::-;44306:440;;44200:546:::0;;;:::o;20308:238::-;20396:4;7880:10;20452:64;7880:10;20468:7;20505:10;20477:25;7880:10;20468:7;20477:9;:25::i;:::-;:38;;;;:::i;:::-;20452:8;:64::i;43190:148::-;9135:13;:11;:13::i;:::-;43291:6:::1;:16:::0;;-1:-1:-1;;;;;43291:16:0;;::::1;-1:-1:-1::0;;;;;;43291:16:0;;::::1;;::::0;;;43318:4:::1;:12:::0;;;;;::::1;::::0;::::1;;::::0;;43190:148::o;43670:116::-;9135:13;:11;:13::i;:::-;43774:4:::1;43765:6;43756;;:15;;;;:::i;:::-;:22;;;;:::i;:::-;43742:11;:36:::0;-1:-1:-1;43670:116:0:o;9897:103::-;9135:13;:11;:13::i;:::-;9962:30:::1;9989:1;9962:18;:30::i;:::-;9897:103::o:0;42231:274::-;9135:13;:11;:13::i;:::-;42317:14:::1;::::0;-1:-1:-1;;;42317:14:0;::::1;;;42316:15;42308:50;;;::::0;-1:-1:-1;;;42308:50:0;;7964:2:1;42308:50:0::1;::::0;::::1;7946:21:1::0;8003:2;7983:18;;;7976:30;-1:-1:-1;;;8022:18:1;;;8015:52;8084:18;;42308:50:0::1;;;;;;;;;42369:14;:21:::0;;-1:-1:-1;;;;42401:18:0;-1:-1:-1;;;42401:18:0;;;42446:12:::1;42430:13;:28:::0;42469:10:::1;:28:::0;42231:274::o;43930:142::-;9135:13;:11;:13::i;:::-;44025:12:::1;-1:-1:-1::0;;;;;44018:29:0::1;;44048:7;9295::::0;9322:6;-1:-1:-1;;;;;9322:6:0;;9249:87;44048:7:::1;44018:46;::::0;-1:-1:-1;;;;;;44018:46:0::1;::::0;;;;;;-1:-1:-1;;;;;8305:32:1;;;44018:46:0::1;::::0;::::1;8287:51:1::0;8354:18;;;8347:34;;;8260:18;;44018:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43930:142:::0;;:::o;16691:104::-;16747:13;16780:7;16773:14;;;;;:::i;42113:110::-;9135:13;:11;:13::i;:::-;42189::::1;:26:::0;42113:110::o;44080:112::-;9135:13;:11;:13::i;:::-;44147:37:::1;44174:9;44155:7;9295::::0;9322:6;-1:-1:-1;;;;;9322:6:0;;9249:87;44155:7:::1;-1:-1:-1::0;;;;;44147:26:0::1;::::0;::::1;:37::i;:::-;44080:112:::0;:::o;43078:104::-;9135:13;:11;:13::i;:::-;43153:9:::1;:21:::0;;-1:-1:-1;;;;;;43153:21:0::1;-1:-1:-1::0;;;;;43153:21:0;;;::::1;::::0;;;::::1;::::0;;43078:104::o;21049:436::-;21142:4;7880:10;21142:4;21225:25;7880:10;21242:7;21225:9;:25::i;:::-;21198:52;;21289:15;21269:16;:35;;21261:85;;;;-1:-1:-1;;;21261:85:0;;8844:2:1;21261:85:0;;;8826:21:1;8883:2;8863:18;;;8856:30;8922:34;8902:18;;;8895:62;-1:-1:-1;;;8973:18:1;;;8966:35;9018:19;;21261:85:0;8642:401:1;21261:85:0;21382:60;21391:5;21398:7;21426:15;21407:16;:34;21382:8;:60::i;18096:193::-;18175:4;7880:10;18231:28;7880:10;18248:2;18252:6;18231:9;:28::i;42952:114::-;9135:13;:11;:13::i;:::-;43031:15:::1;:27:::0;;-1:-1:-1;;;;;;43031:27:0::1;-1:-1:-1::0;;;;;43031:27:0;;;::::1;::::0;;;::::1;::::0;;42952:114::o;43798:124::-;9135:13;:11;:13::i;:::-;43910:4:::1;43901:6;43892;;:15;;;;:::i;:::-;:22;;;;:::i;:::-;43874:15;:40:::0;-1:-1:-1;43798:124:0:o;43350:168::-;9135:13;:11;:13::i;:::-;43425:6:::1;43420:91;43441:6;:13;43437:1;:17;43420:91;;;43495:4;43476:5;:16;43482:6;43489:1;43482:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43476:16:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43476:16:0;:23;;-1:-1:-1;;43476:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43456:3;::::1;::::0;::::1;:::i;:::-;;;;43420:91;;;;43350:168:::0;:::o;18352:151::-;-1:-1:-1;;;;;18468:18:0;;;18441:7;18468:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18352:151::o;42012:93::-;9135:13;:11;:13::i;:::-;42078:11:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;42078:19:0::1;-1:-1:-1::0;;;;42078:19:0;;::::1;::::0;;;::::1;::::0;;42012:93::o;43524:134::-;9135:13;:11;:13::i;:::-;-1:-1:-1;;;;;43616:26:0;;;::::1;;::::0;;;:16:::1;:26;::::0;;;;:34;;-1:-1:-1;;43616:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43524:134::o;10155:201::-;9135:13;:11;:13::i;:::-;-1:-1:-1;;;;;10244:22:0;::::1;10236:73;;;::::0;-1:-1:-1;;;10236:73:0;;9522:2:1;10236:73:0::1;::::0;::::1;9504:21:1::0;9561:2;9541:18;;;9534:30;9600:34;9580:18;;;9573:62;-1:-1:-1;;;9651:18:1;;;9644:36;9697:19;;10236:73:0::1;9320:402:1::0;10236:73:0::1;10320:28;10339:8;10320:18;:28::i;9414:132::-:0;9295:7;9322:6;-1:-1:-1;;;;;9322:6:0;7880:10;9478:23;9470:68;;;;-1:-1:-1;;;9470:68:0;;9929:2:1;9470:68:0;;;9911:21:1;;;9948:18;;;9941:30;10007:34;9987:18;;;9980:62;10059:18;;9470:68:0;9727:356:1;25076:380:0;-1:-1:-1;;;;;25212:19:0;;25204:68;;;;-1:-1:-1;;;25204:68:0;;10290:2:1;25204:68:0;;;10272:21:1;10329:2;10309:18;;;10302:30;10368:34;10348:18;;;10341:62;-1:-1:-1;;;10419:18:1;;;10412:34;10463:19;;25204:68:0;10088:400:1;25204:68:0;-1:-1:-1;;;;;25291:21:0;;25283:68;;;;-1:-1:-1;;;25283:68:0;;10695:2:1;25283:68:0;;;10677:21:1;10734:2;10714:18;;;10707:30;10773:34;10753:18;;;10746:62;-1:-1:-1;;;10824:18:1;;;10817:32;10866:19;;25283:68:0;10493:398:1;25283:68:0;-1:-1:-1;;;;;25364:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25416:32;;160:25:1;;;25416:32:0;;133:18:1;25416:32:0;;;;;;;25076:380;;;:::o;25747:453::-;25882:24;25909:25;25919:5;25926:7;25909:9;:25::i;:::-;25882:52;;-1:-1:-1;;25949:16:0;:37;25945:248;;26031:6;26011:16;:26;;26003:68;;;;-1:-1:-1;;;26003:68:0;;11098:2:1;26003:68:0;;;11080:21:1;11137:2;11117:18;;;11110:30;11176:31;11156:18;;;11149:59;11225:18;;26003:68:0;10896:353:1;26003:68:0;26115:51;26124:5;26131:7;26159:6;26140:16;:25;26115:8;:51::i;:::-;25871:329;25747:453;;;:::o;38373:1389::-;38489:1;38480:6;:10;38472:64;;;;-1:-1:-1;;;38472:64:0;;11456:2:1;38472:64:0;;;11438:21:1;11495:2;11475:18;;;11468:30;11534:34;11514:18;;;11507:62;-1:-1:-1;;;11585:18:1;;;11578:39;11634:19;;38472:64:0;11254:405:1;38472:64:0;-1:-1:-1;;;;;38556:13:0;;;;;;:5;:13;;;;;;;;38555:14;:35;;;;-1:-1:-1;;;;;;38574:16:0;;;;;;:5;:16;;;;;;;;38573:17;38555:35;38547:73;;;;-1:-1:-1;;;38547:73:0;;11866:2:1;38547:73:0;;;11848:21:1;11905:2;11885:18;;;11878:30;11944:27;11924:18;;;11917:55;11989:18;;38547:73:0;11664:349:1;38547:73:0;-1:-1:-1;;;;;38663:24:0;;;;;;:16;:24;;;;;;;;38662:25;:57;;;;-1:-1:-1;;;;;;38692:27:0;;;;;;:16;:27;;;;;;;;38691:28;38662:57;:70;;;;-1:-1:-1;38724:8:0;;-1:-1:-1;;;38724:8:0;;;;38723:9;38662:70;38659:589;;;38756:14;;-1:-1:-1;;;38756:14:0;;;;38748:49;;;;-1:-1:-1;;;38748:49:0;;12220:2:1;38748:49:0;;;12202:21:1;12259:2;12239:18;;;12232:30;-1:-1:-1;;;12278:18:1;;;12271:52;12340:18;;38748:49:0;12018:346:1;38748:49:0;38844:12;38831:10;;38815:13;;:26;;;;:::i;:::-;:41;38812:183;;;38892:4;;-1:-1:-1;;;;;38879:17:0;;;38892:4;;38879:17;38876:45;;-1:-1:-1;;;;;38898:16:0;;;;;;:5;:16;;;;;:23;;-1:-1:-1;;38898:23:0;38917:4;38898:23;;;38876:45;38953:4;;-1:-1:-1;;;;;38943:14:0;;;38953:4;;38943:14;38940:39;;-1:-1:-1;;;;;38959:13:0;;;;;;:5;:13;;;;;:20;;-1:-1:-1;;38959:20:0;38975:4;38959:20;;;38940:39;39027:11;;39017:6;:21;;39009:63;;;;-1:-1:-1;;;39009:63:0;;12571:2:1;39009:63:0;;;12553:21:1;12610:2;12590:18;;;12583:30;12649:31;12629:18;;;12622:59;12698:18;;39009:63:0;12369:353:1;39009:63:0;39103:4;;-1:-1:-1;;;;;39090:17:0;;;39103:4;;39090:17;39087:150;;39168:15;;39158:6;39135:20;39145:9;-1:-1:-1;;;;;17864:18:0;17837:7;17864:18;;;:9;:18;;;;;;;17763:127;39135:20;:29;;;;:::i;:::-;:48;;39127:94;;;;-1:-1:-1;;;39127:94:0;;12929:2:1;39127:94:0;;;12911:21:1;12968:2;12948:18;;;12941:30;13007:34;12987:18;;;12980:62;-1:-1:-1;;;13058:18:1;;;13051:31;13099:19;;39127:94:0;12727:397:1;39127:94:0;39300:8;;39260:11;;-1:-1:-1;;;39300:8:0;;;;;:36;;-1:-1:-1;;;;;;39312:24:0;;;;;;:16;:24;;;;;;;;39300:36;:67;;;-1:-1:-1;;;;;;39340:27:0;;;;;;:16;:27;;;;;;;;39300:67;39296:235;;;-1:-1:-1;39375:1:0;39296:235;;;39435:4;;-1:-1:-1;;;;;39422:17:0;;;39435:4;;39422:17;39419:100;;;39469:3;39456:10;;39447:6;:19;;;;:::i;:::-;:25;;;;:::i;:::-;39441:31;;39419:100;;;39516:3;39507:6;;39498;:15;;;;:::i;:::-;:21;;;;:::i;:::-;39492:27;;39419:100;39557:11;;-1:-1:-1;;;39557:11:0;;;;:24;;;;-1:-1:-1;39573:8:0;;-1:-1:-1;;;39573:8:0;;;;39572:9;39557:24;:42;;;;-1:-1:-1;39595:4:0;;-1:-1:-1;;;;;39585:14:0;;;39595:4;;39585:14;;39557:42;:53;;;;;39609:1;39603:3;:7;39557:53;39553:72;;;39612:13;:11;:13::i;:::-;39638:48;39654:6;39662:9;39673:12;39682:3;39673:6;:12;:::i;:::-;39638:15;:48::i;:::-;39700:7;;39697:55;;39709:43;39725:6;39741:4;39748:3;39709:15;:43::i;41099:400::-;41189:16;;;41203:1;41189:16;;;;;;;;41165:21;;41189:16;;;;;;;;;;-1:-1:-1;41189:16:0;41165:40;;41234:4;41216;41221:1;41216:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41216:23:0;;;:7;;;;;;;;;;:23;;;;41260:6;;:13;;;-1:-1:-1;;;41260:13:0;;;;:6;;;;;:11;;:13;;;;;41216:7;;41260:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41250:4;41255:1;41250:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41250:23:0;;;:7;;;;;;;;;:23;41318:6;;41286:53;;41303:4;;41318:6;41327:11;41286:8;:53::i;:::-;41378:6;;:111;;-1:-1:-1;;;41378:111:0;;-1:-1:-1;;;;;41378:6:0;;;;:57;;:111;;41436:11;;41378:6;;41452:4;;41466;;41473:15;;41378:111;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41154:345;41099:400;:::o;36204:317::-;36319:6;36294:21;:31;;36286:73;;;;-1:-1:-1;;;36286:73:0;;14572:2:1;36286:73:0;;;14554:21:1;14611:2;14591:18;;;14584:30;14650:31;14630:18;;;14623:59;14699:18;;36286:73:0;14370:353:1;36286:73:0;36373:12;36391:9;-1:-1:-1;;;;;36391:14:0;36413:6;36391:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36372:52;;;36443:7;36435:78;;;;-1:-1:-1;;;36435:78:0;;15140:2:1;36435:78:0;;;15122:21:1;15179:2;15159:18;;;15152:30;15218:34;15198:18;;;15191:62;15289:28;15269:18;;;15262:56;15335:19;;36435:78:0;14938:422:1;10516:191:0;10590:16;10609:6;;-1:-1:-1;;;;;10626:17:0;;;-1:-1:-1;;;;;;10626:17:0;;;;;;10659:40;;10609:6;;;;;;;10659:40;;10590:16;10659:40;10579:128;10516:191;:::o;39770:1319::-;37636:8;;-1:-1:-1;;;37636:8:0;;;;37631:104;;37661:8;:15;;-1:-1:-1;;;;37661:15:0;-1:-1:-1;;;37661:15:0;;;39863:4:::1;-1:-1:-1::0;17864:18:0;;;-1:-1:-1;17864:18:0;;;;;;39819:50:::1;;39903:13;;39884:15;:32;39880:1202;;39935:19;39957:10;;39970:1;39957:14;;;;:::i;:::-;39935:36;;39986:32;40061:11;40039:9;:19;;;40021:15;:37;;;;:::i;:::-;:51;;;;:::i;:::-;39986:86:::0;-1:-1:-1;40087:14:0::1;40104:42;39986:86:::0;40104:15;:42:::1;:::i;:::-;40087:59:::0;-1:-1:-1;40192:21:0::1;40234:24;40087:59:::0;40234:16:::1;:24::i;:::-;40279:20;40302:38;40326:14:::0;40302:21:::1;:38;:::i;:::-;40406:19:::0;;40279:61;;-1:-1:-1;40355:19:0::1;::::0;40392:33:::1;::::0;:11;:33:::1;:::i;:::-;40376:50;::::0;:12;:50:::1;:::i;:::-;40487:19:::0;;40355:71;;-1:-1:-1;40441:29:0::1;::::0;40473:33:::1;::::0;40355:71;40473:33:::1;:::i;:::-;40441:65:::0;-1:-1:-1;40530:25:0;;40527:170:::1;;40620:61;40633:24;40659:21;40620:12;:61::i;:::-;40758:9;:19:::0;40717:20:::1;::::0;40740:15:::1;:11:::0;40754:1:::1;40740:15;:::i;:::-;:37;;;;:::i;:::-;40717:60:::0;-1:-1:-1;40795:16:0;;40792:103:::1;;40839:15;::::0;40831:48:::1;::::0;-1:-1:-1;;;;;40839:15:0::1;40866:12:::0;40831:34:::1;:48::i;:::-;40958:13:::0;;40923:14:::1;::::0;40940:15:::1;:11:::0;40958:13:::1;40940:15;:::i;:::-;:31;;;;:::i;:::-;40923:48:::0;-1:-1:-1;40989:10:0;;40986:85:::1;;41027:9;::::0;41019:36:::1;::::0;-1:-1:-1;;;;;41027:9:0::1;41048:6:::0;41019:28:::1;:36::i;:::-;39918:1164;;;;;;;;;39880:1202;-1:-1:-1::0;37707:8:0;:16;;-1:-1:-1;;;;37707:16:0;;;39770:1319::o;21955:840::-;-1:-1:-1;;;;;22086:18:0;;22078:68;;;;-1:-1:-1;;;22078:68:0;;15567:2:1;22078:68:0;;;15549:21:1;15606:2;15586:18;;;15579:30;15645:34;15625:18;;;15618:62;-1:-1:-1;;;15696:18:1;;;15689:35;15741:19;;22078:68:0;15365:401:1;22078:68:0;-1:-1:-1;;;;;22165:16:0;;22157:64;;;;-1:-1:-1;;;22157:64:0;;15973:2:1;22157:64:0;;;15955:21:1;16012:2;15992:18;;;15985:30;16051:34;16031:18;;;16024:62;-1:-1:-1;;;16102:18:1;;;16095:33;16145:19;;22157:64:0;15771:399:1;22157:64:0;-1:-1:-1;;;;;22307:15:0;;22285:19;22307:15;;;:9;:15;;;;;;22341:21;;;;22333:72;;;;-1:-1:-1;;;22333:72:0;;16377:2:1;22333:72:0;;;16359:21:1;16416:2;16396:18;;;16389:30;16455:34;16435:18;;;16428:62;-1:-1:-1;;;16506:18:1;;;16499:36;16552:19;;22333:72:0;16175:402:1;22333:72:0;-1:-1:-1;;;;;22441:15:0;;;;;;;:9;:15;;;;;;22459:20;;;22441:38;;22659:13;;;;;;;;;;:23;;;;;;22711:26;;;;;;22473:6;160:25:1;;148:2;133:18;;14:177;22711:26:0;;;;;;;;22750:37;43930:142;41507:497;41687:6;;41655:53;;41672:4;;-1:-1:-1;;;;;41687:6:0;41696:11;41655:8;:53::i;:::-;41751:6;;41946:9;;41751:245;;-1:-1:-1;;;41751:245:0;;41814:4;41751:245;;;16923:34:1;16973:18;;;16966:34;;;41751:6:0;17016:18:1;;;17009:34;;;17059:18;;;17052:34;-1:-1:-1;;;;;41946:9:0;;;17102:19:1;;;17095:44;41970:15:0;17155:19:1;;;17148:35;41751:6:0;;;:22;;41781:9;;16857:19:1;;41751:245:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:316::-;875:6;883;891;944:2;932:9;923:7;919:23;915:32;912:52;;;960:1;957;950:12;912:52;-1:-1:-1;;983:23:1;;;1053:2;1038:18;;1025:32;;-1:-1:-1;1104:2:1;1089:18;;;1076:32;;798:316;-1:-1:-1;798:316:1:o;1119:131::-;-1:-1:-1;;;;;1194:31:1;;1184:42;;1174:70;;1240:1;1237;1230:12;1255:134;1323:20;;1352:31;1323:20;1352:31;:::i;:::-;1255:134;;;:::o;1394:315::-;1462:6;1470;1523:2;1511:9;1502:7;1498:23;1494:32;1491:52;;;1539:1;1536;1529:12;1491:52;1578:9;1565:23;1597:31;1622:5;1597:31;:::i;:::-;1647:5;1699:2;1684:18;;;;1671:32;;-1:-1:-1;;;1394:315:1:o;1906:456::-;1983:6;1991;1999;2052:2;2040:9;2031:7;2027:23;2023:32;2020:52;;;2068:1;2065;2058:12;2020:52;2107:9;2094:23;2126:31;2151:5;2126:31;:::i;:::-;2176:5;-1:-1:-1;2233:2:1;2218:18;;2205:32;2246:33;2205:32;2246:33;:::i;:::-;1906:456;;2298:7;;-1:-1:-1;;;2352:2:1;2337:18;;;;2324:32;;1906:456::o;2556:415::-;2651:6;2659;2712:2;2700:9;2691:7;2687:23;2683:32;2680:52;;;2728:1;2725;2718:12;2680:52;2767:9;2754:23;2786:31;2811:5;2786:31;:::i;:::-;2836:5;-1:-1:-1;2893:2:1;2878:18;;2865:32;2906:33;2865:32;2906:33;:::i;:::-;2958:7;2948:17;;;2556:415;;;;;:::o;2976:180::-;3035:6;3088:2;3076:9;3067:7;3063:23;3059:32;3056:52;;;3104:1;3101;3094:12;3056:52;-1:-1:-1;3127:23:1;;2976:180;-1:-1:-1;2976:180:1:o;3161:247::-;3220:6;3273:2;3261:9;3252:7;3248:23;3244:32;3241:52;;;3289:1;3286;3279:12;3241:52;3328:9;3315:23;3347:31;3372:5;3347:31;:::i;:::-;3397:5;3161:247;-1:-1:-1;;;3161:247:1:o;3945:127::-;4006:10;4001:3;3997:20;3994:1;3987:31;4037:4;4034:1;4027:15;4061:4;4058:1;4051:15;4077:1121;4161:6;4192:2;4235;4223:9;4214:7;4210:23;4206:32;4203:52;;;4251:1;4248;4241:12;4203:52;4291:9;4278:23;4320:18;4361:2;4353:6;4350:14;4347:34;;;4377:1;4374;4367:12;4347:34;4415:6;4404:9;4400:22;4390:32;;4460:7;4453:4;4449:2;4445:13;4441:27;4431:55;;4482:1;4479;4472:12;4431:55;4518:2;4505:16;4540:2;4536;4533:10;4530:36;;;4546:18;;:::i;:::-;4592:2;4589:1;4585:10;4624:2;4618:9;4687:2;4683:7;4678:2;4674;4670:11;4666:25;4658:6;4654:38;4742:6;4730:10;4727:22;4722:2;4710:10;4707:18;4704:46;4701:72;;;4753:18;;:::i;:::-;4789:2;4782:22;4839:18;;;4873:15;;;;-1:-1:-1;4915:11:1;;;4911:20;;;4943:19;;;4940:39;;;4975:1;4972;4965:12;4940:39;4999:11;;;;5019:148;5035:6;5030:3;5027:15;5019:148;;;5101:23;5120:3;5101:23;:::i;:::-;5089:36;;5052:12;;;;5145;;;;5019:148;;;5186:6;4077:1121;-1:-1:-1;;;;;;;;4077:1121:1:o;5596:118::-;5682:5;5675:13;5668:21;5661:5;5658:32;5648:60;;5704:1;5701;5694:12;5719:241;5775:6;5828:2;5816:9;5807:7;5803:23;5799:32;5796:52;;;5844:1;5841;5834:12;5796:52;5883:9;5870:23;5902:28;5924:5;5902:28;:::i;5965:382::-;6030:6;6038;6091:2;6079:9;6070:7;6066:23;6062:32;6059:52;;;6107:1;6104;6097:12;6059:52;6146:9;6133:23;6165:31;6190:5;6165:31;:::i;:::-;6215:5;-1:-1:-1;6272:2:1;6257:18;;6244:32;6285:30;6244:32;6285:30;:::i;6587:380::-;6666:1;6662:12;;;;6709;;;6730:61;;6784:4;6776:6;6772:17;6762:27;;6730:61;6837:2;6829:6;6826:14;6806:18;6803:38;6800:161;;;6883:10;6878:3;6874:20;6871:1;6864:31;6918:4;6915:1;6908:15;6946:4;6943:1;6936:15;6800:161;;6587:380;;;:::o;6972:127::-;7033:10;7028:3;7024:20;7021:1;7014:31;7064:4;7061:1;7054:15;7088:4;7085:1;7078:15;7104:128;7144:3;7175:1;7171:6;7168:1;7165:13;7162:39;;;7181:18;;:::i;:::-;-1:-1:-1;7217:9:1;;7104:128::o;7237:125::-;7277:4;7305:1;7302;7299:8;7296:34;;;7310:18;;:::i;:::-;-1:-1:-1;7347:9:1;;7237:125::o;7367:168::-;7407:7;7473:1;7469;7465:6;7461:14;7458:1;7455:21;7450:1;7443:9;7436:17;7432:45;7429:71;;;7480:18;;:::i;:::-;-1:-1:-1;7520:9:1;;7367:168::o;7540:217::-;7580:1;7606;7596:132;;7650:10;7645:3;7641:20;7638:1;7631:31;7685:4;7682:1;7675:15;7713:4;7710:1;7703:15;7596:132;-1:-1:-1;7742:9:1;;7540:217::o;8392:245::-;8459:6;8512:2;8500:9;8491:7;8487:23;8483:32;8480:52;;;8528:1;8525;8518:12;8480:52;8560:9;8554:16;8579:28;8601:5;8579:28;:::i;9048:127::-;9109:10;9104:3;9100:20;9097:1;9090:31;9140:4;9137:1;9130:15;9164:4;9161:1;9154:15;9180:135;9219:3;-1:-1:-1;;9240:17:1;;9237:43;;;9260:18;;:::i;:::-;-1:-1:-1;9307:1:1;9296:13;;9180:135::o;13129:251::-;13199:6;13252:2;13240:9;13231:7;13227:23;13223:32;13220:52;;;13268:1;13265;13258:12;13220:52;13300:9;13294:16;13319:31;13344:5;13319:31;:::i;13385:980::-;13647:4;13695:3;13684:9;13680:19;13726:6;13715:9;13708:25;13752:2;13790:6;13785:2;13774:9;13770:18;13763:34;13833:3;13828:2;13817:9;13813:18;13806:31;13857:6;13892;13886:13;13923:6;13915;13908:22;13961:3;13950:9;13946:19;13939:26;;14000:2;13992:6;13988:15;13974:29;;14021:1;14031:195;14045:6;14042:1;14039:13;14031:195;;;14110:13;;-1:-1:-1;;;;;14106:39:1;14094:52;;14201:15;;;;14166:12;;;;14142:1;14060:9;14031:195;;;-1:-1:-1;;;;;;;14282:32:1;;;;14277:2;14262:18;;14255:60;-1:-1:-1;;;14346:3:1;14331:19;14324:35;14243:3;13385:980;-1:-1:-1;;;13385:980:1:o;17194:306::-;17282:6;17290;17298;17351:2;17339:9;17330:7;17326:23;17322:32;17319:52;;;17367:1;17364;17357:12;17319:52;17396:9;17390:16;17380:26;;17446:2;17435:9;17431:18;17425:25;17415:35;;17490:2;17479:9;17475:18;17469:25;17459:35;;17194:306;;;;;:::o

Swarm Source

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