ETH Price: $2,976.19 (-2.46%)
Gas: 4 Gwei

Token

Elon Tweet Coin (ELONTC)
 

Overview

Max Total Supply

199,000,000,000 ELONTC

Holders

149

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,092,428.318434600884159724 ELONTC

Value
$0.00
0x376bA096a27f4F9A06c1a9Ddc9CEEda64F7A57aD
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:
ElonTweetCoin

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-03
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/*
 *
 * ELON TWEET COIN (ELONTC)
 *
 * Website: https://elontc.com
 *
 */ 

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

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

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

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.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() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

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

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

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

/**
 * @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, uint 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, uint value);

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

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

    /**
     * @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, uint 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 (uint);

    /**
     * @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, uint 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,
        uint amount
    ) external returns (bool);
}

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.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);
}

// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.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].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint) private _balances;

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

    uint private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint) {
        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, uint 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 (uint) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint`, 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, uint 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 `uint`.
     *
     * 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,
        uint 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, uint 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, uint subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint 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,
        uint amount
    ) internal virtual {
        uint currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint) external view returns (address pair);

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(address owner, address spender)
        external
        view
        returns (uint);

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to)
        external
        returns (uint amount0, uint amount1);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    )
        external
        returns (
            uint amountA,
            uint amountB,
            uint liquidity
        );

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (
            uint amountToken,
            uint amountETH,
            uint liquidity
        );

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

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

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

interface ISwapManager {
    function swapToUsdc(uint tokenAmount) external;
    function addLiquidity(uint tokenAmount, uint usdcAmount) external;
}

contract ElonTweetCoin is ERC20, Ownable {
    using SafeMath for uint;

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

    bool private swapping;

    address public marketingWallet;
    address public buybackWallet;

    ISwapManager public swapManager;
    uint public maxTransactionAmount;
    uint public swapTokensAtAmount;
    uint public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint public buyTotalFees;
    uint public buyMarketingFee;
    uint public buyLiquidityFee;
    uint public buyBuybackFee;

    uint public sellTotalFees;
    uint public sellMarketingFee;
    uint public sellLiquidityFee;
    uint public sellBuybackFee;

    uint public tokensForMarketing;
    uint public tokensForLiquidity;
    uint public tokensForBuyback;

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapManagerUpdated(
        address indexed newManager,
        address indexed oldManager
    );

    event MarketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event BuybackWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint tokensSwapped,
        uint usdcReceived,
        uint tokensIntoLiquidity
    );

    constructor() ERC20("Elon Tweet Coin", "ELONTC") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        address pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), usdc);
            
        uniswapV2Pair = pair;
        excludeFromMaxTransaction(pair, true);
        _setAutomatedMarketMakerPair(pair, true);

        uint totalSupply = 199_000_000_000 * 1e18;

        maxTransactionAmount = totalSupply * 5 / 1000;
        maxWallet = totalSupply / 100;
        swapTokensAtAmount = totalSupply / 1000;

        buyMarketingFee = 2;
        buyLiquidityFee = 1;
        buyBuybackFee = 5;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBuybackFee;

        sellMarketingFee = 2;
        sellLiquidityFee = 1;
        sellBuybackFee = 5;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBuybackFee;

        marketingWallet = address(0x9E491303188109DFB63f7AF532812211032Adeca);
        buybackWallet = address(0xaba1168b5aC290B94E852A29176Df9073917fe20);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(buybackWallet, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(buybackWallet, true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        require (
            address(swapManager) != address(0), 
            "Need to set swap manager"
        );
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateSwapManager(address newManager) external onlyOwner {
        emit SwapManagerUpdated(newManager, address(swapManager));
        swapManager = ISwapManager(newManager);
        excludeFromFees(newManager, true);
        excludeFromMaxTransaction(newManager, true);
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit MarketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateBuybackWallet(address newBuybackWallet) external onlyOwner {
        emit BuybackWalletUpdated(newBuybackWallet, buybackWallet);
        buybackWallet = newBuybackWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair) &&
                        !_isExcludedFromFees[from]
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForBuyback += (fees * sellBuybackFee) / sellTotalFees;
            }

            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForBuyback += (fees * buyBuybackFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function swapBack() private {
        uint contractBalance = balanceOf(address(this));
        uint totalTokensToSwap = tokensForMarketing +
            tokensForLiquidity +
            tokensForBuyback;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap / 2;
        uint amountToSwapForUsdc = contractBalance.sub(liquidityTokens);

        uint initialUsdcBalance = IERC20(usdc).balanceOf(address(this));

        _approve(address(this), address(swapManager), amountToSwapForUsdc);
        swapManager.swapToUsdc(amountToSwapForUsdc);

        uint usdcBalance = IERC20(usdc).balanceOf(address(this)).sub(initialUsdcBalance);

        uint usdcForMarketing = usdcBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint usdcForBuyback = usdcBalance.mul(tokensForBuyback).div(totalTokensToSwap);
        uint usdcForLiquidity = usdcBalance - usdcForMarketing - usdcForBuyback;

        tokensForMarketing = 0;
        tokensForLiquidity = 0;
        tokensForBuyback = 0;

        IERC20(usdc).transfer(marketingWallet, usdcForMarketing);

        if (liquidityTokens > 0 && usdcForLiquidity > 0) {
            _approve(address(this), address(swapManager), liquidityTokens);
            IERC20(usdc).approve(address(swapManager), usdcForLiquidity);

            swapManager.addLiquidity(liquidityTokens, usdcForLiquidity);

            emit SwapAndLiquify(
                amountToSwapForUsdc,
                usdcForLiquidity,
                tokensForLiquidity
            );
        }

        IERC20(usdc).transfer(buybackWallet, IERC20(usdc).balanceOf(address(this)));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"BuybackWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"usdcReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newManager","type":"address"},{"indexed":true,"internalType":"address","name":"oldManager","type":"address"}],"name":"SwapManagerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBuybackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapManager","outputs":[{"internalType":"contract ISwapManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBuyback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newBuybackWallet","type":"address"}],"name":"updateBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newManager","type":"address"}],"name":"updateSwapManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600f81526020017f456c6f6e20547765657420436f696e00000000000000000000000000000000008152506040518060400160405280600681526020017f454c4f4e544300000000000000000000000000000000000000000000000000008152508160039081620000fb919062000d43565b5080600490816200010d919062000d43565b50505062000130620001246200060260201b60201c565b6200060a60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c816001620006d060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000204919062000e94565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486040518363ffffffff1660e01b81526004016200025492919062000ed7565b6020604051808303816000875af115801562000274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029a919062000e94565b90508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620002e3816001620006d060201b60201c565b620002f68160016200073b60201b60201c565b60006c028300f1203b13af585800000090506103e86005826200031a919062000f33565b62000326919062000fad565b6009819055506064816200033b919062000fad565b600b819055506103e88162000351919062000fad565b600a8190555060026010819055506001601181905550600560128190555060125460115460105462000384919062000fe5565b62000390919062000fe5565b600f81905550600260148190555060016015819055506005601681905550601654601554601454620003c3919062000fe5565b620003cf919062000fe5565b601381905550739e491303188109dfb63f7af532812211032adeca600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073aba1168b5ac290b94e852a29176df9073917fe20600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004a162000493620007dc60201b60201c565b60016200080660201b60201c565b620004b43060016200080660201b60201c565b620004c961dead60016200080660201b60201c565b620004fe600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200080660201b60201c565b62000533600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200080660201b60201c565b6200055562000547620007dc60201b60201c565b6001620006d060201b60201c565b62000568306001620006d060201b60201c565b6200057d61dead6001620006d060201b60201c565b620005b2600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006d060201b60201c565b620005e7600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006d060201b60201c565b620005f93382620008c160201b60201c565b5050506200117d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006e062000a2e60201b60201c565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200081662000a2e60201b60201c565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008b591906200103d565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000933576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092a90620010bb565b60405180910390fd5b620009476000838362000abf60201b60201c565b80600260008282546200095b919062000fe5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a0e9190620010ee565b60405180910390a362000a2a6000838362000ac460201b60201c565b5050565b62000a3e6200060260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a64620007dc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ab4906200115b565b60405180910390fd5b565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b4b57607f821691505b60208210810362000b615762000b6062000b03565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bcb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b8c565b62000bd7868362000b8c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c2462000c1e62000c188462000bef565b62000bf9565b62000bef565b9050919050565b6000819050919050565b62000c408362000c03565b62000c5862000c4f8262000c2b565b84845462000b99565b825550505050565b600090565b62000c6f62000c60565b62000c7c81848462000c35565b505050565b5b8181101562000ca45762000c9860008262000c65565b60018101905062000c82565b5050565b601f82111562000cf35762000cbd8162000b67565b62000cc88462000b7c565b8101602085101562000cd8578190505b62000cf062000ce78562000b7c565b83018262000c81565b50505b505050565b600082821c905092915050565b600062000d186000198460080262000cf8565b1980831691505092915050565b600062000d33838362000d05565b9150826002028217905092915050565b62000d4e8262000ac9565b67ffffffffffffffff81111562000d6a5762000d6962000ad4565b5b62000d76825462000b32565b62000d8382828562000ca8565b600060209050601f83116001811462000dbb576000841562000da6578287015190505b62000db2858262000d25565b86555062000e22565b601f19841662000dcb8662000b67565b60005b8281101562000df55784890151825560018201915060208501945060208101905062000dce565b8683101562000e15578489015162000e11601f89168262000d05565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e5c8262000e2f565b9050919050565b62000e6e8162000e4f565b811462000e7a57600080fd5b50565b60008151905062000e8e8162000e63565b92915050565b60006020828403121562000ead5762000eac62000e2a565b5b600062000ebd8482850162000e7d565b91505092915050565b62000ed18162000e4f565b82525050565b600060408201905062000eee600083018562000ec6565b62000efd602083018462000ec6565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f408262000bef565b915062000f4d8362000bef565b925082820262000f5d8162000bef565b9150828204841483151762000f775762000f7662000f04565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fba8262000bef565b915062000fc78362000bef565b92508262000fda5762000fd962000f7e565b5b828204905092915050565b600062000ff28262000bef565b915062000fff8362000bef565b92508282019050808211156200101a576200101962000f04565b5b92915050565b60008115159050919050565b620010378162001020565b82525050565b60006020820190506200105460008301846200102c565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010a3601f836200105a565b9150620010b0826200106b565b602082019050919050565b60006020820190508181036000830152620010d68162001094565b9050919050565b620010e88162000bef565b82525050565b6000602082019050620011056000830184620010dd565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011436020836200105a565b915062001150826200110b565b602082019050919050565b60006020820190508181036000830152620011768162001134565b9050919050565b60805160a0516144f7620011b860003960008181610d5f015281816111ec0152611e71015260008181610bfd0152611e1901526144f76000f3fe608060405234801561001057600080fd5b506004361061035d5760003560e01c806375f0a874116101d3578063c18bc19511610104578063deab8aea116100a2578063f11a24d31161007c578063f11a24d3146109e8578063f2fde38b14610a06578063f637434214610a22578063f8b45b0514610a405761035d565b8063deab8aea1461098e578063e2f45605146109ac578063e884f260146109ca5761035d565b8063d257b34f116100de578063d257b34f146108f2578063d4090d2a14610922578063d85ba06314610940578063dd62ed3e1461095e5761035d565b8063c18bc1951461089a578063c876d0b9146108b6578063c8c8ebe4146108d45761035d565b80639a7a23d611610171578063aacebbe31161014b578063aacebbe314610814578063b62496f514610830578063bbc0c74214610860578063c02466681461087e5761035d565b80639a7a23d614610798578063a457c2d7146107b4578063a9059cbb146107e45761035d565b80638da5cb5b116101ad5780638da5cb5b146107225780639213691314610740578063924de9b71461075e57806395d89b411461077a5761035d565b806375f0a874146106dc5780637bce5a04146106fa5780638a8c523c146107185761035d565b80633e413bee116102ad5780636ddd17131161024b578063715018a611610225578063715018a61461067a57806371a5152214610684578063751039fc146106a25780637571336a146106c05761035d565b80636ddd17131461060e578063709d039d1461062c57806370a082311461064a5761035d565b80634c36fad7116102875780634c36fad7146105865780634fbee193146105a2578063540ba552146105d25780636a486a8e146105f05761035d565b80633e413bee1461052c57806349bd5a5e1461054a5780634a62bb65146105685761035d565b80631a8145bb1161031a57806323b872dd116102f457806323b872dd1461049057806327c8f835146104c0578063313ce567146104de57806339509351146104fc5761035d565b80631a8145bb146104385780631f3fed8f14610456578063203e727e146104745761035d565b806304dacd501461036257806306fdde031461037e578063095ea7b31461039c57806310d5de53146103cc5780631694505e146103fc57806318160ddd1461041a575b600080fd5b61037c60048036038101906103779190613326565b610a5e565b005b610386610b26565b60405161039391906133e3565b60405180910390f35b6103b660048036038101906103b1919061343b565b610bb8565b6040516103c39190613496565b60405180910390f35b6103e660048036038101906103e19190613326565b610bdb565b6040516103f39190613496565b60405180910390f35b610404610bfb565b6040516104119190613510565b60405180910390f35b610422610c1f565b60405161042f919061353a565b60405180910390f35b610440610c29565b60405161044d919061353a565b60405180910390f35b61045e610c2f565b60405161046b919061353a565b60405180910390f35b61048e60048036038101906104899190613555565b610c35565b005b6104aa60048036038101906104a59190613582565b610cd0565b6040516104b79190613496565b60405180910390f35b6104c8610cff565b6040516104d591906135e4565b60405180910390f35b6104e6610d05565b6040516104f3919061361b565b60405180910390f35b6105166004803603810190610511919061343b565b610d0e565b6040516105239190613496565b60405180910390f35b610534610d45565b60405161054191906135e4565b60405180910390f35b610552610d5d565b60405161055f91906135e4565b60405180910390f35b610570610d81565b60405161057d9190613496565b60405180910390f35b6105a0600480360381019061059b9190613326565b610d94565b005b6105bc60048036038101906105b79190613326565b610e72565b6040516105c99190613496565b60405180910390f35b6105da610ec8565b6040516105e7919061353a565b60405180910390f35b6105f8610ece565b604051610605919061353a565b60405180910390f35b610616610ed4565b6040516106239190613496565b60405180910390f35b610634610ee7565b6040516106419190613657565b60405180910390f35b610664600480360381019061065f9190613326565b610f0d565b604051610671919061353a565b60405180910390f35b610682610f55565b005b61068c610f69565b604051610699919061353a565b60405180910390f35b6106aa610f6f565b6040516106b79190613496565b60405180910390f35b6106da60048036038101906106d5919061369e565b610f9b565b005b6106e4610ffe565b6040516106f191906135e4565b60405180910390f35b610702611024565b60405161070f919061353a565b60405180910390f35b61072061102a565b005b61072a6110fb565b60405161073791906135e4565b60405180910390f35b610748611125565b604051610755919061353a565b60405180910390f35b610778600480360381019061077391906136de565b61112b565b005b610782611150565b60405161078f91906133e3565b60405180910390f35b6107b260048036038101906107ad919061369e565b6111e2565b005b6107ce60048036038101906107c9919061343b565b611286565b6040516107db9190613496565b60405180910390f35b6107fe60048036038101906107f9919061343b565b6112fd565b60405161080b9190613496565b60405180910390f35b61082e60048036038101906108299190613326565b611320565b005b61084a60048036038101906108459190613326565b6113e8565b6040516108579190613496565b60405180910390f35b610868611408565b6040516108759190613496565b60405180910390f35b6108986004803603810190610893919061369e565b61141b565b005b6108b460048036038101906108af9190613555565b6114cc565b005b6108be611567565b6040516108cb9190613496565b60405180910390f35b6108dc61157a565b6040516108e9919061353a565b60405180910390f35b61090c60048036038101906109079190613555565b611580565b6040516109199190613496565b60405180910390f35b61092a611661565b604051610937919061353a565b60405180910390f35b610948611667565b604051610955919061353a565b60405180910390f35b6109786004803603810190610973919061370b565b61166d565b604051610985919061353a565b60405180910390f35b6109966116f4565b6040516109a391906135e4565b60405180910390f35b6109b461171a565b6040516109c1919061353a565b60405180910390f35b6109d2611720565b6040516109df9190613496565b60405180910390f35b6109f061174c565b6040516109fd919061353a565b60405180910390f35b610a206004803603810190610a1b9190613326565b611752565b005b610a2a6117d5565b604051610a37919061353a565b60405180910390f35b610a486117db565b604051610a55919061353a565b60405180910390f35b610a666117e1565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f36da8748d344842083f47c18719136f60f0bcd2b5e969f56da5fca1b8667201760405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610b359061377a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b619061377a565b8015610bae5780601f10610b8357610100808354040283529160200191610bae565b820191906000526020600020905b815481529060010190602001808311610b9157829003601f168201915b5050505050905090565b600080610bc361185f565b9050610bd0818585611867565b600191505092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60185481565b60175481565b610c3d6117e1565b670de0b6b3a76400006103e86001610c53610c1f565b610c5d91906137da565b610c67919061384b565b610c71919061384b565b811015610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa906138ee565b60405180910390fd5b670de0b6b3a764000081610cc791906137da565b60098190555050565b600080610cdb61185f565b9050610ce8858285611a30565b610cf3858585611abc565b60019150509392505050565b61dead81565b60006012905090565b600080610d1961185f565b9050610d3a818585610d2b858961166d565b610d35919061390e565b611867565b600191505092915050565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b610d9c6117e1565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb3fd0123f0059326c0d3771de6b52f7cc07866caff01a05b16473ae87d382bf960405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e6481600161141b565b610e6f816001610f9b565b50565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b60135481565b600c60029054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f5d6117e1565b610f6760006127a9565b565b60165481565b6000610f796117e1565b6000600c60006101000a81548160ff0219169083151502179055506001905090565b610fa36117e1565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6110326117e1565b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba9061398e565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b6111336117e1565b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461115f9061377a565b80601f016020809104026020016040519081016040528092919081815260200182805461118b9061377a565b80156111d85780601f106111ad576101008083540402835291602001916111d8565b820191906000526020600020905b8154815290600101906020018083116111bb57829003601f168201915b5050505050905090565b6111ea6117e1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90613a20565b60405180910390fd5b611282828261286f565b5050565b60008061129161185f565b9050600061129f828661166d565b9050838110156112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90613ab2565b60405180910390fd5b6112f18286868403611867565b60019250505092915050565b60008061130861185f565b9050611315818585611abc565b600191505092915050565b6113286117e1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b6114236117e1565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516114c09190613496565b60405180910390a25050565b6114d46117e1565b670de0b6b3a76400006103e860056114ea610c1f565b6114f491906137da565b6114fe919061384b565b611508919061384b565b81101561154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190613b44565b60405180910390fd5b670de0b6b3a76400008161155e91906137da565b600b8190555050565b600e60009054906101000a900460ff1681565b60095481565b600061158a6117e1565b620186a06001611598610c1f565b6115a291906137da565b6115ac919061384b565b8210156115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590613bd6565b60405180910390fd5b6103e860056115fb610c1f565b61160591906137da565b61160f919061384b565b821115611651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164890613c68565b60405180910390fd5b81600a8190555060019050919050565b60195481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600061172a6117e1565b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b61175a6117e1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090613cfa565b60405180910390fd5b6117d2816127a9565b50565b60155481565b600b5481565b6117e961185f565b73ffffffffffffffffffffffffffffffffffffffff166118076110fb565b73ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490613d66565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90613df8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c90613e8a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a23919061353a565b60405180910390a3505050565b6000611a3c848461166d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ab65781811015611aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9f90613ef6565b60405180910390fd5b611ab58484848403611867565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290613f88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b919061401a565b60405180910390fd5b60008103611bb357611bae83836000612910565b6127a4565b600c60009054906101000a900460ff16156122cc57611bd06110fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611c3e5750611c0e6110fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c775750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cb1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cca5750600560149054906101000a900460ff16155b156122cb57600c60019054906101000a900460ff16611dc457601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d845750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90614086565b60405180910390fd5b5b600e60009054906101000a900460ff1615611fe257611de16110fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611e6857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ec057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611f165750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fe15743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f939061413e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120855750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561212c576009548111156120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c6906141d0565b60405180910390fd5b600b546120db83610f0d565b826120e6919061390e565b1115612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e9061423c565b60405180910390fd5b6122ca565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121cf5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561221e57600954811115612219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612210906142ce565b60405180910390fd5b6122c9565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122c857600b5461227b83610f0d565b82612286919061390e565b11156122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be9061423c565b60405180910390fd5b5b5b5b5b5b60006122d730610f0d565b90506000600a5482101590508080156122fc5750600c60029054906101000a900460ff165b80156123155750600560149054906101000a900460ff16155b801561236b5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123c15750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124175750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561245b576001600560146101000a81548160ff02191690831515021790555061243f612b86565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125115750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561251b57600090505b6000811561279457601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561257e57506000601354115b1561264b576125ab606461259d6013548861327790919063ffffffff16565b61328d90919063ffffffff16565b9050601354601454826125be91906137da565b6125c8919061384b565b601760008282546125d9919061390e565b92505081905550601354601554826125f191906137da565b6125fb919061384b565b6018600082825461260c919061390e565b925050819055506013546016548261262491906137da565b61262e919061384b565b6019600082825461263f919061390e565b92505081905550612770565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126a657506000600f54115b1561276f576126d360646126c5600f548861327790919063ffffffff16565b61328d90919063ffffffff16565b9050600f54601054826126e691906137da565b6126f0919061384b565b60176000828254612701919061390e565b92505081905550600f546011548261271991906137da565b612723919061384b565b60186000828254612734919061390e565b92505081905550600f546012548261274c91906137da565b612756919061384b565b60196000828254612767919061390e565b925050819055505b5b600081111561278557612784873083612910565b5b808561279191906142ee565b94505b61279f878787612910565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361297f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297690613f88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e59061401a565b60405180910390fd5b6129f98383836132a3565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7690614394565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b6d919061353a565b60405180910390a3612b808484846132a8565b50505050565b6000612b9130610f0d565b90506000601954601854601754612ba8919061390e565b612bb2919061390e565b90506000821480612bc35750600081145b15612bcf575050613275565b6014600a54612bde91906137da565b821115612bf7576014600a54612bf491906137da565b91505b600060028260185485612c0a91906137da565b612c14919061384b565b612c1e919061384b565b90506000612c3582856132ad90919063ffffffff16565b9050600073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c8691906135e4565b602060405180830381865afa158015612ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc791906143c9565b9050612cf630600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611867565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635a081b67836040518263ffffffff1660e01b8152600401612d51919061353a565b600060405180830381600087803b158015612d6b57600080fd5b505af1158015612d7f573d6000803e3d6000fd5b505050506000612e258273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612dd691906135e4565b602060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1791906143c9565b6132ad90919063ffffffff16565b90506000612e5086612e426017548561327790919063ffffffff16565b61328d90919063ffffffff16565b90506000612e7b87612e6d6019548661327790919063ffffffff16565b61328d90919063ffffffff16565b90506000818385612e8c91906142ee565b612e9691906142ee565b905060006017819055506000601881905550600060198190555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b8152600401612f219291906143f6565b6020604051808303816000875af1158015612f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f649190614434565b50600087118015612f755750600081115b1561312957612fa730600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689611867565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016130189291906143f6565b6020604051808303816000875af1158015613037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305b9190614434565b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639cd441da88836040518363ffffffff1660e01b81526004016130b9929190614461565b600060405180830381600087803b1580156130d357600080fd5b505af11580156130e7573d6000803e3d6000fd5b505050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826018546040516131209392919061448a565b60405180910390a15b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016131c991906135e4565b602060405180830381865afa1580156131e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320a91906143c9565b6040518363ffffffff1660e01b81526004016132279291906143f6565b6020604051808303816000875af1158015613246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326a9190614434565b505050505050505050505b565b6000818361328591906137da565b905092915050565b6000818361329b919061384b565b905092915050565b505050565b505050565b600081836132bb91906142ee565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132f3826132c8565b9050919050565b613303816132e8565b811461330e57600080fd5b50565b600081359050613320816132fa565b92915050565b60006020828403121561333c5761333b6132c3565b5b600061334a84828501613311565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561338d578082015181840152602081019050613372565b60008484015250505050565b6000601f19601f8301169050919050565b60006133b582613353565b6133bf818561335e565b93506133cf81856020860161336f565b6133d881613399565b840191505092915050565b600060208201905081810360008301526133fd81846133aa565b905092915050565b6000819050919050565b61341881613405565b811461342357600080fd5b50565b6000813590506134358161340f565b92915050565b60008060408385031215613452576134516132c3565b5b600061346085828601613311565b925050602061347185828601613426565b9150509250929050565b60008115159050919050565b6134908161347b565b82525050565b60006020820190506134ab6000830184613487565b92915050565b6000819050919050565b60006134d66134d16134cc846132c8565b6134b1565b6132c8565b9050919050565b60006134e8826134bb565b9050919050565b60006134fa826134dd565b9050919050565b61350a816134ef565b82525050565b60006020820190506135256000830184613501565b92915050565b61353481613405565b82525050565b600060208201905061354f600083018461352b565b92915050565b60006020828403121561356b5761356a6132c3565b5b600061357984828501613426565b91505092915050565b60008060006060848603121561359b5761359a6132c3565b5b60006135a986828701613311565b93505060206135ba86828701613311565b92505060406135cb86828701613426565b9150509250925092565b6135de816132e8565b82525050565b60006020820190506135f960008301846135d5565b92915050565b600060ff82169050919050565b613615816135ff565b82525050565b6000602082019050613630600083018461360c565b92915050565b6000613641826134dd565b9050919050565b61365181613636565b82525050565b600060208201905061366c6000830184613648565b92915050565b61367b8161347b565b811461368657600080fd5b50565b60008135905061369881613672565b92915050565b600080604083850312156136b5576136b46132c3565b5b60006136c385828601613311565b92505060206136d485828601613689565b9150509250929050565b6000602082840312156136f4576136f36132c3565b5b600061370284828501613689565b91505092915050565b60008060408385031215613722576137216132c3565b5b600061373085828601613311565b925050602061374185828601613311565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061379257607f821691505b6020821081036137a5576137a461374b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137e582613405565b91506137f083613405565b92508282026137fe81613405565b91508282048414831517613815576138146137ab565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061385682613405565b915061386183613405565b9250826138715761387061381c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006138d8602f8361335e565b91506138e38261387c565b604082019050919050565b60006020820190508181036000830152613907816138cb565b9050919050565b600061391982613405565b915061392483613405565b925082820190508082111561393c5761393b6137ab565b5b92915050565b7f4e65656420746f207365742073776170206d616e616765720000000000000000600082015250565b600061397860188361335e565b915061398382613942565b602082019050919050565b600060208201905081810360008301526139a78161396b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a0a60398361335e565b9150613a15826139ae565b604082019050919050565b60006020820190508181036000830152613a39816139fd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613a9c60258361335e565b9150613aa782613a40565b604082019050919050565b60006020820190508181036000830152613acb81613a8f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613b2e60248361335e565b9150613b3982613ad2565b604082019050919050565b60006020820190508181036000830152613b5d81613b21565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613bc060358361335e565b9150613bcb82613b64565b604082019050919050565b60006020820190508181036000830152613bef81613bb3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613c5260348361335e565b9150613c5d82613bf6565b604082019050919050565b60006020820190508181036000830152613c8181613c45565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ce460268361335e565b9150613cef82613c88565b604082019050919050565b60006020820190508181036000830152613d1381613cd7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d5060208361335e565b9150613d5b82613d1a565b602082019050919050565b60006020820190508181036000830152613d7f81613d43565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613de260248361335e565b9150613ded82613d86565b604082019050919050565b60006020820190508181036000830152613e1181613dd5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e7460228361335e565b9150613e7f82613e18565b604082019050919050565b60006020820190508181036000830152613ea381613e67565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613ee0601d8361335e565b9150613eeb82613eaa565b602082019050919050565b60006020820190508181036000830152613f0f81613ed3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f7260258361335e565b9150613f7d82613f16565b604082019050919050565b60006020820190508181036000830152613fa181613f65565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061400460238361335e565b915061400f82613fa8565b604082019050919050565b6000602082019050818103600083015261403381613ff7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061407060168361335e565b915061407b8261403a565b602082019050919050565b6000602082019050818103600083015261409f81614063565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061412860498361335e565b9150614133826140a6565b606082019050919050565b600060208201905081810360008301526141578161411b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006141ba60358361335e565b91506141c58261415e565b604082019050919050565b600060208201905081810360008301526141e9816141ad565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061422660138361335e565b9150614231826141f0565b602082019050919050565b6000602082019050818103600083015261425581614219565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006142b860368361335e565b91506142c38261425c565b604082019050919050565b600060208201905081810360008301526142e7816142ab565b9050919050565b60006142f982613405565b915061430483613405565b925082820390508181111561431c5761431b6137ab565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061437e60268361335e565b915061438982614322565b604082019050919050565b600060208201905081810360008301526143ad81614371565b9050919050565b6000815190506143c38161340f565b92915050565b6000602082840312156143df576143de6132c3565b5b60006143ed848285016143b4565b91505092915050565b600060408201905061440b60008301856135d5565b614418602083018461352b565b9392505050565b60008151905061442e81613672565b92915050565b60006020828403121561444a576144496132c3565b5b60006144588482850161441f565b91505092915050565b6000604082019050614476600083018561352b565b614483602083018461352b565b9392505050565b600060608201905061449f600083018661352b565b6144ac602083018561352b565b6144b9604083018461352b565b94935050505056fea2646970667358221220ac39f2076a0d8796288233bcdc442ae138b17375c07f8f78e0e9b0bb9e01061864736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061035d5760003560e01c806375f0a874116101d3578063c18bc19511610104578063deab8aea116100a2578063f11a24d31161007c578063f11a24d3146109e8578063f2fde38b14610a06578063f637434214610a22578063f8b45b0514610a405761035d565b8063deab8aea1461098e578063e2f45605146109ac578063e884f260146109ca5761035d565b8063d257b34f116100de578063d257b34f146108f2578063d4090d2a14610922578063d85ba06314610940578063dd62ed3e1461095e5761035d565b8063c18bc1951461089a578063c876d0b9146108b6578063c8c8ebe4146108d45761035d565b80639a7a23d611610171578063aacebbe31161014b578063aacebbe314610814578063b62496f514610830578063bbc0c74214610860578063c02466681461087e5761035d565b80639a7a23d614610798578063a457c2d7146107b4578063a9059cbb146107e45761035d565b80638da5cb5b116101ad5780638da5cb5b146107225780639213691314610740578063924de9b71461075e57806395d89b411461077a5761035d565b806375f0a874146106dc5780637bce5a04146106fa5780638a8c523c146107185761035d565b80633e413bee116102ad5780636ddd17131161024b578063715018a611610225578063715018a61461067a57806371a5152214610684578063751039fc146106a25780637571336a146106c05761035d565b80636ddd17131461060e578063709d039d1461062c57806370a082311461064a5761035d565b80634c36fad7116102875780634c36fad7146105865780634fbee193146105a2578063540ba552146105d25780636a486a8e146105f05761035d565b80633e413bee1461052c57806349bd5a5e1461054a5780634a62bb65146105685761035d565b80631a8145bb1161031a57806323b872dd116102f457806323b872dd1461049057806327c8f835146104c0578063313ce567146104de57806339509351146104fc5761035d565b80631a8145bb146104385780631f3fed8f14610456578063203e727e146104745761035d565b806304dacd501461036257806306fdde031461037e578063095ea7b31461039c57806310d5de53146103cc5780631694505e146103fc57806318160ddd1461041a575b600080fd5b61037c60048036038101906103779190613326565b610a5e565b005b610386610b26565b60405161039391906133e3565b60405180910390f35b6103b660048036038101906103b1919061343b565b610bb8565b6040516103c39190613496565b60405180910390f35b6103e660048036038101906103e19190613326565b610bdb565b6040516103f39190613496565b60405180910390f35b610404610bfb565b6040516104119190613510565b60405180910390f35b610422610c1f565b60405161042f919061353a565b60405180910390f35b610440610c29565b60405161044d919061353a565b60405180910390f35b61045e610c2f565b60405161046b919061353a565b60405180910390f35b61048e60048036038101906104899190613555565b610c35565b005b6104aa60048036038101906104a59190613582565b610cd0565b6040516104b79190613496565b60405180910390f35b6104c8610cff565b6040516104d591906135e4565b60405180910390f35b6104e6610d05565b6040516104f3919061361b565b60405180910390f35b6105166004803603810190610511919061343b565b610d0e565b6040516105239190613496565b60405180910390f35b610534610d45565b60405161054191906135e4565b60405180910390f35b610552610d5d565b60405161055f91906135e4565b60405180910390f35b610570610d81565b60405161057d9190613496565b60405180910390f35b6105a0600480360381019061059b9190613326565b610d94565b005b6105bc60048036038101906105b79190613326565b610e72565b6040516105c99190613496565b60405180910390f35b6105da610ec8565b6040516105e7919061353a565b60405180910390f35b6105f8610ece565b604051610605919061353a565b60405180910390f35b610616610ed4565b6040516106239190613496565b60405180910390f35b610634610ee7565b6040516106419190613657565b60405180910390f35b610664600480360381019061065f9190613326565b610f0d565b604051610671919061353a565b60405180910390f35b610682610f55565b005b61068c610f69565b604051610699919061353a565b60405180910390f35b6106aa610f6f565b6040516106b79190613496565b60405180910390f35b6106da60048036038101906106d5919061369e565b610f9b565b005b6106e4610ffe565b6040516106f191906135e4565b60405180910390f35b610702611024565b60405161070f919061353a565b60405180910390f35b61072061102a565b005b61072a6110fb565b60405161073791906135e4565b60405180910390f35b610748611125565b604051610755919061353a565b60405180910390f35b610778600480360381019061077391906136de565b61112b565b005b610782611150565b60405161078f91906133e3565b60405180910390f35b6107b260048036038101906107ad919061369e565b6111e2565b005b6107ce60048036038101906107c9919061343b565b611286565b6040516107db9190613496565b60405180910390f35b6107fe60048036038101906107f9919061343b565b6112fd565b60405161080b9190613496565b60405180910390f35b61082e60048036038101906108299190613326565b611320565b005b61084a60048036038101906108459190613326565b6113e8565b6040516108579190613496565b60405180910390f35b610868611408565b6040516108759190613496565b60405180910390f35b6108986004803603810190610893919061369e565b61141b565b005b6108b460048036038101906108af9190613555565b6114cc565b005b6108be611567565b6040516108cb9190613496565b60405180910390f35b6108dc61157a565b6040516108e9919061353a565b60405180910390f35b61090c60048036038101906109079190613555565b611580565b6040516109199190613496565b60405180910390f35b61092a611661565b604051610937919061353a565b60405180910390f35b610948611667565b604051610955919061353a565b60405180910390f35b6109786004803603810190610973919061370b565b61166d565b604051610985919061353a565b60405180910390f35b6109966116f4565b6040516109a391906135e4565b60405180910390f35b6109b461171a565b6040516109c1919061353a565b60405180910390f35b6109d2611720565b6040516109df9190613496565b60405180910390f35b6109f061174c565b6040516109fd919061353a565b60405180910390f35b610a206004803603810190610a1b9190613326565b611752565b005b610a2a6117d5565b604051610a37919061353a565b60405180910390f35b610a486117db565b604051610a55919061353a565b60405180910390f35b610a666117e1565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f36da8748d344842083f47c18719136f60f0bcd2b5e969f56da5fca1b8667201760405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610b359061377a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b619061377a565b8015610bae5780601f10610b8357610100808354040283529160200191610bae565b820191906000526020600020905b815481529060010190602001808311610b9157829003601f168201915b5050505050905090565b600080610bc361185f565b9050610bd0818585611867565b600191505092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60185481565b60175481565b610c3d6117e1565b670de0b6b3a76400006103e86001610c53610c1f565b610c5d91906137da565b610c67919061384b565b610c71919061384b565b811015610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa906138ee565b60405180910390fd5b670de0b6b3a764000081610cc791906137da565b60098190555050565b600080610cdb61185f565b9050610ce8858285611a30565b610cf3858585611abc565b60019150509392505050565b61dead81565b60006012905090565b600080610d1961185f565b9050610d3a818585610d2b858961166d565b610d35919061390e565b611867565b600191505092915050565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b7f00000000000000000000000048608f8cd658066601459431ac84baee4bf2618981565b600c60009054906101000a900460ff1681565b610d9c6117e1565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb3fd0123f0059326c0d3771de6b52f7cc07866caff01a05b16473ae87d382bf960405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610e6481600161141b565b610e6f816001610f9b565b50565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b60135481565b600c60029054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f5d6117e1565b610f6760006127a9565b565b60165481565b6000610f796117e1565b6000600c60006101000a81548160ff0219169083151502179055506001905090565b610fa36117e1565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6110326117e1565b600073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba9061398e565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b6111336117e1565b80600c60026101000a81548160ff02191690831515021790555050565b60606004805461115f9061377a565b80601f016020809104026020016040519081016040528092919081815260200182805461118b9061377a565b80156111d85780601f106111ad576101008083540402835291602001916111d8565b820191906000526020600020905b8154815290600101906020018083116111bb57829003601f168201915b5050505050905090565b6111ea6117e1565b7f00000000000000000000000048608f8cd658066601459431ac84baee4bf2618973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f90613a20565b60405180910390fd5b611282828261286f565b5050565b60008061129161185f565b9050600061129f828661166d565b9050838110156112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90613ab2565b60405180910390fd5b6112f18286868403611867565b60019250505092915050565b60008061130861185f565b9050611315818585611abc565b600191505092915050565b6113286117e1565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b6114236117e1565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516114c09190613496565b60405180910390a25050565b6114d46117e1565b670de0b6b3a76400006103e860056114ea610c1f565b6114f491906137da565b6114fe919061384b565b611508919061384b565b81101561154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190613b44565b60405180910390fd5b670de0b6b3a76400008161155e91906137da565b600b8190555050565b600e60009054906101000a900460ff1681565b60095481565b600061158a6117e1565b620186a06001611598610c1f565b6115a291906137da565b6115ac919061384b565b8210156115ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e590613bd6565b60405180910390fd5b6103e860056115fb610c1f565b61160591906137da565b61160f919061384b565b821115611651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164890613c68565b60405180910390fd5b81600a8190555060019050919050565b60195481565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600061172a6117e1565b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b61175a6117e1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036117c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c090613cfa565b60405180910390fd5b6117d2816127a9565b50565b60155481565b600b5481565b6117e961185f565b73ffffffffffffffffffffffffffffffffffffffff166118076110fb565b73ffffffffffffffffffffffffffffffffffffffff161461185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185490613d66565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90613df8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193c90613e8a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611a23919061353a565b60405180910390a3505050565b6000611a3c848461166d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611ab65781811015611aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9f90613ef6565b60405180910390fd5b611ab58484848403611867565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290613f88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b919061401a565b60405180910390fd5b60008103611bb357611bae83836000612910565b6127a4565b600c60009054906101000a900460ff16156122cc57611bd06110fb565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611c3e5750611c0e6110fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c775750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cb1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611cca5750600560149054906101000a900460ff16155b156122cb57600c60019054906101000a900460ff16611dc457601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d845750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba90614086565b60405180910390fd5b5b600e60009054906101000a900460ff1615611fe257611de16110fb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611e6857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ec057507f00000000000000000000000048608f8cd658066601459431ac84baee4bf2618973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611f165750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611fe15743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f939061413e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156120855750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561212c576009548111156120cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c6906141d0565b60405180910390fd5b600b546120db83610f0d565b826120e6919061390e565b1115612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e9061423c565b60405180910390fd5b6122ca565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121cf5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561221e57600954811115612219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612210906142ce565b60405180910390fd5b6122c9565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122c857600b5461227b83610f0d565b82612286919061390e565b11156122c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122be9061423c565b60405180910390fd5b5b5b5b5b5b60006122d730610f0d565b90506000600a5482101590508080156122fc5750600c60029054906101000a900460ff165b80156123155750600560149054906101000a900460ff16155b801561236b5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123c15750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124175750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561245b576001600560146101000a81548160ff02191690831515021790555061243f612b86565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125115750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561251b57600090505b6000811561279457601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561257e57506000601354115b1561264b576125ab606461259d6013548861327790919063ffffffff16565b61328d90919063ffffffff16565b9050601354601454826125be91906137da565b6125c8919061384b565b601760008282546125d9919061390e565b92505081905550601354601554826125f191906137da565b6125fb919061384b565b6018600082825461260c919061390e565b925050819055506013546016548261262491906137da565b61262e919061384b565b6019600082825461263f919061390e565b92505081905550612770565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126a657506000600f54115b1561276f576126d360646126c5600f548861327790919063ffffffff16565b61328d90919063ffffffff16565b9050600f54601054826126e691906137da565b6126f0919061384b565b60176000828254612701919061390e565b92505081905550600f546011548261271991906137da565b612723919061384b565b60186000828254612734919061390e565b92505081905550600f546012548261274c91906137da565b612756919061384b565b60196000828254612767919061390e565b925050819055505b5b600081111561278557612784873083612910565b5b808561279191906142ee565b94505b61279f878787612910565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361297f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297690613f88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e59061401a565b60405180910390fd5b6129f98383836132a3565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7690614394565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b6d919061353a565b60405180910390a3612b808484846132a8565b50505050565b6000612b9130610f0d565b90506000601954601854601754612ba8919061390e565b612bb2919061390e565b90506000821480612bc35750600081145b15612bcf575050613275565b6014600a54612bde91906137da565b821115612bf7576014600a54612bf491906137da565b91505b600060028260185485612c0a91906137da565b612c14919061384b565b612c1e919061384b565b90506000612c3582856132ad90919063ffffffff16565b9050600073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c8691906135e4565b602060405180830381865afa158015612ca3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc791906143c9565b9050612cf630600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611867565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635a081b67836040518263ffffffff1660e01b8152600401612d51919061353a565b600060405180830381600087803b158015612d6b57600080fd5b505af1158015612d7f573d6000803e3d6000fd5b505050506000612e258273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612dd691906135e4565b602060405180830381865afa158015612df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1791906143c9565b6132ad90919063ffffffff16565b90506000612e5086612e426017548561327790919063ffffffff16565b61328d90919063ffffffff16565b90506000612e7b87612e6d6019548661327790919063ffffffff16565b61328d90919063ffffffff16565b90506000818385612e8c91906142ee565b612e9691906142ee565b905060006017819055506000601881905550600060198190555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518363ffffffff1660e01b8152600401612f219291906143f6565b6020604051808303816000875af1158015612f40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f649190614434565b50600087118015612f755750600081115b1561312957612fa730600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689611867565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016130189291906143f6565b6020604051808303816000875af1158015613037573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305b9190614434565b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639cd441da88836040518363ffffffff1660e01b81526004016130b9929190614461565b600060405180830381600087803b1580156130d357600080fd5b505af11580156130e7573d6000803e3d6000fd5b505050507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826018546040516131209392919061448a565b60405180910390a15b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016131c991906135e4565b602060405180830381865afa1580156131e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061320a91906143c9565b6040518363ffffffff1660e01b81526004016132279291906143f6565b6020604051808303816000875af1158015613246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326a9190614434565b505050505050505050505b565b6000818361328591906137da565b905092915050565b6000818361329b919061384b565b905092915050565b505050565b505050565b600081836132bb91906142ee565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132f3826132c8565b9050919050565b613303816132e8565b811461330e57600080fd5b50565b600081359050613320816132fa565b92915050565b60006020828403121561333c5761333b6132c3565b5b600061334a84828501613311565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561338d578082015181840152602081019050613372565b60008484015250505050565b6000601f19601f8301169050919050565b60006133b582613353565b6133bf818561335e565b93506133cf81856020860161336f565b6133d881613399565b840191505092915050565b600060208201905081810360008301526133fd81846133aa565b905092915050565b6000819050919050565b61341881613405565b811461342357600080fd5b50565b6000813590506134358161340f565b92915050565b60008060408385031215613452576134516132c3565b5b600061346085828601613311565b925050602061347185828601613426565b9150509250929050565b60008115159050919050565b6134908161347b565b82525050565b60006020820190506134ab6000830184613487565b92915050565b6000819050919050565b60006134d66134d16134cc846132c8565b6134b1565b6132c8565b9050919050565b60006134e8826134bb565b9050919050565b60006134fa826134dd565b9050919050565b61350a816134ef565b82525050565b60006020820190506135256000830184613501565b92915050565b61353481613405565b82525050565b600060208201905061354f600083018461352b565b92915050565b60006020828403121561356b5761356a6132c3565b5b600061357984828501613426565b91505092915050565b60008060006060848603121561359b5761359a6132c3565b5b60006135a986828701613311565b93505060206135ba86828701613311565b92505060406135cb86828701613426565b9150509250925092565b6135de816132e8565b82525050565b60006020820190506135f960008301846135d5565b92915050565b600060ff82169050919050565b613615816135ff565b82525050565b6000602082019050613630600083018461360c565b92915050565b6000613641826134dd565b9050919050565b61365181613636565b82525050565b600060208201905061366c6000830184613648565b92915050565b61367b8161347b565b811461368657600080fd5b50565b60008135905061369881613672565b92915050565b600080604083850312156136b5576136b46132c3565b5b60006136c385828601613311565b92505060206136d485828601613689565b9150509250929050565b6000602082840312156136f4576136f36132c3565b5b600061370284828501613689565b91505092915050565b60008060408385031215613722576137216132c3565b5b600061373085828601613311565b925050602061374185828601613311565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061379257607f821691505b6020821081036137a5576137a461374b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137e582613405565b91506137f083613405565b92508282026137fe81613405565b91508282048414831517613815576138146137ab565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061385682613405565b915061386183613405565b9250826138715761387061381c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006138d8602f8361335e565b91506138e38261387c565b604082019050919050565b60006020820190508181036000830152613907816138cb565b9050919050565b600061391982613405565b915061392483613405565b925082820190508082111561393c5761393b6137ab565b5b92915050565b7f4e65656420746f207365742073776170206d616e616765720000000000000000600082015250565b600061397860188361335e565b915061398382613942565b602082019050919050565b600060208201905081810360008301526139a78161396b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613a0a60398361335e565b9150613a15826139ae565b604082019050919050565b60006020820190508181036000830152613a39816139fd565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613a9c60258361335e565b9150613aa782613a40565b604082019050919050565b60006020820190508181036000830152613acb81613a8f565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613b2e60248361335e565b9150613b3982613ad2565b604082019050919050565b60006020820190508181036000830152613b5d81613b21565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613bc060358361335e565b9150613bcb82613b64565b604082019050919050565b60006020820190508181036000830152613bef81613bb3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613c5260348361335e565b9150613c5d82613bf6565b604082019050919050565b60006020820190508181036000830152613c8181613c45565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ce460268361335e565b9150613cef82613c88565b604082019050919050565b60006020820190508181036000830152613d1381613cd7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d5060208361335e565b9150613d5b82613d1a565b602082019050919050565b60006020820190508181036000830152613d7f81613d43565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613de260248361335e565b9150613ded82613d86565b604082019050919050565b60006020820190508181036000830152613e1181613dd5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e7460228361335e565b9150613e7f82613e18565b604082019050919050565b60006020820190508181036000830152613ea381613e67565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613ee0601d8361335e565b9150613eeb82613eaa565b602082019050919050565b60006020820190508181036000830152613f0f81613ed3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f7260258361335e565b9150613f7d82613f16565b604082019050919050565b60006020820190508181036000830152613fa181613f65565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061400460238361335e565b915061400f82613fa8565b604082019050919050565b6000602082019050818103600083015261403381613ff7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061407060168361335e565b915061407b8261403a565b602082019050919050565b6000602082019050818103600083015261409f81614063565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061412860498361335e565b9150614133826140a6565b606082019050919050565b600060208201905081810360008301526141578161411b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006141ba60358361335e565b91506141c58261415e565b604082019050919050565b600060208201905081810360008301526141e9816141ad565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061422660138361335e565b9150614231826141f0565b602082019050919050565b6000602082019050818103600083015261425581614219565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006142b860368361335e565b91506142c38261425c565b604082019050919050565b600060208201905081810360008301526142e7816142ab565b9050919050565b60006142f982613405565b915061430483613405565b925082820390508181111561431c5761431b6137ab565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061437e60268361335e565b915061438982614322565b604082019050919050565b600060208201905081810360008301526143ad81614371565b9050919050565b6000815190506143c38161340f565b92915050565b6000602082840312156143df576143de6132c3565b5b60006143ed848285016143b4565b91505092915050565b600060408201905061440b60008301856135d5565b614418602083018461352b565b9392505050565b60008151905061442e81613672565b92915050565b60006020828403121561444a576144496132c3565b5b60006144588482850161441f565b91505092915050565b6000604082019050614476600083018561352b565b614483602083018461352b565b9392505050565b600060608201905061449f600083018661352b565b6144ac602083018561352b565b6144b9604083018461352b565b94935050505056fea2646970667358221220ac39f2076a0d8796288233bcdc442ae138b17375c07f8f78e0e9b0bb9e01061864736f6c63430008110033

Deployed Bytecode Sourcemap

32205:14883:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40051:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9004:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11340:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33623:63;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32285:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10124:105;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33437:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33400;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37905:272;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12115:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32388:53;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9966:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12816:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32448:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32343:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32787:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38621:289;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40253:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33229:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33263;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32867:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32643;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10292:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2752:103;;;:::i;:::-;;33365:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37016:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38446:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32569:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33161:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36731:233;;;:::i;:::-;;2104:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33295:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39006:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9223:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39304:304;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13554:430;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10622:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39812:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33844:57;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32827:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39114:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38185:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33082:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32681:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37403:494;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33474:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33130:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10875:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32606:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32720:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37198:135;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33195:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3010:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33330:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32757:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40051:194;1990:13;:11;:13::i;:::-;40180::::1;;;;;;;;;;;40141:53;;40162:16;40141:53;;;;;;;;;;;;40221:16;40205:13;;:32;;;;;;;;;;;;;;;;;;40051:194:::0;:::o;9004:100::-;9058:13;9091:5;9084:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9004:100;:::o;11340:198::-;11420:4;11437:13;11453:12;:10;:12::i;:::-;11437:28;;11476:32;11485:5;11492:7;11501:6;11476:8;:32::i;:::-;11526:4;11519:11;;;11340:198;;;;:::o;33623:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32285:51::-;;;:::o;10124:105::-;10185:4;10209:12;;10202:19;;10124:105;:::o;33437:30::-;;;;:::o;33400:::-;;;;:::o;37905:272::-;1990:13;:11;:13::i;:::-;38039:4:::1;38031;38026:1;38010:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38009:26;;;;:::i;:::-;38008:35;;;;:::i;:::-;37998:6;:45;;37976:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;38162:6;38152;:17;;;;:::i;:::-;38129:20;:40;;;;37905:272:::0;:::o;12115:292::-;12243:4;12260:15;12278:12;:10;:12::i;:::-;12260:30;;12301:38;12317:4;12323:7;12332:6;12301:15;:38::i;:::-;12350:27;12360:4;12366:2;12370:6;12350:9;:27::i;:::-;12395:4;12388:11;;;12115:292;;;;;:::o;32388:53::-;32434:6;32388:53;:::o;9966:93::-;10024:5;10049:2;10042:9;;9966:93;:::o;12816:235::-;12901:4;12918:13;12934:12;:10;:12::i;:::-;12918:28;;12957:64;12966:5;12973:7;13010:10;12982:25;12992:5;12999:7;12982:9;:25::i;:::-;:38;;;;:::i;:::-;12957:8;:64::i;:::-;13039:4;13032:11;;;12816:235;;;;:::o;32448:82::-;32487:42;32448:82;:::o;32343:38::-;;;:::o;32787:33::-;;;;;;;;;;;;;:::o;38621:289::-;1990:13;:11;:13::i;:::-;38742:11:::1;;;;;;;;;;;38703:52;;38722:10;38703:52;;;;;;;;;;;;38793:10;38766:11;;:38;;;;;;;;;;;;;;;;;;38815:33;38831:10;38843:4;38815:15;:33::i;:::-;38859:43;38885:10;38897:4;38859:25;:43::i;:::-;38621:289:::0;:::o;40253:126::-;40319:4;40343:19;:28;40363:7;40343:28;;;;;;;;;;;;;;;;;;;;;;;;;40336:35;;40253:126;;;:::o;33229:25::-;;;;:::o;33263:::-;;;;:::o;32867:31::-;;;;;;;;;;;;;:::o;32643:::-;;;;;;;;;;;;;:::o;10292:124::-;10366:4;10390:9;:18;10400:7;10390:18;;;;;;;;;;;;;;;;10383:25;;10292:124;;;:::o;2752:103::-;1990:13;:11;:13::i;:::-;2817:30:::1;2844:1;2817:18;:30::i;:::-;2752:103::o:0;33365:26::-;;;;:::o;37016:121::-;37068:4;1990:13;:11;:13::i;:::-;37102:5:::1;37085:14;;:22;;;;;;;;;;;;;;;;;;37125:4;37118:11;;37016:121:::0;:::o;38446:167::-;1990:13;:11;:13::i;:::-;38601:4:::1;38559:31;:39;38591:6;38559:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38446:167:::0;;:::o;32569:30::-;;;;;;;;;;;;;:::o;33161:27::-;;;;:::o;36731:233::-;1990:13;:11;:13::i;:::-;36841:1:::1;36809:34;;36817:11;;;;;;;;;;;36809:34;;::::0;36786:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36923:4;36907:13;;:20;;;;;;;;;;;;;;;;;;36952:4;36938:11;;:18;;;;;;;;;;;;;;;;;;36731:233::o:0;2104:87::-;2150:7;2177:6;;;;;;;;;;;2170:13;;2104:87;:::o;33295:28::-;;;;:::o;39006:100::-;1990:13;:11;:13::i;:::-;39091:7:::1;39077:11;;:21;;;;;;;;;;;;;;;;;;39006:100:::0;:::o;9223:104::-;9279:13;9312:7;9305:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9223:104;:::o;39304:304::-;1990:13;:11;:13::i;:::-;39448::::1;39440:21;;:4;:21;;::::0;39418:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39559:41;39588:4;39594:5;39559:28;:41::i;:::-;39304:304:::0;;:::o;13554:430::-;13644:4;13661:13;13677:12;:10;:12::i;:::-;13661:28;;13700:21;13724:25;13734:5;13741:7;13724:9;:25::i;:::-;13700:49;;13788:15;13768:16;:35;;13760:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13881:60;13890:5;13897:7;13925:15;13906:16;:34;13881:8;:60::i;:::-;13972:4;13965:11;;;;13554:430;;;;:::o;10622:190::-;10698:4;10715:13;10731:12;:10;:12::i;:::-;10715:28;;10754;10764:5;10771:2;10775:6;10754:9;:28::i;:::-;10800:4;10793:11;;;10622:190;;;;:::o;39812:231::-;1990:13;:11;:13::i;:::-;39972:15:::1;;;;;;;;;;;39929:59;;39952:18;39929:59;;;;;;;;;;;;40017:18;39999:15;;:36;;;;;;;;;;;;;;;;;;39812:231:::0;:::o;33844:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;32827:33::-;;;;;;;;;;;;;:::o;39114:182::-;1990:13;:11;:13::i;:::-;39230:8:::1;39199:19;:28;39219:7;39199:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39270:7;39254:34;;;39279:8;39254:34;;;;;;:::i;:::-;;;;;;;;39114:182:::0;;:::o;38185:253::-;1990:13;:11;:13::i;:::-;38322:4:::1;38314;38309:1;38293:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38292:26;;;;:::i;:::-;38291:35;;;;:::i;:::-;38281:6;:45;;38259:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;38423:6;38413;:17;;;;:::i;:::-;38401:9;:29;;;;38185:253:::0;:::o;33082:39::-;;;;;;;;;;;;;:::o;32681:32::-;;;;:::o;37403:494::-;37508:4;1990:13;:11;:13::i;:::-;37587:6:::1;37582:1;37566:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37565:28;;;;:::i;:::-;37552:9;:41;;37530:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;37742:4;37737:1;37721:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37720:26;;;;:::i;:::-;37707:9;:39;;37685:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;37858:9;37837:18;:30;;;;37885:4;37878:11;;37403:494:::0;;;:::o;33474:28::-;;;;:::o;33130:24::-;;;;:::o;10875:148::-;10964:4;10988:11;:18;11000:5;10988:18;;;;;;;;;;;;;;;:27;11007:7;10988:27;;;;;;;;;;;;;;;;10981:34;;10875:148;;;;:::o;32606:28::-;;;;;;;;;;;;;:::o;32720:30::-;;;;:::o;37198:135::-;37258:4;1990:13;:11;:13::i;:::-;37298:5:::1;37275:20;;:28;;;;;;;;;;;;;;;;;;37321:4;37314:11;;37198:135:::0;:::o;33195:27::-;;;;:::o;3010:201::-;1990:13;:11;:13::i;:::-;3119:1:::1;3099:22;;:8;:22;;::::0;3091:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3175:28;3194:8;3175:18;:28::i;:::-;3010:201:::0;:::o;33330:28::-;;;;:::o;32757:21::-;;;;:::o;2269:132::-;2344:12;:10;:12::i;:::-;2333:23;;:7;:5;:7::i;:::-;:23;;;2325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2269:132::o;741:98::-;794:7;821:10;814:17;;741:98;:::o;17560:377::-;17710:1;17693:19;;:5;:19;;;17685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17791:1;17772:21;;:7;:21;;;17764:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17875:6;17845:11;:18;17857:5;17845:18;;;;;;;;;;;;;;;:27;17864:7;17845:27;;;;;;;;;;;;;;;:36;;;;17913:7;17897:32;;17906:5;17897:32;;;17922:6;17897:32;;;;;;:::i;:::-;;;;;;;;17560:377;;;:::o;18228:444::-;18360:21;18384:25;18394:5;18401:7;18384:9;:25::i;:::-;18360:49;;18444:14;18424:16;:34;18420:245;;18503:6;18483:16;:26;;18475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18587:51;18596:5;18603:7;18631:6;18612:16;:25;18587:8;:51::i;:::-;18420:245;18349:323;18228:444;;;:::o;40387:4781::-;40532:1;40516:18;;:4;:18;;;40508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40609:1;40595:16;;:2;:16;;;40587:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40678:1;40668:6;:11;40664:93;;40696:28;40712:4;40718:2;40722:1;40696:15;:28::i;:::-;40739:7;;40664:93;40773:14;;;;;;;;;;;40769:2542;;;40834:7;:5;:7::i;:::-;40826:15;;:4;:15;;;;:49;;;;;40868:7;:5;:7::i;:::-;40862:13;;:2;:13;;;;40826:49;:86;;;;;40910:1;40896:16;;:2;:16;;;;40826:86;:128;;;;;40947:6;40933:21;;:2;:21;;;;40826:128;:158;;;;;40976:8;;;;;;;;;;;40975:9;40826:158;40804:2496;;;41024:13;;;;;;;;;;;41019:223;;41096:19;:25;41116:4;41096:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41125:19;:23;41145:2;41125:23;;;;;;;;;;;;;;;;;;;;;;;;;41096:52;41062:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;41019:223;41398:20;;;;;;;;;;;41394:696;;;41479:7;:5;:7::i;:::-;41473:13;;:2;:13;;;;:72;;;;;41529:15;41515:30;;:2;:30;;;;41473:72;:129;;;;;41588:13;41574:28;;:2;:28;;;;41473:129;:184;;;;;41632:19;:25;41652:4;41632:25;;;;;;;;;;;;;;;;;;;;;;;;;41631:26;41473:184;41443:628;;;41821:12;41746:28;:39;41775:9;41746:39;;;;;;;;;;;;;;;;:87;41708:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;42035:12;41993:28;:39;42022:9;41993:39;;;;;;;;;;;;;;;:54;;;;41443:628;41394:696;42164:25;:31;42190:4;42164:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;42221:31;:35;42253:2;42221:35;;;;;;;;;;;;;;;;;;;;;;;;;42220:36;42164:92;42138:1147;;;42343:20;;42333:6;:30;;42299:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;42551:9;;42534:13;42544:2;42534:9;:13::i;:::-;42525:6;:22;;;;:::i;:::-;:35;;42491:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42138:1147;;;42729:25;:29;42755:2;42729:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;42784:31;:37;42816:4;42784:37;;;;;;;;;;;;;;;;;;;;;;;;;42783:38;42729:92;42703:582;;;42908:20;;42898:6;:30;;42864:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;42703:582;;;43065:31;:35;43097:2;43065:35;;;;;;;;;;;;;;;;;;;;;;;;;43060:225;;43185:9;;43168:13;43178:2;43168:9;:13::i;:::-;43159:6;:22;;;;:::i;:::-;:35;;43125:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43060:225;42703:582;42138:1147;40804:2496;40769:2542;43323:25;43351:24;43369:4;43351:9;:24::i;:::-;43323:52;;43388:12;43427:18;;43403:20;:42;;43388:57;;43476:7;:35;;;;;43500:11;;;;;;;;;;;43476:35;:61;;;;;43529:8;;;;;;;;;;;43528:9;43476:61;:110;;;;;43555:25;:31;43581:4;43555:31;;;;;;;;;;;;;;;;;;;;;;;;;43554:32;43476:110;:153;;;;;43604:19;:25;43624:4;43604:25;;;;;;;;;;;;;;;;;;;;;;;;;43603:26;43476:153;:194;;;;;43647:19;:23;43667:2;43647:23;;;;;;;;;;;;;;;;;;;;;;;;;43646:24;43476:194;43458:326;;;43708:4;43697:8;;:15;;;;;;;;;;;;;;;;;;43729:10;:8;:10::i;:::-;43767:5;43756:8;;:16;;;;;;;;;;;;;;;;;;43458:326;43796:12;43812:8;;;;;;;;;;;43811:9;43796:24;;43922:19;:25;43942:4;43922:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43951:19;:23;43971:2;43951:23;;;;;;;;;;;;;;;;;;;;;;;;;43922:52;43918:100;;;44001:5;43991:15;;43918:100;44030:9;44132:7;44128:987;;;44184:25;:29;44210:2;44184:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;44233:1;44217:13;;:17;44184:50;44180:786;;;44262:34;44292:3;44262:25;44273:13;;44262:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;44255:41;;44365:13;;44345:16;;44338:4;:23;;;;:::i;:::-;44337:41;;;;:::i;:::-;44315:18;;:63;;;;;;;:::i;:::-;;;;;;;;44447:13;;44427:16;;44420:4;:23;;;;:::i;:::-;44419:41;;;;:::i;:::-;44397:18;;:63;;;;;;;:::i;:::-;;;;;;;;44525:13;;44507:14;;44500:4;:21;;;;:::i;:::-;44499:39;;;;:::i;:::-;44479:16;;:59;;;;;;;:::i;:::-;;;;;;;;44180:786;;;44602:25;:31;44628:4;44602:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;44652:1;44637:12;;:16;44602:51;44598:368;;;44681:33;44710:3;44681:24;44692:12;;44681:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;44674:40;;44782:12;;44763:15;;44756:4;:22;;;;:::i;:::-;44755:39;;;;:::i;:::-;44733:18;;:61;;;;;;;:::i;:::-;;;;;;;;44862:12;;44843:15;;44836:4;:22;;;;:::i;:::-;44835:39;;;;:::i;:::-;44813:18;;:61;;;;;;;:::i;:::-;;;;;;;;44938:12;;44921:13;;44914:4;:20;;;;:::i;:::-;44913:37;;;;:::i;:::-;44893:16;;:57;;;;;;;:::i;:::-;;;;;;;;44598:368;44180:786;44993:1;44986:4;:8;44982:91;;;45015:42;45031:4;45045;45052;45015:15;:42::i;:::-;44982:91;45099:4;45089:14;;;;;:::i;:::-;;;44128:987;45127:33;45143:4;45149:2;45153:6;45127:15;:33::i;:::-;40497:4671;;;;40387:4781;;;;:::o;3371:191::-;3445:16;3464:6;;;;;;;;;;;3445:25;;3490:8;3481:6;;:17;;;;;;;;;;;;;;;;;;3545:8;3514:40;;3535:8;3514:40;;;;;;;;;;;;3434:128;3371:191;:::o;39616:188::-;39733:5;39699:25;:31;39725:4;39699:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39790:5;39756:40;;39784:4;39756:40;;;;;;;;;;;;39616:188;;:::o;14454:834::-;14598:1;14582:18;;:4;:18;;;14574:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14675:1;14661:16;;:2;:16;;;14653:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14730:38;14751:4;14757:2;14761:6;14730:20;:38::i;:::-;14781:16;14800:9;:15;14810:4;14800:15;;;;;;;;;;;;;;;;14781:34;;14849:6;14834:11;:21;;14826:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;14966:6;14952:11;:20;14934:9;:15;14944:4;14934:15;;;;;;;;;;;;;;;:38;;;;15169:6;15152:9;:13;15162:2;15152:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15219:2;15204:26;;15213:4;15204:26;;;15223:6;15204:26;;;;;;:::i;:::-;;;;;;;;15243:37;15263:4;15269:2;15273:6;15243:19;:37::i;:::-;14563:725;14454:834;;;:::o;45176:1909::-;45215:20;45238:24;45256:4;45238:9;:24::i;:::-;45215:47;;45273:22;45366:16;;45332:18;;45298;;:52;;;;:::i;:::-;:84;;;;:::i;:::-;45273:109;;45418:1;45399:15;:20;:46;;;;45444:1;45423:17;:22;45399:46;45395:85;;;45462:7;;;;45395:85;45535:2;45514:18;;:23;;;;:::i;:::-;45496:15;:41;45492:115;;;45593:2;45572:18;;:23;;;;:::i;:::-;45554:41;;45492:115;45619:20;45716:1;45696:17;45661:18;;45643:15;:36;;;;:::i;:::-;45642:71;;;;:::i;:::-;:75;;;;:::i;:::-;45619:98;;45728:24;45755:36;45775:15;45755;:19;;:36;;;;:::i;:::-;45728:63;;45804:23;32487:42;45830:22;;;45861:4;45830:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45804:63;;45880:66;45897:4;45912:11;;;;;;;;;;;45926:19;45880:8;:66::i;:::-;45957:11;;;;;;;;;;;:22;;;45980:19;45957:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46013:16;46032:61;46074:18;32487:42;46032:22;;;46063:4;46032:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;:61;;;;:::i;:::-;46013:80;;46106:21;46130:58;46170:17;46130:35;46146:18;;46130:11;:15;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;46106:82;;46199:19;46221:56;46259:17;46221:33;46237:16;;46221:11;:15;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;46199:78;;46288:21;46345:14;46326:16;46312:11;:30;;;;:::i;:::-;:47;;;;:::i;:::-;46288:71;;46393:1;46372:18;:22;;;;46426:1;46405:18;:22;;;;46457:1;46438:16;:20;;;;32487:42;46471:21;;;46493:15;;;;;;;;;;;46510:16;46471:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46562:1;46544:15;:19;:43;;;;;46586:1;46567:16;:20;46544:43;46540:450;;;46604:62;46621:4;46636:11;;;;;;;;;;;46650:15;46604:8;:62::i;:::-;32487:42;46681:20;;;46710:11;;;;;;;;;;;46724:16;46681:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46758:11;;;;;;;;;;;:24;;;46783:15;46800:16;46758:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46839:139;46872:19;46910:16;46945:18;;46839:139;;;;;;;;:::i;:::-;;;;;;;;46540:450;32487:42;47002:21;;;47024:13;;;;;;;;;;;32487:42;47039:22;;;47070:4;47039:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47002:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45204:1881;;;;;;;;;45176:1909;:::o;23582:89::-;23634:4;23662:1;23658;:5;;;;:::i;:::-;23651:12;;23582:89;;;;:::o;23972:::-;24024:4;24052:1;24048;:5;;;;:::i;:::-;24041:12;;23972:89;;;;:::o;19272:122::-;;;;:::o;19998:121::-;;;;:::o;23234:89::-;23286:4;23314:1;23310;:5;;;;:::i;:::-;23303:12;;23234:89;;;;:::o;88:117:1:-;197:1;194;187: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:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:246::-;1537:1;1547:113;1561:6;1558:1;1555:13;1547:113;;;1646:1;1641:3;1637:11;1631:18;1627:1;1622:3;1618:11;1611:39;1583:2;1580:1;1576:10;1571:15;;1547:113;;;1694:1;1685:6;1680:3;1676:16;1669:27;1518:184;1456:246;;;:::o;1708:102::-;1749:6;1800:2;1796:7;1791:2;1784:5;1780:14;1776:28;1766:38;;1708:102;;;:::o;1816:377::-;1904:3;1932:39;1965:5;1932:39;:::i;:::-;1987:71;2051:6;2046:3;1987:71;:::i;:::-;1980:78;;2067:65;2125:6;2120:3;2113:4;2106:5;2102:16;2067:65;:::i;:::-;2157:29;2179:6;2157:29;:::i;:::-;2152:3;2148:39;2141:46;;1908:285;1816:377;;;;:::o;2199:313::-;2312:4;2350:2;2339:9;2335:18;2327:26;;2399:9;2393:4;2389:20;2385:1;2374:9;2370:17;2363:47;2427:78;2500:4;2491:6;2427:78;:::i;:::-;2419:86;;2199:313;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:147::-;6924:9;6957:37;6988:5;6957:37;:::i;:::-;6944:50;;6853:147;;;:::o;7006:173::-;7114:58;7166:5;7114:58;:::i;:::-;7109:3;7102:71;7006:173;;:::o;7185:264::-;7299:4;7337:2;7326:9;7322:18;7314:26;;7350:92;7439:1;7428:9;7424:17;7415:6;7350:92;:::i;:::-;7185:264;;;;:::o;7455:116::-;7525:21;7540:5;7525:21;:::i;:::-;7518:5;7515:32;7505:60;;7561:1;7558;7551:12;7505:60;7455:116;:::o;7577:133::-;7620:5;7658:6;7645:20;7636:29;;7674:30;7698:5;7674:30;:::i;:::-;7577:133;;;;:::o;7716:468::-;7781:6;7789;7838:2;7826:9;7817:7;7813:23;7809:32;7806:119;;;7844:79;;:::i;:::-;7806:119;7964:1;7989:53;8034:7;8025:6;8014:9;8010:22;7989:53;:::i;:::-;7979:63;;7935:117;8091:2;8117:50;8159:7;8150:6;8139:9;8135:22;8117:50;:::i;:::-;8107:60;;8062:115;7716:468;;;;;:::o;8190:323::-;8246:6;8295:2;8283:9;8274:7;8270:23;8266:32;8263:119;;;8301:79;;:::i;:::-;8263:119;8421:1;8446:50;8488:7;8479:6;8468:9;8464:22;8446:50;:::i;:::-;8436:60;;8392:114;8190:323;;;;:::o;8519:474::-;8587:6;8595;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8897:2;8923:53;8968:7;8959:6;8948:9;8944:22;8923:53;:::i;:::-;8913:63;;8868:118;8519:474;;;;;:::o;8999:180::-;9047:77;9044:1;9037:88;9144:4;9141:1;9134:15;9168:4;9165:1;9158:15;9185:320;9229:6;9266:1;9260:4;9256:12;9246:22;;9313:1;9307:4;9303:12;9334:18;9324:81;;9390:4;9382:6;9378:17;9368:27;;9324:81;9452:2;9444:6;9441:14;9421:18;9418:38;9415:84;;9471:18;;:::i;:::-;9415:84;9236:269;9185:320;;;:::o;9511:180::-;9559:77;9556:1;9549:88;9656:4;9653:1;9646:15;9680:4;9677:1;9670:15;9697:410;9737:7;9760:20;9778:1;9760:20;:::i;:::-;9755:25;;9794:20;9812:1;9794:20;:::i;:::-;9789:25;;9849:1;9846;9842:9;9871:30;9889:11;9871:30;:::i;:::-;9860:41;;10050:1;10041:7;10037:15;10034:1;10031:22;10011:1;10004:9;9984:83;9961:139;;10080:18;;:::i;:::-;9961:139;9745:362;9697:410;;;;:::o;10113:180::-;10161:77;10158:1;10151:88;10258:4;10255:1;10248:15;10282:4;10279:1;10272:15;10299:185;10339:1;10356:20;10374:1;10356:20;:::i;:::-;10351:25;;10390:20;10408:1;10390:20;:::i;:::-;10385:25;;10429:1;10419:35;;10434:18;;:::i;:::-;10419:35;10476:1;10473;10469:9;10464:14;;10299:185;;;;:::o;10490:234::-;10630:34;10626:1;10618:6;10614:14;10607:58;10699:17;10694:2;10686:6;10682:15;10675:42;10490:234;:::o;10730:366::-;10872:3;10893:67;10957:2;10952:3;10893:67;:::i;:::-;10886:74;;10969:93;11058:3;10969:93;:::i;:::-;11087:2;11082:3;11078:12;11071:19;;10730:366;;;:::o;11102:419::-;11268:4;11306:2;11295:9;11291:18;11283:26;;11355:9;11349:4;11345:20;11341:1;11330:9;11326:17;11319:47;11383:131;11509:4;11383:131;:::i;:::-;11375:139;;11102:419;;;:::o;11527:191::-;11567:3;11586:20;11604:1;11586:20;:::i;:::-;11581:25;;11620:20;11638:1;11620:20;:::i;:::-;11615:25;;11663:1;11660;11656:9;11649:16;;11684:3;11681:1;11678:10;11675:36;;;11691:18;;:::i;:::-;11675:36;11527:191;;;;:::o;11724:174::-;11864:26;11860:1;11852:6;11848:14;11841:50;11724:174;:::o;11904:366::-;12046:3;12067:67;12131:2;12126:3;12067:67;:::i;:::-;12060:74;;12143:93;12232:3;12143:93;:::i;:::-;12261:2;12256:3;12252:12;12245:19;;11904:366;;;:::o;12276:419::-;12442:4;12480:2;12469:9;12465:18;12457:26;;12529:9;12523:4;12519:20;12515:1;12504:9;12500:17;12493:47;12557:131;12683:4;12557:131;:::i;:::-;12549:139;;12276:419;;;:::o;12701:244::-;12841:34;12837:1;12829:6;12825:14;12818:58;12910:27;12905:2;12897:6;12893:15;12886:52;12701:244;:::o;12951:366::-;13093:3;13114:67;13178:2;13173:3;13114:67;:::i;:::-;13107:74;;13190:93;13279:3;13190:93;:::i;:::-;13308:2;13303:3;13299:12;13292:19;;12951:366;;;:::o;13323:419::-;13489:4;13527:2;13516:9;13512:18;13504:26;;13576:9;13570:4;13566:20;13562:1;13551:9;13547:17;13540:47;13604:131;13730:4;13604:131;:::i;:::-;13596:139;;13323:419;;;:::o;13748:224::-;13888:34;13884:1;13876:6;13872:14;13865:58;13957:7;13952:2;13944:6;13940:15;13933:32;13748:224;:::o;13978:366::-;14120:3;14141:67;14205:2;14200:3;14141:67;:::i;:::-;14134:74;;14217:93;14306:3;14217:93;:::i;:::-;14335:2;14330:3;14326:12;14319:19;;13978:366;;;:::o;14350:419::-;14516:4;14554:2;14543:9;14539:18;14531:26;;14603:9;14597:4;14593:20;14589:1;14578:9;14574:17;14567:47;14631:131;14757:4;14631:131;:::i;:::-;14623:139;;14350:419;;;:::o;14775:223::-;14915:34;14911:1;14903:6;14899:14;14892:58;14984:6;14979:2;14971:6;14967:15;14960:31;14775:223;:::o;15004:366::-;15146:3;15167:67;15231:2;15226:3;15167:67;:::i;:::-;15160:74;;15243:93;15332:3;15243:93;:::i;:::-;15361:2;15356:3;15352:12;15345:19;;15004:366;;;:::o;15376:419::-;15542:4;15580:2;15569:9;15565:18;15557:26;;15629:9;15623:4;15619:20;15615:1;15604:9;15600:17;15593:47;15657:131;15783:4;15657:131;:::i;:::-;15649:139;;15376:419;;;:::o;15801:240::-;15941:34;15937:1;15929:6;15925:14;15918:58;16010:23;16005:2;15997:6;15993:15;15986:48;15801:240;:::o;16047:366::-;16189:3;16210:67;16274:2;16269:3;16210:67;:::i;:::-;16203:74;;16286:93;16375:3;16286:93;:::i;:::-;16404:2;16399:3;16395:12;16388:19;;16047:366;;;:::o;16419:419::-;16585:4;16623:2;16612:9;16608:18;16600:26;;16672:9;16666:4;16662:20;16658:1;16647:9;16643:17;16636:47;16700:131;16826:4;16700:131;:::i;:::-;16692:139;;16419:419;;;:::o;16844:239::-;16984:34;16980:1;16972:6;16968:14;16961:58;17053:22;17048:2;17040:6;17036:15;17029:47;16844:239;:::o;17089:366::-;17231:3;17252:67;17316:2;17311:3;17252:67;:::i;:::-;17245:74;;17328:93;17417:3;17328:93;:::i;:::-;17446:2;17441:3;17437:12;17430:19;;17089:366;;;:::o;17461:419::-;17627:4;17665:2;17654:9;17650:18;17642:26;;17714:9;17708:4;17704:20;17700:1;17689:9;17685:17;17678:47;17742:131;17868:4;17742:131;:::i;:::-;17734:139;;17461:419;;;:::o;17886:225::-;18026:34;18022:1;18014:6;18010:14;18003:58;18095:8;18090:2;18082:6;18078:15;18071:33;17886:225;:::o;18117:366::-;18259:3;18280:67;18344:2;18339:3;18280:67;:::i;:::-;18273:74;;18356:93;18445:3;18356:93;:::i;:::-;18474:2;18469:3;18465:12;18458:19;;18117:366;;;:::o;18489:419::-;18655:4;18693:2;18682:9;18678:18;18670:26;;18742:9;18736:4;18732:20;18728:1;18717:9;18713:17;18706:47;18770:131;18896:4;18770:131;:::i;:::-;18762:139;;18489:419;;;:::o;18914:182::-;19054:34;19050:1;19042:6;19038:14;19031:58;18914:182;:::o;19102:366::-;19244:3;19265:67;19329:2;19324:3;19265:67;:::i;:::-;19258:74;;19341:93;19430:3;19341:93;:::i;:::-;19459:2;19454:3;19450:12;19443:19;;19102:366;;;:::o;19474:419::-;19640:4;19678:2;19667:9;19663:18;19655:26;;19727:9;19721:4;19717:20;19713:1;19702:9;19698:17;19691:47;19755:131;19881:4;19755:131;:::i;:::-;19747:139;;19474:419;;;:::o;19899:223::-;20039:34;20035:1;20027:6;20023:14;20016:58;20108:6;20103:2;20095:6;20091:15;20084:31;19899:223;:::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:221::-;21065:34;21061:1;21053:6;21049:14;21042:58;21134:4;21129:2;21121:6;21117:15;21110:29;20925:221;:::o;21152:366::-;21294:3;21315:67;21379:2;21374:3;21315:67;:::i;:::-;21308:74;;21391:93;21480:3;21391:93;:::i;:::-;21509:2;21504:3;21500:12;21493:19;;21152:366;;;:::o;21524:419::-;21690:4;21728:2;21717:9;21713:18;21705:26;;21777:9;21771:4;21767:20;21763:1;21752:9;21748:17;21741:47;21805:131;21931:4;21805:131;:::i;:::-;21797:139;;21524:419;;;:::o;21949:179::-;22089:31;22085:1;22077:6;22073:14;22066:55;21949:179;:::o;22134:366::-;22276:3;22297:67;22361:2;22356:3;22297:67;:::i;:::-;22290:74;;22373:93;22462:3;22373:93;:::i;:::-;22491:2;22486:3;22482:12;22475:19;;22134:366;;;:::o;22506:419::-;22672:4;22710:2;22699:9;22695:18;22687:26;;22759:9;22753:4;22749:20;22745:1;22734:9;22730:17;22723:47;22787:131;22913:4;22787:131;:::i;:::-;22779:139;;22506:419;;;:::o;22931:224::-;23071:34;23067:1;23059:6;23055:14;23048:58;23140:7;23135:2;23127:6;23123:15;23116:32;22931:224;:::o;23161:366::-;23303:3;23324:67;23388:2;23383:3;23324:67;:::i;:::-;23317:74;;23400:93;23489:3;23400:93;:::i;:::-;23518:2;23513:3;23509:12;23502:19;;23161:366;;;:::o;23533:419::-;23699:4;23737:2;23726:9;23722:18;23714:26;;23786:9;23780:4;23776:20;23772:1;23761:9;23757:17;23750:47;23814:131;23940:4;23814:131;:::i;:::-;23806:139;;23533:419;;;:::o;23958:222::-;24098:34;24094:1;24086:6;24082:14;24075:58;24167:5;24162:2;24154:6;24150:15;24143:30;23958:222;:::o;24186:366::-;24328:3;24349:67;24413:2;24408:3;24349:67;:::i;:::-;24342:74;;24425:93;24514:3;24425:93;:::i;:::-;24543:2;24538:3;24534:12;24527:19;;24186:366;;;:::o;24558:419::-;24724:4;24762:2;24751:9;24747:18;24739:26;;24811:9;24805:4;24801:20;24797:1;24786:9;24782:17;24775:47;24839:131;24965:4;24839:131;:::i;:::-;24831:139;;24558:419;;;:::o;24983:172::-;25123:24;25119:1;25111:6;25107:14;25100:48;24983:172;:::o;25161:366::-;25303:3;25324:67;25388:2;25383:3;25324:67;:::i;:::-;25317:74;;25400:93;25489:3;25400:93;:::i;:::-;25518:2;25513:3;25509:12;25502:19;;25161:366;;;:::o;25533:419::-;25699:4;25737:2;25726:9;25722:18;25714:26;;25786:9;25780:4;25776:20;25772:1;25761:9;25757:17;25750:47;25814:131;25940:4;25814:131;:::i;:::-;25806:139;;25533:419;;;:::o;25958:297::-;26098:34;26094:1;26086:6;26082:14;26075:58;26167:34;26162:2;26154:6;26150:15;26143:59;26236:11;26231:2;26223:6;26219:15;26212:36;25958:297;:::o;26261:366::-;26403:3;26424:67;26488:2;26483:3;26424:67;:::i;:::-;26417:74;;26500:93;26589:3;26500:93;:::i;:::-;26618:2;26613:3;26609:12;26602:19;;26261:366;;;:::o;26633:419::-;26799:4;26837:2;26826:9;26822:18;26814:26;;26886:9;26880:4;26876:20;26872:1;26861:9;26857:17;26850:47;26914:131;27040:4;26914:131;:::i;:::-;26906:139;;26633:419;;;:::o;27058:240::-;27198:34;27194:1;27186:6;27182:14;27175:58;27267:23;27262:2;27254:6;27250:15;27243:48;27058:240;:::o;27304:366::-;27446:3;27467:67;27531:2;27526:3;27467:67;:::i;:::-;27460:74;;27543:93;27632:3;27543:93;:::i;:::-;27661:2;27656:3;27652:12;27645:19;;27304:366;;;:::o;27676:419::-;27842:4;27880:2;27869:9;27865:18;27857:26;;27929:9;27923:4;27919:20;27915:1;27904:9;27900:17;27893:47;27957:131;28083:4;27957:131;:::i;:::-;27949:139;;27676:419;;;:::o;28101:169::-;28241:21;28237:1;28229:6;28225:14;28218:45;28101:169;:::o;28276:366::-;28418:3;28439:67;28503:2;28498:3;28439:67;:::i;:::-;28432:74;;28515:93;28604:3;28515:93;:::i;:::-;28633:2;28628:3;28624:12;28617:19;;28276:366;;;:::o;28648:419::-;28814:4;28852:2;28841:9;28837:18;28829:26;;28901:9;28895:4;28891:20;28887:1;28876:9;28872:17;28865:47;28929:131;29055:4;28929:131;:::i;:::-;28921:139;;28648:419;;;:::o;29073:241::-;29213:34;29209:1;29201:6;29197:14;29190:58;29282:24;29277:2;29269:6;29265:15;29258:49;29073:241;:::o;29320:366::-;29462:3;29483:67;29547:2;29542:3;29483:67;:::i;:::-;29476:74;;29559:93;29648:3;29559:93;:::i;:::-;29677:2;29672:3;29668:12;29661:19;;29320:366;;;:::o;29692:419::-;29858:4;29896:2;29885:9;29881:18;29873:26;;29945:9;29939:4;29935:20;29931:1;29920:9;29916:17;29909:47;29973:131;30099:4;29973:131;:::i;:::-;29965:139;;29692:419;;;:::o;30117:194::-;30157:4;30177:20;30195:1;30177:20;:::i;:::-;30172:25;;30211:20;30229:1;30211:20;:::i;:::-;30206:25;;30255:1;30252;30248:9;30240:17;;30279:1;30273:4;30270:11;30267:37;;;30284:18;;:::i;:::-;30267:37;30117:194;;;;:::o;30317:225::-;30457:34;30453:1;30445:6;30441:14;30434:58;30526:8;30521:2;30513:6;30509:15;30502:33;30317:225;:::o;30548:366::-;30690:3;30711:67;30775:2;30770:3;30711:67;:::i;:::-;30704:74;;30787:93;30876:3;30787:93;:::i;:::-;30905:2;30900:3;30896:12;30889:19;;30548:366;;;:::o;30920:419::-;31086:4;31124:2;31113:9;31109:18;31101:26;;31173:9;31167:4;31163:20;31159:1;31148:9;31144:17;31137:47;31201:131;31327:4;31201:131;:::i;:::-;31193:139;;30920:419;;;:::o;31345:143::-;31402:5;31433:6;31427:13;31418:22;;31449:33;31476:5;31449:33;:::i;:::-;31345:143;;;;:::o;31494:351::-;31564:6;31613:2;31601:9;31592:7;31588:23;31584:32;31581:119;;;31619:79;;:::i;:::-;31581:119;31739:1;31764:64;31820:7;31811:6;31800:9;31796:22;31764:64;:::i;:::-;31754:74;;31710:128;31494:351;;;;:::o;31851:332::-;31972:4;32010:2;31999:9;31995:18;31987:26;;32023:71;32091:1;32080:9;32076:17;32067:6;32023:71;:::i;:::-;32104:72;32172:2;32161:9;32157:18;32148:6;32104:72;:::i;:::-;31851:332;;;;;:::o;32189:137::-;32243:5;32274:6;32268:13;32259:22;;32290:30;32314:5;32290:30;:::i;:::-;32189:137;;;;:::o;32332:345::-;32399:6;32448:2;32436:9;32427:7;32423:23;32419:32;32416:119;;;32454:79;;:::i;:::-;32416:119;32574:1;32599:61;32652:7;32643:6;32632:9;32628:22;32599:61;:::i;:::-;32589:71;;32545:125;32332:345;;;;:::o;32683:332::-;32804:4;32842:2;32831:9;32827:18;32819:26;;32855:71;32923:1;32912:9;32908:17;32899:6;32855:71;:::i;:::-;32936:72;33004:2;32993:9;32989:18;32980:6;32936:72;:::i;:::-;32683:332;;;;;:::o;33021:442::-;33170:4;33208:2;33197:9;33193:18;33185:26;;33221:71;33289:1;33278:9;33274:17;33265:6;33221:71;:::i;:::-;33302:72;33370:2;33359:9;33355:18;33346:6;33302:72;:::i;:::-;33384;33452:2;33441:9;33437:18;33428:6;33384:72;:::i;:::-;33021:442;;;;;;:::o

Swarm Source

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