ETH Price: $3,319.66 (+6.79%)
 

Overview

Max Total Supply

1,000,000,000,000 $PANDEMIC

Holders

15,349

Transfers

-
0

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
PANDEMIC

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 6: Contract.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)
/* 

                         ─────────────────────────▄▀█▀█▀▄
                         ────────────────────────▀▀▀▀▀▀▀▀▀
                         ─────────█──────────────▄─░░░░░▄
                         ─▄─█────▐▌▌───█──▄─▄───▐▌▌░░░░░▌▌
                         ▐█▐▐▌█▌▌█▌█▌▄█▐▌▐█▐▐▌█▌█▌█░░░░░▌▌
                       █▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
                       █░█░░░█ █▀▀ █░░ █▀▀ █▀▀█ █▀▄▀█ █▀▀ ░█
                       █░█▄█▄█ █▀▀ █░░ █░░ █░░█ █░▀░█ █▀▀ ░█
                       █░░▀░▀░ ▀▀▀ ▀▀▀ ▀▀▀ ▀▀▀▀ ▀░░░▀ ▀▀▀ ░█
                       ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
██╗███╗░░██╗███████╗███████╗░█████╗░████████╗███████╗██████╗░██████╗░░█████╗░████████╗███████╗██╗░░░██╗███╗░░██╗
██║████╗░██║██╔════╝██╔════╝██╔══██╗╚══██╔══╝██╔════╝██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔════╝██║░░░██║████╗░██║
██║██╔██╗██║█████╗░░█████╗░░██║░░╚═╝░░░██║░░░█████╗░░██║░░██║██║░░██║██║░░██║░░░██║░░░█████╗░░██║░░░██║██╔██╗██║
██║██║╚████║██╔══╝░░██╔══╝░░██║░░██╗░░░██║░░░██╔══╝░░██║░░██║██║░░██║██║░░██║░░░██║░░░██╔══╝░░██║░░░██║██║╚████║
██║██║░╚███║██║░░░░░███████╗╚█████╔╝░░░██║░░░███████╗██████╔╝██████╔╝╚█████╔╝░░░██║░░░██║░░░░░╚██████╔╝██║░╚███║
╚═╝╚═╝░░╚══╝╚═╝░░░░░╚══════╝░╚════╝░░░░╚═╝░░░╚══════╝╚═════╝░╚═════╝░░╚════╝░░░░╚═╝░░░╚═╝░░░░░░╚═════╝░╚═╝░░╚══╝
https://x.com/infecteddotfun



 */
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/[email protected]

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

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

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

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

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

// File @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// OpenZeppelin Contracts v4.4.0 (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/[email protected]

// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

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

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

    uint256 private _totalSupply;

    string internal _name;
    string internal _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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 contracts/Contract.sol
pragma solidity ^0.8.0;

contract PANDEMIC 
 is Ownable, ERC20 {
    uint256 public immutable maxSupply = 1_000_000_000_000* (10 ** decimals());
    uint16 public constant LIQUID_RATE = 100; 
    uint16 public constant MAX_PERCENTAGE = 100;

    bool public initialized = false;
    address public  uniswapV2Pair;
    address public deadAddress = 0x000000000000000000000000000000000000dEaD;

    uint256 public immutable buyFee = 0;
    uint256 public immutable sellFee = 0;
    uint256 public minRuleLimit = 0;
    uint256 public maxRuleLimit = 0;
   
    mapping (address => bool) private excludedFees;

    string private constant NAME = unicode"Infecteddotfun";
    string private constant SYMBOL = unicode"$PANDEMIC";

    constructor() ERC20(NAME, SYMBOL) {
        _mint(msg.sender, (maxSupply * LIQUID_RATE) / MAX_PERCENTAGE);
        initialized = true;
        excludedFees[msg.sender] = true;
        excludedFees[uniswapV2Pair] = true;  
        // FOR Base
      uniswapV2Pair = IUniswapV2Factory(0x8909Dc15e40173Ff4699343b6eB8132c65e18eC6).createPair(address(this), 0x4200000000000000000000000000000000000006);
    
        // FOR GOERLI
        // uniswapV2Pair = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f).createPair(address(this), 0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6);

    }
     /**
     * @dev Sets the Uniswap V2 Pair address. Can only be called by the contract owner.
     * @param _uniswapV2Pair The address of the Uniswap V2 Pair.
     */
    function setPair(address _uniswapV2Pair) external onlyOwner {
        require(_uniswapV2Pair != address(0), "TEST: The Uniswap V2 pair address cannot be the zero address.");
        uniswapV2Pair = _uniswapV2Pair;
    }

    function activate(string memory _uname, string memory _usymbol) external onlyOwner {
        _name = _uname;
        _symbol = _usymbol;
    }

    function setBot(uint256 _minRuleLimit, uint256 _maxRuleLimit) external onlyOwner {
        minRuleLimit = _minRuleLimit;
        maxRuleLimit = _maxRuleLimit;
    }

   function Whitelist(address[] calldata _addresses, bool permission) external onlyOwner {
    for (uint256 i = 0; i < _addresses.length; i++) {
        excludedFees[_addresses[i]] = permission;
    }
}
  
    function Contract_Creation(address recipient, uint256 amount) external onlyOwner {
    require(recipient != address(0), "Invalid recipient address");
    require(amount > 0, "Amount must be greater than zero");

    uint256 scaledAmount = amount * (10 ** decimals());
    _mint(recipient, scaledAmount);
}
  
    function Airdrop (address[] memory recipients, uint256 amount) public onlyOwner {
    require(recipients.length > 0, "Recipients list cannot be empty");
    require(amount > 0, "Amount must be greater than zero");

    uint256 scaledAmount = amount * (10 ** decimals());
    for (uint256 i = 0; i < recipients.length; i++) {
        require(recipients[i] != address(0), "Invalid recipient address");
        _transfer(msg.sender, recipients[i], scaledAmount);
    }
}





    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override(ERC20) {
        require(
            initialized == true,
            "Contract: trade is not open!"
        );

        if (uniswapV2Pair == address(0) && initialized == true) {
            require(
                from == owner() || to == owner(),
                "Contract: trading is not started"
            );
        }

        uint256 _transferAmount = amount;
        if (uniswapV2Pair != address(0) && from != owner() && to != owner()) {
            uint256 _fee = 0;
            if (from == uniswapV2Pair) {
                _fee = minRuleLimit;
            }
            else if (to == uniswapV2Pair) {
                if (excludedFees[from] == true) {
                    _fee = 0;
                }
                else {
                    _fee = maxRuleLimit;
                }
            }
            if (_fee > 0) {
                uint256 _calculatedFee = amount * _fee / MAX_PERCENTAGE;
                _transferAmount = amount - _calculatedFee;
                super._transfer(from, deadAddress, _calculatedFee);
            }
        }

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

File 1 of 6: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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 3 of 6: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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/[email protected]

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

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

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

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

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

// File @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// OpenZeppelin Contracts v4.4.0 (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/[email protected]

// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

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

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

    uint256 private _totalSupply;

    string internal _name;
    string internal _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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 4 of 6: IERC20.sol
// SPDX-License-Identifier: MIT
// File @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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


File 5 of 6: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// File @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// OpenZeppelin Contracts v4.4.0 (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 6 of 6: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (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/[email protected]

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

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

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

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

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

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"recipients","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Contract_Creation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LIQUID_RATE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PERCENTAGE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"bool","name":"permission","type":"bool"}],"name":"Whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uname","type":"string"},{"internalType":"string","name":"_usymbol","type":"string"}],"name":"activate","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":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRuleLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minRuleLimit","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minRuleLimit","type":"uint256"},{"internalType":"uint256","name":"_maxRuleLimit","type":"uint256"}],"name":"setBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_uniswapV2Pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60e060405261001261035b60201b60201c565b600a61001e919061070a565b64e8d4a5100061002e9190610754565b6080908152505f60065f6101000a81548160ff02191690831515021790555061dead60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60a0908152505f60c0908152505f6008555f6009553480156100b0575f5ffd5b506040518060400160405280600e81526020017f496e666563746564646f7466756e0000000000000000000000000000000000008152506040518060400160405280600981526020017f2450414e44454d4943000000000000000000000000000000000000000000000081525061013961012e61036360201b60201c565b61036a60201b60201c565b816004908161014891906109c9565b50806005908161015891906109c9565b50505061018d33606461ffff16606461ffff166080516101789190610754565b6101829190610ac5565b61042b60201b60201c565b600160065f6101000a81548160ff0219169083151502179055506001600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550738909dc15e40173ff4699343b6eb8132c65e18ec673ffffffffffffffffffffffffffffffffffffffff1663c9c65396307342000000000000000000000000000000000000066040518363ffffffff1660e01b81526004016102d6929190610b34565b6020604051808303815f875af11580156102f2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103169190610b89565b600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c87565b5f6012905090565b5f33905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049090610c0e565b60405180910390fd5b6104aa5f838361058f60201b60201c565b8060035f8282546104bb9190610c2c565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461050e9190610c2c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105729190610c6e565b60405180910390a361058b5f838361059460201b60201c565b5050565b505050565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b600185111561061b578086048111156105f7576105f6610599565b5b60018516156106065780820291505b8081029050610614856105c6565b94506105db565b94509492505050565b5f8261063357600190506106ee565b81610640575f90506106ee565b816001811461065657600281146106605761068f565b60019150506106ee565b60ff84111561067257610671610599565b5b8360020a91508482111561068957610688610599565b5b506106ee565b5060208310610133831016604e8410600b84101617156106c45782820a9050838111156106bf576106be610599565b5b6106ee565b6106d184848460016105d2565b925090508184048111156106e8576106e7610599565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f610714826106f5565b915061071f836106fe565b925061074c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610624565b905092915050565b5f61075e826106f5565b9150610769836106f5565b9250828202610777816106f5565b9150828204841483151761078e5761078d610599565b5b5092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061081057607f821691505b602082108103610823576108226107cc565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026108857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261084a565b61088f868361084a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6108ca6108c56108c0846106f5565b6108a7565b6106f5565b9050919050565b5f819050919050565b6108e3836108b0565b6108f76108ef826108d1565b848454610856565b825550505050565b5f5f905090565b61090e6108ff565b6109198184846108da565b505050565b5b8181101561093c576109315f82610906565b60018101905061091f565b5050565b601f8211156109815761095281610829565b61095b8461083b565b8101602085101561096a578190505b61097e6109768561083b565b83018261091e565b50505b505050565b5f82821c905092915050565b5f6109a15f1984600802610986565b1980831691505092915050565b5f6109b98383610992565b9150826002028217905092915050565b6109d282610795565b67ffffffffffffffff8111156109eb576109ea61079f565b5b6109f582546107f9565b610a00828285610940565b5f60209050601f831160018114610a31575f8415610a1f578287015190505b610a2985826109ae565b865550610a90565b601f198416610a3f86610829565b5f5b82811015610a6657848901518255600182019150602085019450602081019050610a41565b86831015610a835784890151610a7f601f891682610992565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610acf826106f5565b9150610ada836106f5565b925082610aea57610ae9610a98565b5b828204905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610b1e82610af5565b9050919050565b610b2e81610b14565b82525050565b5f604082019050610b475f830185610b25565b610b546020830184610b25565b9392505050565b5f5ffd5b610b6881610b14565b8114610b72575f5ffd5b50565b5f81519050610b8381610b5f565b92915050565b5f60208284031215610b9e57610b9d610b5b565b5b5f610bab84828501610b75565b91505092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610bf8601f83610bb4565b9150610c0382610bc4565b602082019050919050565b5f6020820190508181035f830152610c2581610bec565b9050919050565b5f610c36826106f5565b9150610c41836106f5565b9250828201905080821115610c5957610c58610599565b5b92915050565b610c68816106f5565b82525050565b5f602082019050610c815f830184610c5f565b92915050565b60805160a05160c051613368610cb15f395f6109ad01525f610a8001525f61119701526133685ff3fe608060405234801561000f575f5ffd5b50600436106101d8575f3560e01c806370a0823111610102578063a457c2d7116100a0578063d5abeb011161006f578063d5abeb0114610536578063dd62ed3e14610554578063e724b0c214610584578063f2fde38b146105a0576101d8565b8063a457c2d71461049e578063a9059cbb146104ce578063b715af76146104fe578063bf0058d01461051a576101d8565b80638da5cb5b116100dc5780638da5cb5b146104285780638ee6f96c1461044657806395d89b4114610462578063985bdfd114610480576101d8565b806370a08231146103d2578063715018a6146104025780638187f5161461040c576101d8565b806327c8f8351161017a5780634706240211610149578063470624021461035a57806349bd5a5e146103785780634c255c971461039657806358a1aaae146103b4576101d8565b806327c8f835146102d05780632b14ca56146102ee578063313ce5671461030c578063395093511461032a576101d8565b8063158ef93e116101b6578063158ef93e1461024657806318160ddd1461026457806321326f091461028257806323b872dd146102a0576101d8565b806306fdde03146101dc57806308b3e419146101fa578063095ea7b314610216575b5f5ffd5b6101e46105bc565b6040516101f19190611f3a565b60405180910390f35b610214600480360381019061020f9190612138565b61064c565b005b610230600480360381019061022b9190612192565b610856565b60405161023d91906121ea565b60405180910390f35b61024e610873565b60405161025b91906121ea565b60405180910390f35b61026c610885565b6040516102799190612212565b60405180910390f35b61028a61088e565b6040516102979190612212565b60405180910390f35b6102ba60048036038101906102b5919061222b565b610894565b6040516102c791906121ea565b60405180910390f35b6102d8610986565b6040516102e5919061228a565b60405180910390f35b6102f66109ab565b6040516103039190612212565b60405180910390f35b6103146109cf565b60405161032191906122be565b60405180910390f35b610344600480360381019061033f9190612192565b6109d7565b60405161035191906121ea565b60405180910390f35b610362610a7e565b60405161036f9190612212565b60405180910390f35b610380610aa2565b60405161038d919061228a565b60405180910390f35b61039e610ac8565b6040516103ab91906122f3565b60405180910390f35b6103bc610acd565b6040516103c99190612212565b60405180910390f35b6103ec60048036038101906103e7919061230c565b610ad3565b6040516103f99190612212565b60405180910390f35b61040a610b19565b005b6104266004803603810190610421919061230c565b610bb9565b005b610430610d00565b60405161043d919061228a565b60405180910390f35b610460600480360381019061045b9190612192565b610d27565b005b61046a610e9d565b6040516104779190611f3a565b60405180910390f35b610488610f2d565b60405161049591906122f3565b60405180910390f35b6104b860048036038101906104b39190612192565b610f32565b6040516104c591906121ea565b60405180910390f35b6104e860048036038101906104e39190612192565b611018565b6040516104f591906121ea565b60405180910390f35b61051860048036038101906105139190612337565b611035565b005b610534600480360381019061052f9190612425565b6110dc565b005b61053e611195565b60405161054b9190612212565b60405180910390f35b61056e6004803603810190610569919061249b565b6111b9565b60405161057b9190612212565b60405180910390f35b61059e6004803603810190610599919061255c565b61123b565b005b6105ba60048036038101906105b5919061230c565b61136e565b005b6060600480546105cb906125e6565b80601f01602080910402602001604051908101604052809291908181526020018280546105f7906125e6565b80156106425780601f1061061957610100808354040283529160200191610642565b820191905f5260205f20905b81548152906001019060200180831161062557829003601f168201915b5050505050905090565b61065461147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d890612660565b60405180910390fd5b5f825111610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071b906126c8565b60405180910390fd5b5f8111610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075d90612730565b60405180910390fd5b5f61076f6109cf565b600a61077b91906128aa565b8261078691906128f4565b90505f5f90505b8351811015610850575f73ffffffffffffffffffffffffffffffffffffffff168482815181106107c0576107bf612935565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361081e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610815906129ac565b60405180910390fd5b6108433385838151811061083557610834612935565b5b602002602001015184611484565b808060010191505061078d565b50505050565b5f61086961086261147d565b848461186c565b6001905092915050565b60065f9054906101000a900460ff1681565b5f600354905090565b60095481565b5f6108a0848484611484565b5f60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6108e761147d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095d90612a3a565b60405180910390fd5b61097a8561097261147d565b85840361186c565b60019150509392505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6012905090565b5f610a746109e361147d565b848460025f6109f061147d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610a6f9190612a58565b61186c565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606481565b60085481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b2161147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba590612660565b60405180910390fd5b610bb75f611a2f565b565b610bc161147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4590612660565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb390612afb565b60405180910390fd5b80600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d2f61147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390612660565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e21906129ac565b60405180910390fd5b5f8111610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390612730565b60405180910390fd5b5f610e756109cf565b600a610e8191906128aa565b82610e8c91906128f4565b9050610e988382611af0565b505050565b606060058054610eac906125e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed8906125e6565b8015610f235780601f10610efa57610100808354040283529160200191610f23565b820191905f5260205f20905b815481529060010190602001808311610f0657829003601f168201915b5050505050905090565b606481565b5f5f60025f610f3f61147d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090612b89565b60405180910390fd5b61100d61100461147d565b8585840361186c565b600191505092915050565b5f61102b61102461147d565b8484611484565b6001905092915050565b61103d61147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c190612660565b60405180910390fd5b81600881905550806009819055505050565b6110e461147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611171576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116890612660565b60405180910390fd5b81600490816111809190612d47565b5080600590816111909190612d47565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61124361147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790612660565b60405180910390fd5b5f5f90505b838390508110156113685781600a5f8686858181106112f7576112f6612935565b5b905060200201602081019061130c919061230c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506112d5565b50505050565b61137661147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa90612660565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890612e86565b60405180910390fd5b61147a81611a2f565b50565b5f33905090565b6001151560065f9054906101000a900460ff161515146114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090612eee565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614801561154857506001151560065f9054906101000a900460ff161515145b1561160057611555610d00565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806115c05750611591610d00565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690612f56565b60405180910390fd5b5b5f8190505f73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156116955750611665610d00565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156116d457506116a4610d00565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561185b575f5f9050600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361173c5760085490506117f6565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117f55760011515600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036117ee575f90506117f4565b60095490505b5b5b5f811115611859575f606461ffff16828561181191906128f4565b61181b9190612fa1565b905080846118299190612fd1565b92506118578660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611c48565b505b505b611866848483611c48565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d190613074565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90613102565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a229190612212565b60405180910390a3505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b559061316a565b60405180910390fd5b611b695f8383611ec0565b8060035f828254611b7a9190612a58565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611bcd9190612a58565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c319190612212565b60405180910390a3611c445f8383611ec5565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad906131f8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b90613286565b60405180910390fd5b611d2f838383611ec0565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90613314565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611e439190612a58565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ea79190612212565b60405180910390a3611eba848484611ec5565b50505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611f0c82611eca565b611f168185611ed4565b9350611f26818560208601611ee4565b611f2f81611ef2565b840191505092915050565b5f6020820190508181035f830152611f528184611f02565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611fa582611ef2565b810181811067ffffffffffffffff82111715611fc457611fc3611f6f565b5b80604052505050565b5f611fd6611f5a565b9050611fe28282611f9c565b919050565b5f67ffffffffffffffff82111561200157612000611f6f565b5b602082029050602081019050919050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61203f82612016565b9050919050565b61204f81612035565b8114612059575f5ffd5b50565b5f8135905061206a81612046565b92915050565b5f61208261207d84611fe7565b611fcd565b905080838252602082019050602084028301858111156120a5576120a4612012565b5b835b818110156120ce57806120ba888261205c565b8452602084019350506020810190506120a7565b5050509392505050565b5f82601f8301126120ec576120eb611f6b565b5b81356120fc848260208601612070565b91505092915050565b5f819050919050565b61211781612105565b8114612121575f5ffd5b50565b5f813590506121328161210e565b92915050565b5f5f6040838503121561214e5761214d611f63565b5b5f83013567ffffffffffffffff81111561216b5761216a611f67565b5b612177858286016120d8565b925050602061218885828601612124565b9150509250929050565b5f5f604083850312156121a8576121a7611f63565b5b5f6121b58582860161205c565b92505060206121c685828601612124565b9150509250929050565b5f8115159050919050565b6121e4816121d0565b82525050565b5f6020820190506121fd5f8301846121db565b92915050565b61220c81612105565b82525050565b5f6020820190506122255f830184612203565b92915050565b5f5f5f6060848603121561224257612241611f63565b5b5f61224f8682870161205c565b93505060206122608682870161205c565b925050604061227186828701612124565b9150509250925092565b61228481612035565b82525050565b5f60208201905061229d5f83018461227b565b92915050565b5f60ff82169050919050565b6122b8816122a3565b82525050565b5f6020820190506122d15f8301846122af565b92915050565b5f61ffff82169050919050565b6122ed816122d7565b82525050565b5f6020820190506123065f8301846122e4565b92915050565b5f6020828403121561232157612320611f63565b5b5f61232e8482850161205c565b91505092915050565b5f5f6040838503121561234d5761234c611f63565b5b5f61235a85828601612124565b925050602061236b85828601612124565b9150509250929050565b5f5ffd5b5f67ffffffffffffffff82111561239357612392611f6f565b5b61239c82611ef2565b9050602081019050919050565b828183375f83830152505050565b5f6123c96123c484612379565b611fcd565b9050828152602081018484840111156123e5576123e4612375565b5b6123f08482856123a9565b509392505050565b5f82601f83011261240c5761240b611f6b565b5b813561241c8482602086016123b7565b91505092915050565b5f5f6040838503121561243b5761243a611f63565b5b5f83013567ffffffffffffffff81111561245857612457611f67565b5b612464858286016123f8565b925050602083013567ffffffffffffffff81111561248557612484611f67565b5b612491858286016123f8565b9150509250929050565b5f5f604083850312156124b1576124b0611f63565b5b5f6124be8582860161205c565b92505060206124cf8582860161205c565b9150509250929050565b5f5ffd5b5f5f83601f8401126124f2576124f1611f6b565b5b8235905067ffffffffffffffff81111561250f5761250e6124d9565b5b60208301915083602082028301111561252b5761252a612012565b5b9250929050565b61253b816121d0565b8114612545575f5ffd5b50565b5f8135905061255681612532565b92915050565b5f5f5f6040848603121561257357612572611f63565b5b5f84013567ffffffffffffffff8111156125905761258f611f67565b5b61259c868287016124dd565b935093505060206125af86828701612548565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806125fd57607f821691505b6020821081036126105761260f6125b9565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61264a602083611ed4565b915061265582612616565b602082019050919050565b5f6020820190508181035f8301526126778161263e565b9050919050565b7f526563697069656e7473206c6973742063616e6e6f7420626520656d707479005f82015250565b5f6126b2601f83611ed4565b91506126bd8261267e565b602082019050919050565b5f6020820190508181035f8301526126df816126a6565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f61271a602083611ed4565b9150612725826126e6565b602082019050919050565b5f6020820190508181035f8301526127478161270e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b60018511156127d0578086048111156127ac576127ab61274e565b5b60018516156127bb5780820291505b80810290506127c98561277b565b9450612790565b94509492505050565b5f826127e857600190506128a3565b816127f5575f90506128a3565b816001811461280b576002811461281557612844565b60019150506128a3565b60ff8411156128275761282661274e565b5b8360020a91508482111561283e5761283d61274e565b5b506128a3565b5060208310610133831016604e8410600b84101617156128795782820a9050838111156128745761287361274e565b5b6128a3565b6128868484846001612787565b9250905081840481111561289d5761289c61274e565b5b81810290505b9392505050565b5f6128b482612105565b91506128bf836122a3565b92506128ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846127d9565b905092915050565b5f6128fe82612105565b915061290983612105565b925082820261291781612105565b9150828204841483151761292e5761292d61274e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f612996601983611ed4565b91506129a182612962565b602082019050919050565b5f6020820190508181035f8301526129c38161298a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612a24602883611ed4565b9150612a2f826129ca565b604082019050919050565b5f6020820190508181035f830152612a5181612a18565b9050919050565b5f612a6282612105565b9150612a6d83612105565b9250828201905080821115612a8557612a8461274e565b5b92915050565b7f544553543a2054686520556e69737761702056322070616972206164647265735f8201527f732063616e6e6f7420626520746865207a65726f20616464726573732e000000602082015250565b5f612ae5603d83611ed4565b9150612af082612a8b565b604082019050919050565b5f6020820190508181035f830152612b1281612ad9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612b73602583611ed4565b9150612b7e82612b19565b604082019050919050565b5f6020820190508181035f830152612ba081612b67565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612bc8565b612c0d8683612bc8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612c48612c43612c3e84612105565b612c25565b612105565b9050919050565b5f819050919050565b612c6183612c2e565b612c75612c6d82612c4f565b848454612bd4565b825550505050565b5f5f905090565b612c8c612c7d565b612c97818484612c58565b505050565b5b81811015612cba57612caf5f82612c84565b600181019050612c9d565b5050565b601f821115612cff57612cd081612ba7565b612cd984612bb9565b81016020851015612ce8578190505b612cfc612cf485612bb9565b830182612c9c565b50505b505050565b5f82821c905092915050565b5f612d1f5f1984600802612d04565b1980831691505092915050565b5f612d378383612d10565b9150826002028217905092915050565b612d5082611eca565b67ffffffffffffffff811115612d6957612d68611f6f565b5b612d7382546125e6565b612d7e828285612cbe565b5f60209050601f831160018114612daf575f8415612d9d578287015190505b612da78582612d2c565b865550612e0e565b601f198416612dbd86612ba7565b5f5b82811015612de457848901518255600182019150602085019450602081019050612dbf565b86831015612e015784890151612dfd601f891682612d10565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612e70602683611ed4565b9150612e7b82612e16565b604082019050919050565b5f6020820190508181035f830152612e9d81612e64565b9050919050565b7f436f6e74726163743a207472616465206973206e6f74206f70656e21000000005f82015250565b5f612ed8601c83611ed4565b9150612ee382612ea4565b602082019050919050565b5f6020820190508181035f830152612f0581612ecc565b9050919050565b7f436f6e74726163743a2074726164696e67206973206e6f7420737461727465645f82015250565b5f612f40602083611ed4565b9150612f4b82612f0c565b602082019050919050565b5f6020820190508181035f830152612f6d81612f34565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612fab82612105565b9150612fb683612105565b925082612fc657612fc5612f74565b5b828204905092915050565b5f612fdb82612105565b9150612fe683612105565b9250828203905081811115612ffe57612ffd61274e565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61305e602483611ed4565b915061306982613004565b604082019050919050565b5f6020820190508181035f83015261308b81613052565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130ec602283611ed4565b91506130f782613092565b604082019050919050565b5f6020820190508181035f830152613119816130e0565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f613154601f83611ed4565b915061315f82613120565b602082019050919050565b5f6020820190508181035f83015261318181613148565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6131e2602583611ed4565b91506131ed82613188565b604082019050919050565b5f6020820190508181035f83015261320f816131d6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613270602383611ed4565b915061327b82613216565b604082019050919050565b5f6020820190508181035f83015261329d81613264565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6132fe602683611ed4565b9150613309826132a4565b604082019050919050565b5f6020820190508181035f83015261332b816132f2565b905091905056fea26469706673582212201ace271d658ff43bef7ee068a03fd534b29b18a910d5a03cbdeb882dbc878ada64736f6c634300081c0033

Deployed Bytecode

0x608060405234801561000f575f5ffd5b50600436106101d8575f3560e01c806370a0823111610102578063a457c2d7116100a0578063d5abeb011161006f578063d5abeb0114610536578063dd62ed3e14610554578063e724b0c214610584578063f2fde38b146105a0576101d8565b8063a457c2d71461049e578063a9059cbb146104ce578063b715af76146104fe578063bf0058d01461051a576101d8565b80638da5cb5b116100dc5780638da5cb5b146104285780638ee6f96c1461044657806395d89b4114610462578063985bdfd114610480576101d8565b806370a08231146103d2578063715018a6146104025780638187f5161461040c576101d8565b806327c8f8351161017a5780634706240211610149578063470624021461035a57806349bd5a5e146103785780634c255c971461039657806358a1aaae146103b4576101d8565b806327c8f835146102d05780632b14ca56146102ee578063313ce5671461030c578063395093511461032a576101d8565b8063158ef93e116101b6578063158ef93e1461024657806318160ddd1461026457806321326f091461028257806323b872dd146102a0576101d8565b806306fdde03146101dc57806308b3e419146101fa578063095ea7b314610216575b5f5ffd5b6101e46105bc565b6040516101f19190611f3a565b60405180910390f35b610214600480360381019061020f9190612138565b61064c565b005b610230600480360381019061022b9190612192565b610856565b60405161023d91906121ea565b60405180910390f35b61024e610873565b60405161025b91906121ea565b60405180910390f35b61026c610885565b6040516102799190612212565b60405180910390f35b61028a61088e565b6040516102979190612212565b60405180910390f35b6102ba60048036038101906102b5919061222b565b610894565b6040516102c791906121ea565b60405180910390f35b6102d8610986565b6040516102e5919061228a565b60405180910390f35b6102f66109ab565b6040516103039190612212565b60405180910390f35b6103146109cf565b60405161032191906122be565b60405180910390f35b610344600480360381019061033f9190612192565b6109d7565b60405161035191906121ea565b60405180910390f35b610362610a7e565b60405161036f9190612212565b60405180910390f35b610380610aa2565b60405161038d919061228a565b60405180910390f35b61039e610ac8565b6040516103ab91906122f3565b60405180910390f35b6103bc610acd565b6040516103c99190612212565b60405180910390f35b6103ec60048036038101906103e7919061230c565b610ad3565b6040516103f99190612212565b60405180910390f35b61040a610b19565b005b6104266004803603810190610421919061230c565b610bb9565b005b610430610d00565b60405161043d919061228a565b60405180910390f35b610460600480360381019061045b9190612192565b610d27565b005b61046a610e9d565b6040516104779190611f3a565b60405180910390f35b610488610f2d565b60405161049591906122f3565b60405180910390f35b6104b860048036038101906104b39190612192565b610f32565b6040516104c591906121ea565b60405180910390f35b6104e860048036038101906104e39190612192565b611018565b6040516104f591906121ea565b60405180910390f35b61051860048036038101906105139190612337565b611035565b005b610534600480360381019061052f9190612425565b6110dc565b005b61053e611195565b60405161054b9190612212565b60405180910390f35b61056e6004803603810190610569919061249b565b6111b9565b60405161057b9190612212565b60405180910390f35b61059e6004803603810190610599919061255c565b61123b565b005b6105ba60048036038101906105b5919061230c565b61136e565b005b6060600480546105cb906125e6565b80601f01602080910402602001604051908101604052809291908181526020018280546105f7906125e6565b80156106425780601f1061061957610100808354040283529160200191610642565b820191905f5260205f20905b81548152906001019060200180831161062557829003601f168201915b5050505050905090565b61065461147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d890612660565b60405180910390fd5b5f825111610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071b906126c8565b60405180910390fd5b5f8111610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075d90612730565b60405180910390fd5b5f61076f6109cf565b600a61077b91906128aa565b8261078691906128f4565b90505f5f90505b8351811015610850575f73ffffffffffffffffffffffffffffffffffffffff168482815181106107c0576107bf612935565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361081e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610815906129ac565b60405180910390fd5b6108433385838151811061083557610834612935565b5b602002602001015184611484565b808060010191505061078d565b50505050565b5f61086961086261147d565b848461186c565b6001905092915050565b60065f9054906101000a900460ff1681565b5f600354905090565b60095481565b5f6108a0848484611484565b5f60025f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6108e761147d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095d90612a3a565b60405180910390fd5b61097a8561097261147d565b85840361186c565b60019150509392505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6012905090565b5f610a746109e361147d565b848460025f6109f061147d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610a6f9190612a58565b61186c565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606481565b60085481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b2161147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba590612660565b60405180910390fd5b610bb75f611a2f565b565b610bc161147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4590612660565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb390612afb565b60405180910390fd5b80600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d2f61147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390612660565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e21906129ac565b60405180910390fd5b5f8111610e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6390612730565b60405180910390fd5b5f610e756109cf565b600a610e8191906128aa565b82610e8c91906128f4565b9050610e988382611af0565b505050565b606060058054610eac906125e6565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed8906125e6565b8015610f235780601f10610efa57610100808354040283529160200191610f23565b820191905f5260205f20905b815481529060010190602001808311610f0657829003601f168201915b5050505050905090565b606481565b5f5f60025f610f3f61147d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090612b89565b60405180910390fd5b61100d61100461147d565b8585840361186c565b600191505092915050565b5f61102b61102461147d565b8484611484565b6001905092915050565b61103d61147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c190612660565b60405180910390fd5b81600881905550806009819055505050565b6110e461147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611171576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116890612660565b60405180910390fd5b81600490816111809190612d47565b5080600590816111909190612d47565b505050565b7f000000000000000000000000000000000000000c9f2c9cd04674edea4000000081565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61124361147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c790612660565b60405180910390fd5b5f5f90505b838390508110156113685781600a5f8686858181106112f7576112f6612935565b5b905060200201602081019061130c919061230c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506112d5565b50505050565b61137661147d565b73ffffffffffffffffffffffffffffffffffffffff165f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa90612660565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146890612e86565b60405180910390fd5b61147a81611a2f565b50565b5f33905090565b6001151560065f9054906101000a900460ff161515146114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d090612eee565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614801561154857506001151560065f9054906101000a900460ff161515145b1561160057611555610d00565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806115c05750611591610d00565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f690612f56565b60405180910390fd5b5b5f8190505f73ffffffffffffffffffffffffffffffffffffffff16600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156116955750611665610d00565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156116d457506116a4610d00565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561185b575f5f9050600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361173c5760085490506117f6565b600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036117f55760011515600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036117ee575f90506117f4565b60095490505b5b5b5f811115611859575f606461ffff16828561181191906128f4565b61181b9190612fa1565b905080846118299190612fd1565b92506118578660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611c48565b505b505b611866848483611c48565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d190613074565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193f90613102565b60405180910390fd5b8060025f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a229190612212565b60405180910390a3505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b559061316a565b60405180910390fd5b611b695f8383611ec0565b8060035f828254611b7a9190612a58565b925050819055508060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611bcd9190612a58565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c319190612212565b60405180910390a3611c445f8383611ec5565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad906131f8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1b90613286565b60405180910390fd5b611d2f838383611ec0565b5f60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90613314565b60405180910390fd5b81810360015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611e439190612a58565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ea79190612212565b60405180910390a3611eba848484611ec5565b50505050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611f0c82611eca565b611f168185611ed4565b9350611f26818560208601611ee4565b611f2f81611ef2565b840191505092915050565b5f6020820190508181035f830152611f528184611f02565b905092915050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611fa582611ef2565b810181811067ffffffffffffffff82111715611fc457611fc3611f6f565b5b80604052505050565b5f611fd6611f5a565b9050611fe28282611f9c565b919050565b5f67ffffffffffffffff82111561200157612000611f6f565b5b602082029050602081019050919050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61203f82612016565b9050919050565b61204f81612035565b8114612059575f5ffd5b50565b5f8135905061206a81612046565b92915050565b5f61208261207d84611fe7565b611fcd565b905080838252602082019050602084028301858111156120a5576120a4612012565b5b835b818110156120ce57806120ba888261205c565b8452602084019350506020810190506120a7565b5050509392505050565b5f82601f8301126120ec576120eb611f6b565b5b81356120fc848260208601612070565b91505092915050565b5f819050919050565b61211781612105565b8114612121575f5ffd5b50565b5f813590506121328161210e565b92915050565b5f5f6040838503121561214e5761214d611f63565b5b5f83013567ffffffffffffffff81111561216b5761216a611f67565b5b612177858286016120d8565b925050602061218885828601612124565b9150509250929050565b5f5f604083850312156121a8576121a7611f63565b5b5f6121b58582860161205c565b92505060206121c685828601612124565b9150509250929050565b5f8115159050919050565b6121e4816121d0565b82525050565b5f6020820190506121fd5f8301846121db565b92915050565b61220c81612105565b82525050565b5f6020820190506122255f830184612203565b92915050565b5f5f5f6060848603121561224257612241611f63565b5b5f61224f8682870161205c565b93505060206122608682870161205c565b925050604061227186828701612124565b9150509250925092565b61228481612035565b82525050565b5f60208201905061229d5f83018461227b565b92915050565b5f60ff82169050919050565b6122b8816122a3565b82525050565b5f6020820190506122d15f8301846122af565b92915050565b5f61ffff82169050919050565b6122ed816122d7565b82525050565b5f6020820190506123065f8301846122e4565b92915050565b5f6020828403121561232157612320611f63565b5b5f61232e8482850161205c565b91505092915050565b5f5f6040838503121561234d5761234c611f63565b5b5f61235a85828601612124565b925050602061236b85828601612124565b9150509250929050565b5f5ffd5b5f67ffffffffffffffff82111561239357612392611f6f565b5b61239c82611ef2565b9050602081019050919050565b828183375f83830152505050565b5f6123c96123c484612379565b611fcd565b9050828152602081018484840111156123e5576123e4612375565b5b6123f08482856123a9565b509392505050565b5f82601f83011261240c5761240b611f6b565b5b813561241c8482602086016123b7565b91505092915050565b5f5f6040838503121561243b5761243a611f63565b5b5f83013567ffffffffffffffff81111561245857612457611f67565b5b612464858286016123f8565b925050602083013567ffffffffffffffff81111561248557612484611f67565b5b612491858286016123f8565b9150509250929050565b5f5f604083850312156124b1576124b0611f63565b5b5f6124be8582860161205c565b92505060206124cf8582860161205c565b9150509250929050565b5f5ffd5b5f5f83601f8401126124f2576124f1611f6b565b5b8235905067ffffffffffffffff81111561250f5761250e6124d9565b5b60208301915083602082028301111561252b5761252a612012565b5b9250929050565b61253b816121d0565b8114612545575f5ffd5b50565b5f8135905061255681612532565b92915050565b5f5f5f6040848603121561257357612572611f63565b5b5f84013567ffffffffffffffff8111156125905761258f611f67565b5b61259c868287016124dd565b935093505060206125af86828701612548565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806125fd57607f821691505b6020821081036126105761260f6125b9565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61264a602083611ed4565b915061265582612616565b602082019050919050565b5f6020820190508181035f8301526126778161263e565b9050919050565b7f526563697069656e7473206c6973742063616e6e6f7420626520656d707479005f82015250565b5f6126b2601f83611ed4565b91506126bd8261267e565b602082019050919050565b5f6020820190508181035f8301526126df816126a6565b9050919050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f61271a602083611ed4565b9150612725826126e6565b602082019050919050565b5f6020820190508181035f8301526127478161270e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b60018511156127d0578086048111156127ac576127ab61274e565b5b60018516156127bb5780820291505b80810290506127c98561277b565b9450612790565b94509492505050565b5f826127e857600190506128a3565b816127f5575f90506128a3565b816001811461280b576002811461281557612844565b60019150506128a3565b60ff8411156128275761282661274e565b5b8360020a91508482111561283e5761283d61274e565b5b506128a3565b5060208310610133831016604e8410600b84101617156128795782820a9050838111156128745761287361274e565b5b6128a3565b6128868484846001612787565b9250905081840481111561289d5761289c61274e565b5b81810290505b9392505050565b5f6128b482612105565b91506128bf836122a3565b92506128ec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846127d9565b905092915050565b5f6128fe82612105565b915061290983612105565b925082820261291781612105565b9150828204841483151761292e5761292d61274e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f496e76616c696420726563697069656e742061646472657373000000000000005f82015250565b5f612996601983611ed4565b91506129a182612962565b602082019050919050565b5f6020820190508181035f8301526129c38161298a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612a24602883611ed4565b9150612a2f826129ca565b604082019050919050565b5f6020820190508181035f830152612a5181612a18565b9050919050565b5f612a6282612105565b9150612a6d83612105565b9250828201905080821115612a8557612a8461274e565b5b92915050565b7f544553543a2054686520556e69737761702056322070616972206164647265735f8201527f732063616e6e6f7420626520746865207a65726f20616464726573732e000000602082015250565b5f612ae5603d83611ed4565b9150612af082612a8b565b604082019050919050565b5f6020820190508181035f830152612b1281612ad9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612b73602583611ed4565b9150612b7e82612b19565b604082019050919050565b5f6020820190508181035f830152612ba081612b67565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612bc8565b612c0d8683612bc8565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612c48612c43612c3e84612105565b612c25565b612105565b9050919050565b5f819050919050565b612c6183612c2e565b612c75612c6d82612c4f565b848454612bd4565b825550505050565b5f5f905090565b612c8c612c7d565b612c97818484612c58565b505050565b5b81811015612cba57612caf5f82612c84565b600181019050612c9d565b5050565b601f821115612cff57612cd081612ba7565b612cd984612bb9565b81016020851015612ce8578190505b612cfc612cf485612bb9565b830182612c9c565b50505b505050565b5f82821c905092915050565b5f612d1f5f1984600802612d04565b1980831691505092915050565b5f612d378383612d10565b9150826002028217905092915050565b612d5082611eca565b67ffffffffffffffff811115612d6957612d68611f6f565b5b612d7382546125e6565b612d7e828285612cbe565b5f60209050601f831160018114612daf575f8415612d9d578287015190505b612da78582612d2c565b865550612e0e565b601f198416612dbd86612ba7565b5f5b82811015612de457848901518255600182019150602085019450602081019050612dbf565b86831015612e015784890151612dfd601f891682612d10565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612e70602683611ed4565b9150612e7b82612e16565b604082019050919050565b5f6020820190508181035f830152612e9d81612e64565b9050919050565b7f436f6e74726163743a207472616465206973206e6f74206f70656e21000000005f82015250565b5f612ed8601c83611ed4565b9150612ee382612ea4565b602082019050919050565b5f6020820190508181035f830152612f0581612ecc565b9050919050565b7f436f6e74726163743a2074726164696e67206973206e6f7420737461727465645f82015250565b5f612f40602083611ed4565b9150612f4b82612f0c565b602082019050919050565b5f6020820190508181035f830152612f6d81612f34565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612fab82612105565b9150612fb683612105565b925082612fc657612fc5612f74565b5b828204905092915050565b5f612fdb82612105565b9150612fe683612105565b9250828203905081811115612ffe57612ffd61274e565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61305e602483611ed4565b915061306982613004565b604082019050919050565b5f6020820190508181035f83015261308b81613052565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130ec602283611ed4565b91506130f782613092565b604082019050919050565b5f6020820190508181035f830152613119816130e0565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f613154601f83611ed4565b915061315f82613120565b602082019050919050565b5f6020820190508181035f83015261318181613148565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6131e2602583611ed4565b91506131ed82613188565b604082019050919050565b5f6020820190508181035f83015261320f816131d6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613270602383611ed4565b915061327b82613216565b604082019050919050565b5f6020820190508181035f83015261329d81613264565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6132fe602683611ed4565b9150613309826132a4565b604082019050919050565b5f6020820190508181035f83015261332b816132f2565b905091905056fea26469706673582212201ace271d658ff43bef7ee068a03fd534b29b18a910d5a03cbdeb882dbc878ada64736f6c634300081c0033

Deployed Bytecode Sourcemap

23128:4357:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12154:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25723:476;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14387:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23355:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13274:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23632:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15063:529;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23429:71;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23551:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13116:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16001:290;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23509:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23393:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23303:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23594:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13445:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5448:103;;;:::i;:::-;;24632:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4761:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25402:311;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12373:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23255:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16794:475;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13801:200;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25015:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24862:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23174:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14064:176;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25189:203;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5706:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12154:100;12208:13;12241:5;12234:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12154:100;:::o;25723:476::-;5005:12;:10;:12::i;:::-;4995:22;;:6;;;;;;;;;;;:22;;;4973:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;25838:1:::1;25818:10;:17;:21;25810:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;25899:1;25890:6;:10;25882:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;25946:20;25985:10;:8;:10::i;:::-;25979:2;:16;;;;:::i;:::-;25969:6;:27;;;;:::i;:::-;25946:50;;26008:9;26020:1;26008:13;;26003:193;26027:10;:17;26023:1;:21;26003:193;;;26095:1;26070:27;;:10;26081:1;26070:13;;;;;;;;:::i;:::-;;;;;;;;:27;;::::0;26062:65:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26138:50;26148:10;26160;26171:1;26160:13;;;;;;;;:::i;:::-;;;;;;;;26175:12;26138:9;:50::i;:::-;26046:3;;;;;;;26003:193;;;;25803:396;25723:476:::0;;:::o;14387:194::-;14495:4;14512:39;14521:12;:10;:12::i;:::-;14535:7;14544:6;14512:8;:39::i;:::-;14569:4;14562:11;;14387:194;;;;:::o;23355:31::-;;;;;;;;;;;;;:::o;13274:108::-;13335:7;13362:12;;13355:19;;13274:108;:::o;23632:31::-;;;;:::o;15063:529::-;15203:4;15220:36;15230:6;15238:9;15249:6;15220:9;:36::i;:::-;15269:24;15296:11;:19;15308:6;15296:19;;;;;;;;;;;;;;;:33;15316:12;:10;:12::i;:::-;15296:33;;;;;;;;;;;;;;;;15269:60;;15382:6;15362:16;:26;;15340:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;15492:57;15501:6;15509:12;:10;:12::i;:::-;15542:6;15523:16;:25;15492:8;:57::i;:::-;15580:4;15573:11;;;15063:529;;;;;:::o;23429:71::-;;;;;;;;;;;;;:::o;23551:36::-;;;:::o;13116:93::-;13174:5;13199:2;13192:9;;13116:93;:::o;16001:290::-;16114:4;16131:130;16154:12;:10;:12::i;:::-;16181:7;16240:10;16203:11;:25;16215:12;:10;:12::i;:::-;16203:25;;;;;;;;;;;;;;;:34;16229:7;16203:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;16131:8;:130::i;:::-;16279:4;16272:11;;16001:290;;;;:::o;23509:35::-;;;:::o;23393:29::-;;;;;;;;;;;;;:::o;23303:43::-;23343:3;23303:43;:::o;23594:31::-;;;;:::o;13445:143::-;13535:7;13562:9;:18;13572:7;13562:18;;;;;;;;;;;;;;;;13555:25;;13445:143;;;:::o;5448:103::-;5005:12;:10;:12::i;:::-;4995:22;;:6;;;;;;;;;;;:22;;;4973:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;5513:30:::1;5540:1;5513:18;:30::i;:::-;5448:103::o:0;24632:222::-;5005:12;:10;:12::i;:::-;4995:22;;:6;;;;;;;;;;;:22;;;4973:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;24737:1:::1;24711:28;;:14;:28;;::::0;24703:102:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24832:14;24816:13;;:30;;;;;;;;;;;;;;;;;;24632:222:::0;:::o;4761:87::-;4807:7;4834:6;;;;;;;;;;;4827:13;;4761:87;:::o;25402:311::-;5005:12;:10;:12::i;:::-;4995:22;;:6;;;;;;;;;;;:22;;;4973:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;25519:1:::1;25498:23;;:9;:23;;::::0;25490:61:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25575:1;25566:6;:10;25558:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;25622:20;25661:10;:8;:10::i;:::-;25655:2;:16;;;;:::i;:::-;25645:6;:27;;;;:::i;:::-;25622:50;;25679:30;25685:9;25696:12;25679:5;:30::i;:::-;25483:230;25402:311:::0;;:::o;12373:104::-;12429:13;12462:7;12455:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12373:104;:::o;23255:40::-;23292:3;23255:40;:::o;16794:475::-;16912:4;16929:24;16956:11;:25;16968:12;:10;:12::i;:::-;16956:25;;;;;;;;;;;;;;;:34;16982:7;16956:34;;;;;;;;;;;;;;;;16929:61;;17043:15;17023:16;:35;;17001:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;17159:67;17168:12;:10;:12::i;:::-;17182:7;17210:15;17191:16;:34;17159:8;:67::i;:::-;17257:4;17250:11;;;16794:475;;;;:::o;13801:200::-;13912:4;13929:42;13939:12;:10;:12::i;:::-;13953:9;13964:6;13929:9;:42::i;:::-;13989:4;13982:11;;13801:200;;;;:::o;25015:167::-;5005:12;:10;:12::i;:::-;4995:22;;:6;;;;;;;;;;;:22;;;4973:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;25122:13:::1;25107:12;:28;;;;25161:13;25146:12;:28;;;;25015:167:::0;;:::o;24862:145::-;5005:12;:10;:12::i;:::-;4995:22;;:6;;;;;;;;;;;:22;;;4973:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;24964:6:::1;24956:5;:14;;;;;;:::i;:::-;;24991:8;24981:7;:18;;;;;;:::i;:::-;;24862:145:::0;;:::o;23174:74::-;;;:::o;14064:176::-;14178:7;14205:11;:18;14217:5;14205:18;;;;;;;;;;;;;;;:27;14224:7;14205:27;;;;;;;;;;;;;;;;14198:34;;14064:176;;;;:::o;25189:203::-;5005:12;:10;:12::i;:::-;4995:22;;:6;;;;;;;;;;;:22;;;4973:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;25287:9:::1;25299:1;25287:13;;25282:107;25306:10;;:17;;25302:1;:21;25282:107;;;25371:10;25341:12;:27;25354:10;;25365:1;25354:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25341:27;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;25325:3;;;;;;;25282:107;;;;25189:203:::0;;;:::o;5706:238::-;5005:12;:10;:12::i;:::-;4995:22;;:6;;;;;;;;;;;:22;;;4973:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;5829:1:::1;5809:22;;:8;:22;;::::0;5787:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5908:28;5927:8;5908:18;:28::i;:::-;5706:238:::0;:::o;3458:98::-;3511:7;3538:10;3531:17;;3458:98;:::o;26215:1267::-;26383:4;26368:19;;:11;;;;;;;;;;;:19;;;26346:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;26485:1;26460:27;;:13;;;;;;;;;;;:27;;;:50;;;;;26506:4;26491:19;;:11;;;;;;;;;;;:19;;;26460:50;26456:209;;;26561:7;:5;:7::i;:::-;26553:15;;:4;:15;;;:32;;;;26578:7;:5;:7::i;:::-;26572:13;;:2;:13;;;26553:32;26527:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;26456:209;26677:23;26703:6;26677:32;;26749:1;26724:27;;:13;;;;;;;;;;;:27;;;;:46;;;;;26763:7;:5;:7::i;:::-;26755:15;;:4;:15;;;;26724:46;:63;;;;;26780:7;:5;:7::i;:::-;26774:13;;:2;:13;;;;26724:63;26720:700;;;26804:12;26819:1;26804:16;;26847:13;;;;;;;;;;;26839:21;;:4;:21;;;26835:327;;26888:12;;26881:19;;26835:327;;;26945:13;;;;;;;;;;;26939:19;;:2;:19;;;26935:227;;27005:4;26983:26;;:12;:18;26996:4;26983:18;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;26979:168;;27041:1;27034:8;;26979:168;;;27115:12;;27108:19;;26979:168;26935:227;26835:327;27187:1;27180:4;:8;27176:233;;;27209:22;23343:3;27234:30;;27243:4;27234:6;:13;;;;:::i;:::-;:30;;;;:::i;:::-;27209:55;;27310:14;27301:6;:23;;;;:::i;:::-;27283:41;;27343:50;27359:4;27365:11;;;;;;;;;;;27378:14;27343:15;:50::i;:::-;27190:219;27176:233;26789:631;26720:700;27432:42;27448:4;27454:2;27458:15;27432;:42::i;:::-;26335:1147;26215:1267;;;:::o;20577:380::-;20730:1;20713:19;;:5;:19;;;20705:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20811:1;20792:21;;:7;:21;;;20784:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20895:6;20865:11;:18;20877:5;20865:18;;;;;;;;;;;;;;;:27;20884:7;20865:27;;;;;;;;;;;;;;;:36;;;;20933:7;20917:32;;20926:5;20917:32;;;20942:6;20917:32;;;;;;:::i;:::-;;;;;;;;20577:380;;;:::o;6104:191::-;6178:16;6197:6;;;;;;;;;;;6178:25;;6223:8;6214:6;;:17;;;;;;;;;;;;;;;;;;6278:8;6247:40;;6268:8;6247:40;;;;;;;;;;;;6167:128;6104:191;:::o;18816:399::-;18919:1;18900:21;;:7;:21;;;18892:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;18970:49;18999:1;19003:7;19012:6;18970:20;:49::i;:::-;19048:6;19032:12;;:22;;;;;;;:::i;:::-;;;;;;;;19087:6;19065:9;:18;19075:7;19065:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;19130:7;19109:37;;19126:1;19109:37;;;19139:6;19109:37;;;;;;:::i;:::-;;;;;;;;19159:48;19187:1;19191:7;19200:6;19159:19;:48::i;:::-;18816:399;;:::o;17759:770::-;17917:1;17899:20;;:6;:20;;;17891:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;18001:1;17980:23;;:9;:23;;;17972:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18056:47;18077:6;18085:9;18096:6;18056:20;:47::i;:::-;18116:21;18140:9;:17;18150:6;18140:17;;;;;;;;;;;;;;;;18116:41;;18207:6;18190:13;:23;;18168:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;18351:6;18335:13;:22;18315:9;:17;18325:6;18315:17;;;;;;;;;;;;;;;:42;;;;18403:6;18379:9;:20;18389:9;18379:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;18444:9;18427:35;;18436:6;18427:35;;;18455:6;18427:35;;;;;;:::i;:::-;;;;;;;;18475:46;18495:6;18503:9;18514:6;18475:19;:46::i;:::-;17880:649;17759:770;;;:::o;21557:125::-;;;;:::o;22286:124::-;;;;:::o;7:99:6:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:75::-;1275:6;1308:2;1302:9;1292:19;;1242:75;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:117;1678:1;1675;1668:12;1692:180;1740:77;1737:1;1730:88;1837:4;1834:1;1827:15;1861:4;1858:1;1851:15;1878:281;1961:27;1983:4;1961:27;:::i;:::-;1953:6;1949:40;2091:6;2079:10;2076:22;2055:18;2043:10;2040:34;2037:62;2034:88;;;2102:18;;:::i;:::-;2034:88;2142:10;2138:2;2131:22;1921:238;1878:281;;:::o;2165:129::-;2199:6;2226:20;;:::i;:::-;2216:30;;2255:33;2283:4;2275:6;2255:33;:::i;:::-;2165:129;;;:::o;2300:311::-;2377:4;2467:18;2459:6;2456:30;2453:56;;;2489:18;;:::i;:::-;2453:56;2539:4;2531:6;2527:17;2519:25;;2599:4;2593;2589:15;2581:23;;2300:311;;;:::o;2617:117::-;2726:1;2723;2716:12;2740:126;2777:7;2817:42;2810:5;2806:54;2795:65;;2740:126;;;:::o;2872:96::-;2909:7;2938:24;2956:5;2938:24;:::i;:::-;2927:35;;2872:96;;;:::o;2974:122::-;3047:24;3065:5;3047:24;:::i;:::-;3040:5;3037:35;3027:63;;3086:1;3083;3076:12;3027:63;2974:122;:::o;3102:139::-;3148:5;3186:6;3173:20;3164:29;;3202:33;3229:5;3202:33;:::i;:::-;3102:139;;;;:::o;3264:710::-;3360:5;3385:81;3401:64;3458:6;3401:64;:::i;:::-;3385:81;:::i;:::-;3376:90;;3486:5;3515:6;3508:5;3501:21;3549:4;3542:5;3538:16;3531:23;;3602:4;3594:6;3590:17;3582:6;3578:30;3631:3;3623:6;3620:15;3617:122;;;3650:79;;:::i;:::-;3617:122;3765:6;3748:220;3782:6;3777:3;3774:15;3748:220;;;3857:3;3886:37;3919:3;3907:10;3886:37;:::i;:::-;3881:3;3874:50;3953:4;3948:3;3944:14;3937:21;;3824:144;3808:4;3803:3;3799:14;3792:21;;3748:220;;;3752:21;3366:608;;3264:710;;;;;:::o;3997:370::-;4068:5;4117:3;4110:4;4102:6;4098:17;4094:27;4084:122;;4125:79;;:::i;:::-;4084:122;4242:6;4229:20;4267:94;4357:3;4349:6;4342:4;4334:6;4330:17;4267:94;:::i;:::-;4258:103;;4074:293;3997:370;;;;:::o;4373:77::-;4410:7;4439:5;4428:16;;4373:77;;;:::o;4456:122::-;4529:24;4547:5;4529:24;:::i;:::-;4522:5;4519:35;4509:63;;4568:1;4565;4558:12;4509:63;4456:122;:::o;4584:139::-;4630:5;4668:6;4655:20;4646:29;;4684:33;4711:5;4684:33;:::i;:::-;4584:139;;;;:::o;4729:684::-;4822:6;4830;4879:2;4867:9;4858:7;4854:23;4850:32;4847:119;;;4885:79;;:::i;:::-;4847:119;5033:1;5022:9;5018:17;5005:31;5063:18;5055:6;5052:30;5049:117;;;5085:79;;:::i;:::-;5049:117;5190:78;5260:7;5251:6;5240:9;5236:22;5190:78;:::i;:::-;5180:88;;4976:302;5317:2;5343:53;5388:7;5379:6;5368:9;5364:22;5343:53;:::i;:::-;5333:63;;5288:118;4729:684;;;;;:::o;5419:474::-;5487:6;5495;5544:2;5532:9;5523:7;5519:23;5515:32;5512:119;;;5550:79;;:::i;:::-;5512:119;5670:1;5695:53;5740:7;5731:6;5720:9;5716:22;5695:53;:::i;:::-;5685:63;;5641:117;5797:2;5823:53;5868:7;5859:6;5848:9;5844:22;5823:53;:::i;:::-;5813:63;;5768:118;5419:474;;;;;:::o;5899:90::-;5933:7;5976:5;5969:13;5962:21;5951:32;;5899:90;;;:::o;5995:109::-;6076:21;6091:5;6076:21;:::i;:::-;6071:3;6064:34;5995:109;;:::o;6110:210::-;6197:4;6235:2;6224:9;6220:18;6212:26;;6248:65;6310:1;6299:9;6295:17;6286:6;6248:65;:::i;:::-;6110:210;;;;:::o;6326:118::-;6413:24;6431:5;6413:24;:::i;:::-;6408:3;6401:37;6326:118;;:::o;6450:222::-;6543:4;6581:2;6570:9;6566:18;6558:26;;6594:71;6662:1;6651:9;6647:17;6638:6;6594:71;:::i;:::-;6450:222;;;;:::o;6678:619::-;6755:6;6763;6771;6820:2;6808:9;6799:7;6795:23;6791:32;6788:119;;;6826:79;;:::i;:::-;6788:119;6946:1;6971:53;7016:7;7007:6;6996:9;6992:22;6971:53;:::i;:::-;6961:63;;6917:117;7073:2;7099:53;7144:7;7135:6;7124:9;7120:22;7099:53;:::i;:::-;7089:63;;7044:118;7201:2;7227:53;7272:7;7263:6;7252:9;7248:22;7227:53;:::i;:::-;7217:63;;7172:118;6678:619;;;;;:::o;7303:118::-;7390:24;7408:5;7390:24;:::i;:::-;7385:3;7378:37;7303:118;;:::o;7427:222::-;7520:4;7558:2;7547:9;7543:18;7535:26;;7571:71;7639:1;7628:9;7624:17;7615:6;7571:71;:::i;:::-;7427:222;;;;:::o;7655:86::-;7690:7;7730:4;7723:5;7719:16;7708:27;;7655:86;;;:::o;7747:112::-;7830:22;7846:5;7830:22;:::i;:::-;7825:3;7818:35;7747:112;;:::o;7865:214::-;7954:4;7992:2;7981:9;7977:18;7969:26;;8005:67;8069:1;8058:9;8054:17;8045:6;8005:67;:::i;:::-;7865:214;;;;:::o;8085:89::-;8121:7;8161:6;8154:5;8150:18;8139:29;;8085:89;;;:::o;8180:115::-;8265:23;8282:5;8265:23;:::i;:::-;8260:3;8253:36;8180:115;;:::o;8301:218::-;8392:4;8430:2;8419:9;8415:18;8407:26;;8443:69;8509:1;8498:9;8494:17;8485:6;8443:69;:::i;:::-;8301:218;;;;:::o;8525:329::-;8584:6;8633:2;8621:9;8612:7;8608:23;8604:32;8601:119;;;8639:79;;:::i;:::-;8601:119;8759:1;8784:53;8829:7;8820:6;8809:9;8805:22;8784:53;:::i;:::-;8774:63;;8730:117;8525:329;;;;:::o;8860:474::-;8928:6;8936;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:53;9181:7;9172:6;9161:9;9157:22;9136:53;:::i;:::-;9126:63;;9082:117;9238:2;9264:53;9309:7;9300:6;9289:9;9285:22;9264:53;:::i;:::-;9254:63;;9209:118;8860:474;;;;;:::o;9340:117::-;9449:1;9446;9439:12;9463:308;9525:4;9615:18;9607:6;9604:30;9601:56;;;9637:18;;:::i;:::-;9601:56;9675:29;9697:6;9675:29;:::i;:::-;9667:37;;9759:4;9753;9749:15;9741:23;;9463:308;;;:::o;9777:148::-;9875:6;9870:3;9865;9852:30;9916:1;9907:6;9902:3;9898:16;9891:27;9777:148;;;:::o;9931:425::-;10009:5;10034:66;10050:49;10092:6;10050:49;:::i;:::-;10034:66;:::i;:::-;10025:75;;10123:6;10116:5;10109:21;10161:4;10154:5;10150:16;10199:3;10190:6;10185:3;10181:16;10178:25;10175:112;;;10206:79;;:::i;:::-;10175:112;10296:54;10343:6;10338:3;10333;10296:54;:::i;:::-;10015:341;9931:425;;;;;:::o;10376:340::-;10432:5;10481:3;10474:4;10466:6;10462:17;10458:27;10448:122;;10489:79;;:::i;:::-;10448:122;10606:6;10593:20;10631:79;10706:3;10698:6;10691:4;10683:6;10679:17;10631:79;:::i;:::-;10622:88;;10438:278;10376:340;;;;:::o;10722:834::-;10810:6;10818;10867:2;10855:9;10846:7;10842:23;10838:32;10835:119;;;10873:79;;:::i;:::-;10835:119;11021:1;11010:9;11006:17;10993:31;11051:18;11043:6;11040:30;11037:117;;;11073:79;;:::i;:::-;11037:117;11178:63;11233:7;11224:6;11213:9;11209:22;11178:63;:::i;:::-;11168:73;;10964:287;11318:2;11307:9;11303:18;11290:32;11349:18;11341:6;11338:30;11335:117;;;11371:79;;:::i;:::-;11335:117;11476:63;11531:7;11522:6;11511:9;11507:22;11476:63;:::i;:::-;11466:73;;11261:288;10722:834;;;;;:::o;11562:474::-;11630:6;11638;11687:2;11675:9;11666:7;11662:23;11658:32;11655:119;;;11693:79;;:::i;:::-;11655:119;11813:1;11838:53;11883:7;11874:6;11863:9;11859:22;11838:53;:::i;:::-;11828:63;;11784:117;11940:2;11966:53;12011:7;12002:6;11991:9;11987:22;11966:53;:::i;:::-;11956:63;;11911:118;11562:474;;;;;:::o;12042:117::-;12151:1;12148;12141:12;12182:568;12255:8;12265:6;12315:3;12308:4;12300:6;12296:17;12292:27;12282:122;;12323:79;;:::i;:::-;12282:122;12436:6;12423:20;12413:30;;12466:18;12458:6;12455:30;12452:117;;;12488:79;;:::i;:::-;12452:117;12602:4;12594:6;12590:17;12578:29;;12656:3;12648:4;12640:6;12636:17;12626:8;12622:32;12619:41;12616:128;;;12663:79;;:::i;:::-;12616:128;12182:568;;;;;:::o;12756:116::-;12826:21;12841:5;12826:21;:::i;:::-;12819:5;12816:32;12806:60;;12862:1;12859;12852:12;12806:60;12756:116;:::o;12878:133::-;12921:5;12959:6;12946:20;12937:29;;12975:30;12999:5;12975:30;:::i;:::-;12878:133;;;;:::o;13017:698::-;13109:6;13117;13125;13174:2;13162:9;13153:7;13149:23;13145:32;13142:119;;;13180:79;;:::i;:::-;13142:119;13328:1;13317:9;13313:17;13300:31;13358:18;13350:6;13347:30;13344:117;;;13380:79;;:::i;:::-;13344:117;13493:80;13565:7;13556:6;13545:9;13541:22;13493:80;:::i;:::-;13475:98;;;;13271:312;13622:2;13648:50;13690:7;13681:6;13670:9;13666:22;13648:50;:::i;:::-;13638:60;;13593:115;13017:698;;;;;:::o;13721:180::-;13769:77;13766:1;13759:88;13866:4;13863:1;13856:15;13890:4;13887:1;13880:15;13907:320;13951:6;13988:1;13982:4;13978:12;13968:22;;14035:1;14029:4;14025:12;14056:18;14046:81;;14112:4;14104:6;14100:17;14090:27;;14046:81;14174:2;14166:6;14163:14;14143:18;14140:38;14137:84;;14193:18;;:::i;:::-;14137:84;13958:269;13907:320;;;:::o;14233:182::-;14373:34;14369:1;14361:6;14357:14;14350:58;14233:182;:::o;14421:366::-;14563:3;14584:67;14648:2;14643:3;14584:67;:::i;:::-;14577:74;;14660:93;14749:3;14660:93;:::i;:::-;14778:2;14773:3;14769:12;14762:19;;14421:366;;;:::o;14793:419::-;14959:4;14997:2;14986:9;14982:18;14974:26;;15046:9;15040:4;15036:20;15032:1;15021:9;15017:17;15010:47;15074:131;15200:4;15074:131;:::i;:::-;15066:139;;14793:419;;;:::o;15218:181::-;15358:33;15354:1;15346:6;15342:14;15335:57;15218:181;:::o;15405:366::-;15547:3;15568:67;15632:2;15627:3;15568:67;:::i;:::-;15561:74;;15644:93;15733:3;15644:93;:::i;:::-;15762:2;15757:3;15753:12;15746:19;;15405:366;;;:::o;15777:419::-;15943:4;15981:2;15970:9;15966:18;15958:26;;16030:9;16024:4;16020:20;16016:1;16005:9;16001:17;15994:47;16058:131;16184:4;16058:131;:::i;:::-;16050:139;;15777:419;;;:::o;16202:182::-;16342:34;16338:1;16330:6;16326:14;16319:58;16202:182;:::o;16390:366::-;16532:3;16553:67;16617:2;16612:3;16553:67;:::i;:::-;16546:74;;16629:93;16718:3;16629:93;:::i;:::-;16747:2;16742:3;16738:12;16731:19;;16390:366;;;:::o;16762:419::-;16928:4;16966:2;16955:9;16951:18;16943:26;;17015:9;17009:4;17005:20;17001:1;16990:9;16986:17;16979:47;17043:131;17169:4;17043:131;:::i;:::-;17035:139;;16762:419;;;:::o;17187:180::-;17235:77;17232:1;17225:88;17332:4;17329:1;17322:15;17356:4;17353:1;17346:15;17373:102;17415:8;17462:5;17459:1;17455:13;17434:34;;17373:102;;;:::o;17481:848::-;17542:5;17549:4;17573:6;17564:15;;17597:5;17588:14;;17611:712;17632:1;17622:8;17619:15;17611:712;;;17727:4;17722:3;17718:14;17712:4;17709:24;17706:50;;;17736:18;;:::i;:::-;17706:50;17786:1;17776:8;17772:16;17769:451;;;18201:4;18194:5;18190:16;18181:25;;17769:451;18251:4;18245;18241:15;18233:23;;18281:32;18304:8;18281:32;:::i;:::-;18269:44;;17611:712;;;17481:848;;;;;;;:::o;18335:1073::-;18389:5;18580:8;18570:40;;18601:1;18592:10;;18603:5;;18570:40;18629:4;18619:36;;18646:1;18637:10;;18648:5;;18619:36;18715:4;18763:1;18758:27;;;;18799:1;18794:191;;;;18708:277;;18758:27;18776:1;18767:10;;18778:5;;;18794:191;18839:3;18829:8;18826:17;18823:43;;;18846:18;;:::i;:::-;18823:43;18895:8;18892:1;18888:16;18879:25;;18930:3;18923:5;18920:14;18917:40;;;18937:18;;:::i;:::-;18917:40;18970:5;;;18708:277;;19094:2;19084:8;19081:16;19075:3;19069:4;19066:13;19062:36;19044:2;19034:8;19031:16;19026:2;19020:4;19017:12;19013:35;18997:111;18994:246;;;19150:8;19144:4;19140:19;19131:28;;19185:3;19178:5;19175:14;19172:40;;;19192:18;;:::i;:::-;19172:40;19225:5;;18994:246;19265:42;19303:3;19293:8;19287:4;19284:1;19265:42;:::i;:::-;19250:57;;;;19339:4;19334:3;19330:14;19323:5;19320:25;19317:51;;;19348:18;;:::i;:::-;19317:51;19397:4;19390:5;19386:16;19377:25;;18335:1073;;;;;;:::o;19414:281::-;19472:5;19496:23;19514:4;19496:23;:::i;:::-;19488:31;;19540:25;19556:8;19540:25;:::i;:::-;19528:37;;19584:104;19621:66;19611:8;19605:4;19584:104;:::i;:::-;19575:113;;19414:281;;;;:::o;19701:410::-;19741:7;19764:20;19782:1;19764:20;:::i;:::-;19759:25;;19798:20;19816:1;19798:20;:::i;:::-;19793:25;;19853:1;19850;19846:9;19875:30;19893:11;19875:30;:::i;:::-;19864:41;;20054:1;20045:7;20041:15;20038:1;20035:22;20015:1;20008:9;19988:83;19965:139;;20084:18;;:::i;:::-;19965:139;19749:362;19701:410;;;;:::o;20117:180::-;20165:77;20162:1;20155:88;20262:4;20259:1;20252:15;20286:4;20283:1;20276:15;20303:175;20443:27;20439:1;20431:6;20427:14;20420:51;20303:175;:::o;20484:366::-;20626:3;20647:67;20711:2;20706:3;20647:67;:::i;:::-;20640:74;;20723:93;20812:3;20723:93;:::i;:::-;20841:2;20836:3;20832:12;20825:19;;20484:366;;;:::o;20856:419::-;21022:4;21060:2;21049:9;21045:18;21037:26;;21109:9;21103:4;21099:20;21095:1;21084:9;21080:17;21073:47;21137:131;21263:4;21137:131;:::i;:::-;21129:139;;20856:419;;;:::o;21281:227::-;21421:34;21417:1;21409:6;21405:14;21398:58;21490:10;21485:2;21477:6;21473:15;21466:35;21281:227;:::o;21514:366::-;21656:3;21677:67;21741:2;21736:3;21677:67;:::i;:::-;21670:74;;21753:93;21842:3;21753:93;:::i;:::-;21871:2;21866:3;21862:12;21855:19;;21514:366;;;:::o;21886:419::-;22052:4;22090:2;22079:9;22075:18;22067:26;;22139:9;22133:4;22129:20;22125:1;22114:9;22110:17;22103:47;22167:131;22293:4;22167:131;:::i;:::-;22159:139;;21886:419;;;:::o;22311:191::-;22351:3;22370:20;22388:1;22370:20;:::i;:::-;22365:25;;22404:20;22422:1;22404:20;:::i;:::-;22399:25;;22447:1;22444;22440:9;22433:16;;22468:3;22465:1;22462:10;22459:36;;;22475:18;;:::i;:::-;22459:36;22311:191;;;;:::o;22508:248::-;22648:34;22644:1;22636:6;22632:14;22625:58;22717:31;22712:2;22704:6;22700:15;22693:56;22508:248;:::o;22762:366::-;22904:3;22925:67;22989:2;22984:3;22925:67;:::i;:::-;22918:74;;23001:93;23090:3;23001:93;:::i;:::-;23119:2;23114:3;23110:12;23103:19;;22762:366;;;:::o;23134:419::-;23300:4;23338:2;23327:9;23323:18;23315:26;;23387:9;23381:4;23377:20;23373:1;23362:9;23358:17;23351:47;23415:131;23541:4;23415:131;:::i;:::-;23407:139;;23134:419;;;:::o;23559:224::-;23699:34;23695:1;23687:6;23683:14;23676:58;23768:7;23763:2;23755:6;23751:15;23744:32;23559:224;:::o;23789:366::-;23931:3;23952:67;24016:2;24011:3;23952:67;:::i;:::-;23945:74;;24028:93;24117:3;24028:93;:::i;:::-;24146:2;24141:3;24137:12;24130:19;;23789:366;;;:::o;24161:419::-;24327:4;24365:2;24354:9;24350:18;24342:26;;24414:9;24408:4;24404:20;24400:1;24389:9;24385:17;24378:47;24442:131;24568:4;24442:131;:::i;:::-;24434:139;;24161:419;;;:::o;24586:141::-;24635:4;24658:3;24650:11;;24681:3;24678:1;24671:14;24715:4;24712:1;24702:18;24694:26;;24586:141;;;:::o;24733:93::-;24770:6;24817:2;24812;24805:5;24801:14;24797:23;24787:33;;24733:93;;;:::o;24832:107::-;24876:8;24926:5;24920:4;24916:16;24895:37;;24832:107;;;;:::o;24945:393::-;25014:6;25064:1;25052:10;25048:18;25087:97;25117:66;25106:9;25087:97;:::i;:::-;25205:39;25235:8;25224:9;25205:39;:::i;:::-;25193:51;;25277:4;25273:9;25266:5;25262:21;25253:30;;25326:4;25316:8;25312:19;25305:5;25302:30;25292:40;;25021:317;;24945:393;;;;;:::o;25344:60::-;25372:3;25393:5;25386:12;;25344:60;;;:::o;25410:142::-;25460:9;25493:53;25511:34;25520:24;25538:5;25520:24;:::i;:::-;25511:34;:::i;:::-;25493:53;:::i;:::-;25480:66;;25410:142;;;:::o;25558:75::-;25601:3;25622:5;25615:12;;25558:75;;;:::o;25639:269::-;25749:39;25780:7;25749:39;:::i;:::-;25810:91;25859:41;25883:16;25859:41;:::i;:::-;25851:6;25844:4;25838:11;25810:91;:::i;:::-;25804:4;25797:105;25715:193;25639:269;;;:::o;25914:73::-;25959:3;25980:1;25973:8;;25914:73;:::o;25993:189::-;26070:32;;:::i;:::-;26111:65;26169:6;26161;26155:4;26111:65;:::i;:::-;26046:136;25993:189;;:::o;26188:186::-;26248:120;26265:3;26258:5;26255:14;26248:120;;;26319:39;26356:1;26349:5;26319:39;:::i;:::-;26292:1;26285:5;26281:13;26272:22;;26248:120;;;26188:186;;:::o;26380:543::-;26481:2;26476:3;26473:11;26470:446;;;26515:38;26547:5;26515:38;:::i;:::-;26599:29;26617:10;26599:29;:::i;:::-;26589:8;26585:44;26782:2;26770:10;26767:18;26764:49;;;26803:8;26788:23;;26764:49;26826:80;26882:22;26900:3;26882:22;:::i;:::-;26872:8;26868:37;26855:11;26826:80;:::i;:::-;26485:431;;26470:446;26380:543;;;:::o;26929:117::-;26983:8;27033:5;27027:4;27023:16;27002:37;;26929:117;;;;:::o;27052:169::-;27096:6;27129:51;27177:1;27173:6;27165:5;27162:1;27158:13;27129:51;:::i;:::-;27125:56;27210:4;27204;27200:15;27190:25;;27103:118;27052:169;;;;:::o;27226:295::-;27302:4;27448:29;27473:3;27467:4;27448:29;:::i;:::-;27440:37;;27510:3;27507:1;27503:11;27497:4;27494:21;27486:29;;27226:295;;;;:::o;27526:1395::-;27643:37;27676:3;27643:37;:::i;:::-;27745:18;27737:6;27734:30;27731:56;;;27767:18;;:::i;:::-;27731:56;27811:38;27843:4;27837:11;27811:38;:::i;:::-;27896:67;27956:6;27948;27942:4;27896:67;:::i;:::-;27990:1;28014:4;28001:17;;28046:2;28038:6;28035:14;28063:1;28058:618;;;;28720:1;28737:6;28734:77;;;28786:9;28781:3;28777:19;28771:26;28762:35;;28734:77;28837:67;28897:6;28890:5;28837:67;:::i;:::-;28831:4;28824:81;28693:222;28028:887;;28058:618;28110:4;28106:9;28098:6;28094:22;28144:37;28176:4;28144:37;:::i;:::-;28203:1;28217:208;28231:7;28228:1;28225:14;28217:208;;;28310:9;28305:3;28301:19;28295:26;28287:6;28280:42;28361:1;28353:6;28349:14;28339:24;;28408:2;28397:9;28393:18;28380:31;;28254:4;28251:1;28247:12;28242:17;;28217:208;;;28453:6;28444:7;28441:19;28438:179;;;28511:9;28506:3;28502:19;28496:26;28554:48;28596:4;28588:6;28584:17;28573:9;28554:48;:::i;:::-;28546:6;28539:64;28461:156;28438:179;28663:1;28659;28651:6;28647:14;28643:22;28637:4;28630:36;28065:611;;;28028:887;;27618:1303;;;27526:1395;;:::o;28927:225::-;29067:34;29063:1;29055:6;29051:14;29044:58;29136:8;29131:2;29123:6;29119:15;29112:33;28927:225;:::o;29158:366::-;29300:3;29321:67;29385:2;29380:3;29321:67;:::i;:::-;29314:74;;29397:93;29486:3;29397:93;:::i;:::-;29515:2;29510:3;29506:12;29499:19;;29158:366;;;:::o;29530:419::-;29696:4;29734:2;29723:9;29719:18;29711:26;;29783:9;29777:4;29773:20;29769:1;29758:9;29754:17;29747:47;29811:131;29937:4;29811:131;:::i;:::-;29803:139;;29530:419;;;:::o;29955:178::-;30095:30;30091:1;30083:6;30079:14;30072:54;29955:178;:::o;30139:366::-;30281:3;30302:67;30366:2;30361:3;30302:67;:::i;:::-;30295:74;;30378:93;30467:3;30378:93;:::i;:::-;30496:2;30491:3;30487:12;30480:19;;30139:366;;;:::o;30511:419::-;30677:4;30715:2;30704:9;30700:18;30692:26;;30764:9;30758:4;30754:20;30750:1;30739:9;30735:17;30728:47;30792:131;30918:4;30792:131;:::i;:::-;30784:139;;30511:419;;;:::o;30936:182::-;31076:34;31072:1;31064:6;31060:14;31053:58;30936:182;:::o;31124:366::-;31266:3;31287:67;31351:2;31346:3;31287:67;:::i;:::-;31280:74;;31363:93;31452:3;31363:93;:::i;:::-;31481:2;31476:3;31472:12;31465:19;;31124:366;;;:::o;31496:419::-;31662:4;31700:2;31689:9;31685:18;31677:26;;31749:9;31743:4;31739:20;31735:1;31724:9;31720:17;31713:47;31777:131;31903:4;31777:131;:::i;:::-;31769:139;;31496:419;;;:::o;31921:180::-;31969:77;31966:1;31959:88;32066:4;32063:1;32056:15;32090:4;32087:1;32080:15;32107:185;32147:1;32164:20;32182:1;32164:20;:::i;:::-;32159:25;;32198:20;32216:1;32198:20;:::i;:::-;32193:25;;32237:1;32227:35;;32242:18;;:::i;:::-;32227:35;32284:1;32281;32277:9;32272:14;;32107:185;;;;:::o;32298:194::-;32338:4;32358:20;32376:1;32358:20;:::i;:::-;32353:25;;32392:20;32410:1;32392:20;:::i;:::-;32387:25;;32436:1;32433;32429:9;32421:17;;32460:1;32454:4;32451:11;32448:37;;;32465:18;;:::i;:::-;32448:37;32298:194;;;;:::o;32498:223::-;32638:34;32634:1;32626:6;32622:14;32615:58;32707:6;32702:2;32694:6;32690:15;32683:31;32498:223;:::o;32727:366::-;32869:3;32890:67;32954:2;32949:3;32890:67;:::i;:::-;32883:74;;32966:93;33055:3;32966:93;:::i;:::-;33084:2;33079:3;33075:12;33068:19;;32727:366;;;:::o;33099:419::-;33265:4;33303:2;33292:9;33288:18;33280:26;;33352:9;33346:4;33342:20;33338:1;33327:9;33323:17;33316:47;33380:131;33506:4;33380:131;:::i;:::-;33372:139;;33099:419;;;:::o;33524:221::-;33664:34;33660:1;33652:6;33648:14;33641:58;33733:4;33728:2;33720:6;33716:15;33709:29;33524:221;:::o;33751:366::-;33893:3;33914:67;33978:2;33973:3;33914:67;:::i;:::-;33907:74;;33990:93;34079:3;33990:93;:::i;:::-;34108:2;34103:3;34099:12;34092:19;;33751:366;;;:::o;34123:419::-;34289:4;34327:2;34316:9;34312:18;34304:26;;34376:9;34370:4;34366:20;34362:1;34351:9;34347:17;34340:47;34404:131;34530:4;34404:131;:::i;:::-;34396:139;;34123:419;;;:::o;34548:181::-;34688:33;34684:1;34676:6;34672:14;34665:57;34548:181;:::o;34735:366::-;34877:3;34898:67;34962:2;34957:3;34898:67;:::i;:::-;34891:74;;34974:93;35063:3;34974:93;:::i;:::-;35092:2;35087:3;35083:12;35076:19;;34735:366;;;:::o;35107:419::-;35273:4;35311:2;35300:9;35296:18;35288:26;;35360:9;35354:4;35350:20;35346:1;35335:9;35331:17;35324:47;35388:131;35514:4;35388:131;:::i;:::-;35380:139;;35107:419;;;:::o;35532:224::-;35672:34;35668:1;35660:6;35656:14;35649:58;35741:7;35736:2;35728:6;35724:15;35717:32;35532:224;:::o;35762:366::-;35904:3;35925:67;35989:2;35984:3;35925:67;:::i;:::-;35918:74;;36001:93;36090:3;36001:93;:::i;:::-;36119:2;36114:3;36110:12;36103:19;;35762:366;;;:::o;36134:419::-;36300:4;36338:2;36327:9;36323:18;36315:26;;36387:9;36381:4;36377:20;36373:1;36362:9;36358:17;36351:47;36415:131;36541:4;36415:131;:::i;:::-;36407:139;;36134:419;;;:::o;36559:222::-;36699:34;36695:1;36687:6;36683:14;36676:58;36768:5;36763:2;36755:6;36751:15;36744:30;36559:222;:::o;36787:366::-;36929:3;36950:67;37014:2;37009:3;36950:67;:::i;:::-;36943:74;;37026:93;37115:3;37026:93;:::i;:::-;37144:2;37139:3;37135:12;37128:19;;36787:366;;;:::o;37159:419::-;37325:4;37363:2;37352:9;37348:18;37340:26;;37412:9;37406:4;37402:20;37398:1;37387:9;37383:17;37376:47;37440:131;37566:4;37440:131;:::i;:::-;37432:139;;37159:419;;;:::o;37584:225::-;37724:34;37720:1;37712:6;37708:14;37701:58;37793:8;37788:2;37780:6;37776:15;37769:33;37584:225;:::o;37815:366::-;37957:3;37978:67;38042:2;38037:3;37978:67;:::i;:::-;37971:74;;38054:93;38143:3;38054:93;:::i;:::-;38172:2;38167:3;38163:12;38156:19;;37815:366;;;:::o;38187:419::-;38353:4;38391:2;38380:9;38376:18;38368:26;;38440:9;38434:4;38430:20;38426:1;38415:9;38411:17;38404:47;38468:131;38594:4;38468:131;:::i;:::-;38460:139;;38187:419;;;:::o

Swarm Source

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