ETH Price: $2,615.08 (+0.58%)
Gas: 3 Gwei

Token

MONGBURN (MONGB)
 

Overview

Max Total Supply

1,000,000,000 MONGB

Holders

81

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,037,081.165771597653792362 MONGB

Value
$0.00
0x4dd6c671f592dd849b3cb0b05a67662e7a20bcb5
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:
MONGBURN

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

/*
 *
 * MONGBURN ($MONGB)
 *
 * Website: https://www.mongburn.info/
 * Telegram: https://t.me/BURNMONG
 *
 */

// 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 IMONGBSwapManager {
    function swapToMong(uint tokenAmount) external;
}

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public constant MONG = address(0x1ce270557C1f68Cfb577b856766310Bf8B47FD9C);

    bool private swapping;

    address public taxWallet;

    IMONGBSwapManager public swapManager;
    uint public maxTransactionAmount;
    uint public swapTokensAtAmount;
    uint public maxWallet;

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

    // 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 buyBurnFee;

    uint public sellTotalFees;
    uint public sellTaxFee;

    uint public tokensForBurn;
    uint public tokensForTax;

    // exclude 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 TaxWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    constructor() ERC20("MONGBURN", "MONGB") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

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

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

        uint totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = totalSupply / 100;
        maxWallet = totalSupply * 3 / 200;
        swapTokensAtAmount = totalSupply / 1000;

        buyBurnFee = 5;
        buyTotalFees = buyBurnFee;

        sellTaxFee = 5;
        sellTotalFees = sellTaxFee;

        taxWallet = address(0xd27aBBffa8a7E3b2E9B2BB399389b543c77ef764);

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

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(taxWallet, 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;
        launchTimestamp = block.timestamp;
    }

    // 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() * 5) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.5%"
        );
        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 excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function updateSwapManager(address newManager) external onlyOwner {
        emit SwapManagerUpdated(newManager, address(swapManager));
        swapManager = IMONGBSwapManager(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 recoverTokens(address _token) external onlyOwner {
        require(
            _token != address(this),
            "Token can not be MONGB"
        );

        IERC20(_token).transfer(owner(), IERC20(_token).balanceOf(address(this)));
    }

    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 updateTaxWallet(address newTaxWallet)
        external
        onlyOwner
    {
        emit TaxWalletUpdated(newTaxWallet, taxWallet);
        taxWallet = newTaxWallet;
    }

    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) {
                if (block.timestamp.sub(launchTimestamp) < 2 hours) {
                    fees = amount.mul(20).div(100);
                } else {
                    fees = amount.mul(sellTotalFees).div(100);
                }
                tokensForTax += (fees * sellTaxFee) / sellTotalFees;
            }

            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForBurn += (fees * buyBurnFee) / 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 = tokensForBurn + tokensForTax;

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

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

        uint amountToSwapForMong = contractBalance;
        uint initialMongBalance = IERC20(MONG).balanceOf(address(this));

        _approve(address(this), address(swapManager), amountToSwapForMong);
        swapManager.swapToMong(amountToSwapForMong);

        uint mongBalance = IERC20(MONG).balanceOf(address(this)).sub(initialMongBalance);
        uint mongForTax = mongBalance.mul(tokensForTax).div(totalTokensToSwap);
        uint mongForBurn = mongBalance.sub(mongForTax);

        tokensForBurn = 0;
        tokensForTax = 0;

        IERC20(MONG).transfer(taxWallet, mongForTax);
        IERC20(MONG).transfer(deadAddress, mongForBurn);
    }
}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"mongReceived","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"TaxWalletUpdated","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":[],"name":"MONG","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"buyBurnFee","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":"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":"launchTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"_token","type":"address"}],"name":"recoverTokens","outputs":[],"stateMutability":"nonpayable","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":"sellTaxFee","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 IMONGBSwapManager","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":"taxWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTax","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":"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":[{"internalType":"address","name":"newTaxWallet","type":"address"}],"name":"updateTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600881526020017f4d4f4e474255524e0000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d4f4e47420000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000c26565b5080600490816200010d919062000c26565b5050506200013062000124620004e560201b60201c565b620004ed60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c816001620005b360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000204919062000d77565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630731ce270557c1f68cfb577b856766310bf8b47fd9c6040518363ffffffff1660e01b81526004016200025492919062000dba565b6020604051808303816000875af115801562000274573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029a919062000d77565b90508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620002e3816001620005b360201b60201c565b620002f68160016200061e60201b60201c565b60006b033b2e3c9fd0803ce8000000905060648162000316919062000e45565b60088190555060c86003826200032d919062000e7d565b62000339919062000e45565b600a819055506103e8816200034f919062000e45565b6009819055506005601081905550601054600f81905550600560128190555060125460118190555073d27abbffa8a7e3b2e9b2bb399389b543c77ef764600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ee620003e0620006bf60201b60201c565b6001620006e960201b60201c565b62000401306001620006e960201b60201c565b6200041661dead6001620006e960201b60201c565b6200044b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006e960201b60201c565b6200046d6200045f620006bf60201b60201c565b6001620005b360201b60201c565b62000480306001620005b360201b60201c565b6200049561dead6001620005b360201b60201c565b620004ca600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005b360201b60201c565b620004dc3382620007a460201b60201c565b50505062001060565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005c36200091160201b60201c565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006f96200091160201b60201c565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000798919062000ee5565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000816576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200080d9062000f63565b60405180910390fd5b6200082a60008383620009a260201b60201c565b80600260008282546200083e919062000f85565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008f1919062000fd1565b60405180910390a36200090d60008383620009a760201b60201c565b5050565b62000921620004e560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000947620006bf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620009a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000997906200103e565b60405180910390fd5b565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a2e57607f821691505b60208210810362000a445762000a43620009e6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000aae7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a6f565b62000aba868362000a6f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b0762000b0162000afb8462000ad2565b62000adc565b62000ad2565b9050919050565b6000819050919050565b62000b238362000ae6565b62000b3b62000b328262000b0e565b84845462000a7c565b825550505050565b600090565b62000b5262000b43565b62000b5f81848462000b18565b505050565b5b8181101562000b875762000b7b60008262000b48565b60018101905062000b65565b5050565b601f82111562000bd65762000ba08162000a4a565b62000bab8462000a5f565b8101602085101562000bbb578190505b62000bd362000bca8562000a5f565b83018262000b64565b50505b505050565b600082821c905092915050565b600062000bfb6000198460080262000bdb565b1980831691505092915050565b600062000c16838362000be8565b9150826002028217905092915050565b62000c3182620009ac565b67ffffffffffffffff81111562000c4d5762000c4c620009b7565b5b62000c59825462000a15565b62000c6682828562000b8b565b600060209050601f83116001811462000c9e576000841562000c89578287015190505b62000c95858262000c08565b86555062000d05565b601f19841662000cae8662000a4a565b60005b8281101562000cd85784890151825560018201915060208501945060208101905062000cb1565b8683101562000cf8578489015162000cf4601f89168262000be8565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d3f8262000d12565b9050919050565b62000d518162000d32565b811462000d5d57600080fd5b50565b60008151905062000d718162000d46565b92915050565b60006020828403121562000d905762000d8f62000d0d565b5b600062000da08482850162000d60565b91505092915050565b62000db48162000d32565b82525050565b600060408201905062000dd1600083018562000da9565b62000de0602083018462000da9565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e528262000ad2565b915062000e5f8362000ad2565b92508262000e725762000e7162000de7565b5b828204905092915050565b600062000e8a8262000ad2565b915062000e978362000ad2565b925082820262000ea78162000ad2565b9150828204841483151762000ec15762000ec062000e16565b5b5092915050565b60008115159050919050565b62000edf8162000ec8565b82525050565b600060208201905062000efc600083018462000ed4565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f4b601f8362000f02565b915062000f588262000f13565b602082019050919050565b6000602082019050818103600083015262000f7e8162000f3c565b9050919050565b600062000f928262000ad2565b915062000f9f8362000ad2565b925082820190508082111562000fba5762000fb962000e16565b5b92915050565b62000fcb8162000ad2565b82525050565b600060208201905062000fe8600083018462000fc0565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200102660208362000f02565b9150620010338262000fee565b602082019050919050565b60006020820190508181036000830152620010598162001017565b9050919050565b60805160a0516140ee6200109b60003960008181610cfa015281816112240152611dcd015260008181610b900152611d7501526140ee6000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c8063751039fc11610182578063c18bc195116100e9578063e2f45605116100a2578063f2fde38b1161007c578063f2fde38b146108cb578063f8a25a94146108e7578063f8b45b0514610905578063fe02721e14610923576102d6565b8063e2f4560514610871578063e71dc3f51461088f578063e884f260146108ad576102d6565b8063c18bc1951461079b578063c876d0b9146107b7578063c8c8ebe4146107d5578063d257b34f146107f3578063d85ba06314610823578063dd62ed3e14610841576102d6565b80639a7a23d61161013b5780639a7a23d6146106b5578063a457c2d7146106d1578063a9059cbb14610701578063b62496f514610731578063bbc0c74214610761578063c02466681461077f576102d6565b8063751039fc146106195780637571336a146106375780638a8c523c146106535780638da5cb5b1461065d578063924de9b71461067b57806395d89b4114610697576102d6565b806339509351116102415780636a486a8e116101fa578063709d039d116101d4578063709d039d146105a557806370a08231146105c3578063715018a6146105f357806374c9f603146105fd576102d6565b80636a486a8e1461054b5780636d7adcad146105695780636ddd171314610587576102d6565b8063395093511461047557806349bd5a5e146104a55780634a62bb65146104c35780634c36fad7146104e15780634fbee193146104fd57806365cf7c9b1461052d576102d6565b80631d777856116102935780631d777856146103b1578063203e727e146103cf57806323b872dd146103eb57806327c8f8351461041b5780632dc0562d14610439578063313ce56714610457576102d6565b806306fdde03146102db578063095ea7b3146102f957806310d5de531461032957806316114acd146103595780631694505e1461037557806318160ddd14610393575b600080fd5b6102e3610941565b6040516102f09190612f3e565b60405180910390f35b610313600480360381019061030e9190612ff9565b6109d3565b6040516103209190613054565b60405180910390f35b610343600480360381019061033e919061306f565b6109f6565b6040516103509190613054565b60405180910390f35b610373600480360381019061036e919061306f565b610a16565b005b61037d610b8e565b60405161038a91906130fb565b60405180910390f35b61039b610bb2565b6040516103a89190613125565b60405180910390f35b6103b9610bbc565b6040516103c69190613125565b60405180910390f35b6103e960048036038101906103e49190613140565b610bc2565b005b6104056004803603810190610400919061316d565b610c5d565b6040516104129190613054565b60405180910390f35b610423610c8c565b60405161043091906131cf565b60405180910390f35b610441610c92565b60405161044e91906131cf565b60405180910390f35b61045f610cb8565b60405161046c9190613206565b60405180910390f35b61048f600480360381019061048a9190612ff9565b610cc1565b60405161049c9190613054565b60405180910390f35b6104ad610cf8565b6040516104ba91906131cf565b60405180910390f35b6104cb610d1c565b6040516104d89190613054565b60405180910390f35b6104fb60048036038101906104f6919061306f565b610d2f565b005b6105176004803603810190610512919061306f565b610e0d565b6040516105249190613054565b60405180910390f35b610535610e63565b6040516105429190613125565b60405180910390f35b610553610e69565b6040516105609190613125565b60405180910390f35b610571610e6f565b60405161057e9190613125565b60405180910390f35b61058f610e75565b60405161059c9190613054565b60405180910390f35b6105ad610e88565b6040516105ba9190613242565b60405180910390f35b6105dd60048036038101906105d8919061306f565b610eae565b6040516105ea9190613125565b60405180910390f35b6105fb610ef6565b005b6106176004803603810190610612919061306f565b610f0a565b005b610621610fd2565b60405161062e9190613054565b60405180910390f35b610651600480360381019061064c9190613289565b610ffe565b005b61065b611061565b005b610665611139565b60405161067291906131cf565b60405180910390f35b610695600480360381019061069091906132c9565b611163565b005b61069f611188565b6040516106ac9190612f3e565b60405180910390f35b6106cf60048036038101906106ca9190613289565b61121a565b005b6106eb60048036038101906106e69190612ff9565b6112be565b6040516106f89190613054565b60405180910390f35b61071b60048036038101906107169190612ff9565b611335565b6040516107289190613054565b60405180910390f35b61074b6004803603810190610746919061306f565b611358565b6040516107589190613054565b60405180910390f35b610769611378565b6040516107769190613054565b60405180910390f35b61079960048036038101906107949190613289565b61138b565b005b6107b560048036038101906107b09190613140565b61143c565b005b6107bf6114d7565b6040516107cc9190613054565b60405180910390f35b6107dd6114ea565b6040516107ea9190613125565b60405180910390f35b61080d60048036038101906108089190613140565b6114f0565b60405161081a9190613054565b60405180910390f35b61082b6115d1565b6040516108389190613125565b60405180910390f35b61085b600480360381019061085691906132f6565b6115d7565b6040516108689190613125565b60405180910390f35b61087961165e565b6040516108869190613125565b60405180910390f35b610897611664565b6040516108a49190613125565b60405180910390f35b6108b561166a565b6040516108c29190613054565b60405180910390f35b6108e560048036038101906108e0919061306f565b611696565b005b6108ef611719565b6040516108fc9190613125565b60405180910390f35b61090d61171f565b60405161091a9190613125565b60405180910390f35b61092b611725565b60405161093891906131cf565b60405180910390f35b60606003805461095090613365565b80601f016020809104026020016040519081016040528092919081815260200182805461097c90613365565b80156109c95780601f1061099e576101008083540402835291602001916109c9565b820191906000526020600020905b8154815290600101906020018083116109ac57829003601f168201915b5050505050905090565b6000806109de61173d565b90506109eb818585611745565b600191505092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b610a1e61190e565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a83906133e2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610ab0611139565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ae991906131cf565b602060405180830381865afa158015610b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2a9190613417565b6040518363ffffffff1660e01b8152600401610b47929190613444565b6020604051808303816000875af1158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190613482565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60135481565b610bca61190e565b670de0b6b3a76400006103e86005610be0610bb2565b610bea91906134de565b610bf4919061354f565b610bfe919061354f565b811015610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c37906135f2565b60405180910390fd5b670de0b6b3a764000081610c5491906134de565b60088190555050565b600080610c6861173d565b9050610c7585828561198c565b610c80858585611a18565b60019150509392505050565b61dead81565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b600080610ccc61173d565b9050610ced818585610cde85896115d7565b610ce89190613612565b611745565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b610d3761190e565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb3fd0123f0059326c0d3771de6b52f7cc07866caff01a05b16473ae87d382bf960405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610dff81600161138b565b610e0a816001610ffe565b50565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c5481565b60115481565b60145481565b600b60029054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610efe61190e565b610f086000612686565b565b610f1261190e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f849a2ad8ad386f1e9897e9e0a62d16771c675e4740986a16fb31bd8e1dde9c9760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610fdc61190e565b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61100661190e565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61106961190e565b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190613692565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555042600c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61116b61190e565b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461119790613365565b80601f01602080910402602001604051908101604052809291908181526020018280546111c390613365565b80156112105780601f106111e557610100808354040283529160200191611210565b820191906000526020600020905b8154815290600101906020018083116111f357829003601f168201915b5050505050905090565b61122261190e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790613724565b60405180910390fd5b6112ba828261274c565b5050565b6000806112c961173d565b905060006112d782866115d7565b90508381101561131c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611313906137b6565b60405180910390fd5b6113298286868403611745565b60019250505092915050565b60008061134061173d565b905061134d818585611a18565b600191505092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b61139361190e565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516114309190613054565b60405180910390a25050565b61144461190e565b670de0b6b3a76400006103e8600561145a610bb2565b61146491906134de565b61146e919061354f565b611478919061354f565b8110156114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190613848565b60405180910390fd5b670de0b6b3a7640000816114ce91906134de565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b60006114fa61190e565b620186a06001611508610bb2565b61151291906134de565b61151c919061354f565b82101561155e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611555906138da565b60405180910390fd5b6103e8600561156b610bb2565b61157591906134de565b61157f919061354f565b8211156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b89061396c565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60105481565b600061167461190e565b6000600e60006101000a81548160ff0219169083151502179055506001905090565b61169e61190e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361170d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611704906139fe565b60405180910390fd5b61171681612686565b50565b60125481565b600a5481565b731ce270557c1f68cfb577b856766310bf8b47fd9c81565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab90613a90565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90613b22565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119019190613125565b60405180910390a3505050565b61191661173d565b73ffffffffffffffffffffffffffffffffffffffff16611934611139565b73ffffffffffffffffffffffffffffffffffffffff161461198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198190613b8e565b60405180910390fd5b565b600061199884846115d7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611a125781811015611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb90613bfa565b60405180910390fd5b611a118484848403611745565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613c8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed90613d1e565b60405180910390fd5b60008103611b0f57611b0a838360006127ed565b612681565b600b60009054906101000a900460ff161561222857611b2c611139565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b9a5750611b6a611139565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611bd35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c0d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c265750600560149054906101000a900460ff16155b1561222757600b60019054906101000a900460ff16611d2057601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ce05750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690613d8a565b60405180910390fd5b5b600e60009054906101000a900460ff1615611f3e57611d3d611139565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611dc457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e1c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e725750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f3d5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef90613e42565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fe15750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120885760085481111561202b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202290613ed4565b60405180910390fd5b600a5461203783610eae565b826120429190613612565b1115612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a90613f40565b60405180910390fd5b612226565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561212b5750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561217a57600854811115612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90613fd2565b60405180910390fd5b612225565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661222457600a546121d783610eae565b826121e29190613612565b1115612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a90613f40565b60405180910390fd5b5b5b5b5b5b600061223330610eae565b9050600060095482101590508080156122585750600b60029054906101000a900460ff165b80156122715750600560149054906101000a900460ff16155b80156122c75750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561231d5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123735750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123b7576001600560146101000a81548160ff02191690831515021790555061239b612a63565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061246d5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561247757600090505b6000811561267157601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124da57506000601154115b1561258e57611c206124f7600c5442612e6290919063ffffffff16565b101561252b576125246064612516601488612e7890919063ffffffff16565b612e8e90919063ffffffff16565b9050612556565b612553606461254560115488612e7890919063ffffffff16565b612e8e90919063ffffffff16565b90505b6011546012548261256791906134de565b612571919061354f565b601460008282546125829190613612565b9250508190555061264d565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125e957506000600f54115b1561264c576126166064612608600f5488612e7890919063ffffffff16565b612e8e90919063ffffffff16565b9050600f546010548261262991906134de565b612633919061354f565b601360008282546126449190613612565b925050819055505b5b6000811115612662576126618730836127ed565b5b808561266e9190613ff2565b94505b61267c8787876127ed565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285390613c8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c290613d1e565b60405180910390fd5b6128d6838383612ea4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561295c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295390614098565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a4a9190613125565b60405180910390a3612a5d848484612ea9565b50505050565b6000612a6e30610eae565b90506000601454601354612a829190613612565b90506000821480612a935750600081145b15612a9f575050612e60565b6014600954612aae91906134de565b821115612ac7576014600954612ac491906134de565b91505b60008290506000731ce270557c1f68cfb577b856766310bf8b47fd9c73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b1b91906131cf565b602060405180830381865afa158015612b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5c9190613417565b9050612b8b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611745565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362df4a4b836040518263ffffffff1660e01b8152600401612be69190613125565b600060405180830381600087803b158015612c0057600080fd5b505af1158015612c14573d6000803e3d6000fd5b505050506000612cba82731ce270557c1f68cfb577b856766310bf8b47fd9c73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c6b91906131cf565b602060405180830381865afa158015612c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cac9190613417565b612e6290919063ffffffff16565b90506000612ce585612cd760145485612e7890919063ffffffff16565b612e8e90919063ffffffff16565b90506000612cfc8284612e6290919063ffffffff16565b905060006013819055506000601481905550731ce270557c1f68cfb577b856766310bf8b47fd9c73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401612d7f929190613444565b6020604051808303816000875af1158015612d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc29190613482565b50731ce270557c1f68cfb577b856766310bf8b47fd9c73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61dead836040518363ffffffff1660e01b8152600401612e14929190613444565b6020604051808303816000875af1158015612e33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e579190613482565b50505050505050505b565b60008183612e709190613ff2565b905092915050565b60008183612e8691906134de565b905092915050565b60008183612e9c919061354f565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ee8578082015181840152602081019050612ecd565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f1082612eae565b612f1a8185612eb9565b9350612f2a818560208601612eca565b612f3381612ef4565b840191505092915050565b60006020820190508181036000830152612f588184612f05565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f9082612f65565b9050919050565b612fa081612f85565b8114612fab57600080fd5b50565b600081359050612fbd81612f97565b92915050565b6000819050919050565b612fd681612fc3565b8114612fe157600080fd5b50565b600081359050612ff381612fcd565b92915050565b600080604083850312156130105761300f612f60565b5b600061301e85828601612fae565b925050602061302f85828601612fe4565b9150509250929050565b60008115159050919050565b61304e81613039565b82525050565b60006020820190506130696000830184613045565b92915050565b60006020828403121561308557613084612f60565b5b600061309384828501612fae565b91505092915050565b6000819050919050565b60006130c16130bc6130b784612f65565b61309c565b612f65565b9050919050565b60006130d3826130a6565b9050919050565b60006130e5826130c8565b9050919050565b6130f5816130da565b82525050565b600060208201905061311060008301846130ec565b92915050565b61311f81612fc3565b82525050565b600060208201905061313a6000830184613116565b92915050565b60006020828403121561315657613155612f60565b5b600061316484828501612fe4565b91505092915050565b60008060006060848603121561318657613185612f60565b5b600061319486828701612fae565b93505060206131a586828701612fae565b92505060406131b686828701612fe4565b9150509250925092565b6131c981612f85565b82525050565b60006020820190506131e460008301846131c0565b92915050565b600060ff82169050919050565b613200816131ea565b82525050565b600060208201905061321b60008301846131f7565b92915050565b600061322c826130c8565b9050919050565b61323c81613221565b82525050565b60006020820190506132576000830184613233565b92915050565b61326681613039565b811461327157600080fd5b50565b6000813590506132838161325d565b92915050565b600080604083850312156132a05761329f612f60565b5b60006132ae85828601612fae565b92505060206132bf85828601613274565b9150509250929050565b6000602082840312156132df576132de612f60565b5b60006132ed84828501613274565b91505092915050565b6000806040838503121561330d5761330c612f60565b5b600061331b85828601612fae565b925050602061332c85828601612fae565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061337d57607f821691505b6020821081036133905761338f613336565b5b50919050565b7f546f6b656e2063616e206e6f74206265204d4f4e474200000000000000000000600082015250565b60006133cc601683612eb9565b91506133d782613396565b602082019050919050565b600060208201905081810360008301526133fb816133bf565b9050919050565b60008151905061341181612fcd565b92915050565b60006020828403121561342d5761342c612f60565b5b600061343b84828501613402565b91505092915050565b600060408201905061345960008301856131c0565b6134666020830184613116565b9392505050565b60008151905061347c8161325d565b92915050565b60006020828403121561349857613497612f60565b5b60006134a68482850161346d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134e982612fc3565b91506134f483612fc3565b925082820261350281612fc3565b91508282048414831517613519576135186134af565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061355a82612fc3565b915061356583612fc3565b92508261357557613574613520565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b60006135dc602f83612eb9565b91506135e782613580565b604082019050919050565b6000602082019050818103600083015261360b816135cf565b9050919050565b600061361d82612fc3565b915061362883612fc3565b92508282019050808211156136405761363f6134af565b5b92915050565b7f4e65656420746f207365742073776170206d616e616765720000000000000000600082015250565b600061367c601883612eb9565b915061368782613646565b602082019050919050565b600060208201905081810360008301526136ab8161366f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061370e603983612eb9565b9150613719826136b2565b604082019050919050565b6000602082019050818103600083015261373d81613701565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006137a0602583612eb9565b91506137ab82613744565b604082019050919050565b600060208201905081810360008301526137cf81613793565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613832602483612eb9565b915061383d826137d6565b604082019050919050565b6000602082019050818103600083015261386181613825565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006138c4603583612eb9565b91506138cf82613868565b604082019050919050565b600060208201905081810360008301526138f3816138b7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613956603483612eb9565b9150613961826138fa565b604082019050919050565b6000602082019050818103600083015261398581613949565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139e8602683612eb9565b91506139f38261398c565b604082019050919050565b60006020820190508181036000830152613a17816139db565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613a7a602483612eb9565b9150613a8582613a1e565b604082019050919050565b60006020820190508181036000830152613aa981613a6d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b0c602283612eb9565b9150613b1782613ab0565b604082019050919050565b60006020820190508181036000830152613b3b81613aff565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b78602083612eb9565b9150613b8382613b42565b602082019050919050565b60006020820190508181036000830152613ba781613b6b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613be4601d83612eb9565b9150613bef82613bae565b602082019050919050565b60006020820190508181036000830152613c1381613bd7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c76602583612eb9565b9150613c8182613c1a565b604082019050919050565b60006020820190508181036000830152613ca581613c69565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d08602383612eb9565b9150613d1382613cac565b604082019050919050565b60006020820190508181036000830152613d3781613cfb565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613d74601683612eb9565b9150613d7f82613d3e565b602082019050919050565b60006020820190508181036000830152613da381613d67565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000613e2c604983612eb9565b9150613e3782613daa565b606082019050919050565b60006020820190508181036000830152613e5b81613e1f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613ebe603583612eb9565b9150613ec982613e62565b604082019050919050565b60006020820190508181036000830152613eed81613eb1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613f2a601383612eb9565b9150613f3582613ef4565b602082019050919050565b60006020820190508181036000830152613f5981613f1d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613fbc603683612eb9565b9150613fc782613f60565b604082019050919050565b60006020820190508181036000830152613feb81613faf565b9050919050565b6000613ffd82612fc3565b915061400883612fc3565b92508282039050818111156140205761401f6134af565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614082602683612eb9565b915061408d82614026565b604082019050919050565b600060208201905081810360008301526140b181614075565b905091905056fea2646970667358221220179fa12fd31b696a1d3f7c97357f58624cedb2c7fcf087453e2480822a79c66364736f6c63430008120033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102d65760003560e01c8063751039fc11610182578063c18bc195116100e9578063e2f45605116100a2578063f2fde38b1161007c578063f2fde38b146108cb578063f8a25a94146108e7578063f8b45b0514610905578063fe02721e14610923576102d6565b8063e2f4560514610871578063e71dc3f51461088f578063e884f260146108ad576102d6565b8063c18bc1951461079b578063c876d0b9146107b7578063c8c8ebe4146107d5578063d257b34f146107f3578063d85ba06314610823578063dd62ed3e14610841576102d6565b80639a7a23d61161013b5780639a7a23d6146106b5578063a457c2d7146106d1578063a9059cbb14610701578063b62496f514610731578063bbc0c74214610761578063c02466681461077f576102d6565b8063751039fc146106195780637571336a146106375780638a8c523c146106535780638da5cb5b1461065d578063924de9b71461067b57806395d89b4114610697576102d6565b806339509351116102415780636a486a8e116101fa578063709d039d116101d4578063709d039d146105a557806370a08231146105c3578063715018a6146105f357806374c9f603146105fd576102d6565b80636a486a8e1461054b5780636d7adcad146105695780636ddd171314610587576102d6565b8063395093511461047557806349bd5a5e146104a55780634a62bb65146104c35780634c36fad7146104e15780634fbee193146104fd57806365cf7c9b1461052d576102d6565b80631d777856116102935780631d777856146103b1578063203e727e146103cf57806323b872dd146103eb57806327c8f8351461041b5780632dc0562d14610439578063313ce56714610457576102d6565b806306fdde03146102db578063095ea7b3146102f957806310d5de531461032957806316114acd146103595780631694505e1461037557806318160ddd14610393575b600080fd5b6102e3610941565b6040516102f09190612f3e565b60405180910390f35b610313600480360381019061030e9190612ff9565b6109d3565b6040516103209190613054565b60405180910390f35b610343600480360381019061033e919061306f565b6109f6565b6040516103509190613054565b60405180910390f35b610373600480360381019061036e919061306f565b610a16565b005b61037d610b8e565b60405161038a91906130fb565b60405180910390f35b61039b610bb2565b6040516103a89190613125565b60405180910390f35b6103b9610bbc565b6040516103c69190613125565b60405180910390f35b6103e960048036038101906103e49190613140565b610bc2565b005b6104056004803603810190610400919061316d565b610c5d565b6040516104129190613054565b60405180910390f35b610423610c8c565b60405161043091906131cf565b60405180910390f35b610441610c92565b60405161044e91906131cf565b60405180910390f35b61045f610cb8565b60405161046c9190613206565b60405180910390f35b61048f600480360381019061048a9190612ff9565b610cc1565b60405161049c9190613054565b60405180910390f35b6104ad610cf8565b6040516104ba91906131cf565b60405180910390f35b6104cb610d1c565b6040516104d89190613054565b60405180910390f35b6104fb60048036038101906104f6919061306f565b610d2f565b005b6105176004803603810190610512919061306f565b610e0d565b6040516105249190613054565b60405180910390f35b610535610e63565b6040516105429190613125565b60405180910390f35b610553610e69565b6040516105609190613125565b60405180910390f35b610571610e6f565b60405161057e9190613125565b60405180910390f35b61058f610e75565b60405161059c9190613054565b60405180910390f35b6105ad610e88565b6040516105ba9190613242565b60405180910390f35b6105dd60048036038101906105d8919061306f565b610eae565b6040516105ea9190613125565b60405180910390f35b6105fb610ef6565b005b6106176004803603810190610612919061306f565b610f0a565b005b610621610fd2565b60405161062e9190613054565b60405180910390f35b610651600480360381019061064c9190613289565b610ffe565b005b61065b611061565b005b610665611139565b60405161067291906131cf565b60405180910390f35b610695600480360381019061069091906132c9565b611163565b005b61069f611188565b6040516106ac9190612f3e565b60405180910390f35b6106cf60048036038101906106ca9190613289565b61121a565b005b6106eb60048036038101906106e69190612ff9565b6112be565b6040516106f89190613054565b60405180910390f35b61071b60048036038101906107169190612ff9565b611335565b6040516107289190613054565b60405180910390f35b61074b6004803603810190610746919061306f565b611358565b6040516107589190613054565b60405180910390f35b610769611378565b6040516107769190613054565b60405180910390f35b61079960048036038101906107949190613289565b61138b565b005b6107b560048036038101906107b09190613140565b61143c565b005b6107bf6114d7565b6040516107cc9190613054565b60405180910390f35b6107dd6114ea565b6040516107ea9190613125565b60405180910390f35b61080d60048036038101906108089190613140565b6114f0565b60405161081a9190613054565b60405180910390f35b61082b6115d1565b6040516108389190613125565b60405180910390f35b61085b600480360381019061085691906132f6565b6115d7565b6040516108689190613125565b60405180910390f35b61087961165e565b6040516108869190613125565b60405180910390f35b610897611664565b6040516108a49190613125565b60405180910390f35b6108b561166a565b6040516108c29190613054565b60405180910390f35b6108e560048036038101906108e0919061306f565b611696565b005b6108ef611719565b6040516108fc9190613125565b60405180910390f35b61090d61171f565b60405161091a9190613125565b60405180910390f35b61092b611725565b60405161093891906131cf565b60405180910390f35b60606003805461095090613365565b80601f016020809104026020016040519081016040528092919081815260200182805461097c90613365565b80156109c95780601f1061099e576101008083540402835291602001916109c9565b820191906000526020600020905b8154815290600101906020018083116109ac57829003601f168201915b5050505050905090565b6000806109de61173d565b90506109eb818585611745565b600191505092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b610a1e61190e565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a83906133e2565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610ab0611139565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ae991906131cf565b602060405180830381865afa158015610b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2a9190613417565b6040518363ffffffff1660e01b8152600401610b47929190613444565b6020604051808303816000875af1158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190613482565b5050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60135481565b610bca61190e565b670de0b6b3a76400006103e86005610be0610bb2565b610bea91906134de565b610bf4919061354f565b610bfe919061354f565b811015610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c37906135f2565b60405180910390fd5b670de0b6b3a764000081610c5491906134de565b60088190555050565b600080610c6861173d565b9050610c7585828561198c565b610c80858585611a18565b60019150509392505050565b61dead81565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b600080610ccc61173d565b9050610ced818585610cde85896115d7565b610ce89190613612565b611745565b600191505092915050565b7f00000000000000000000000013b13a07b4eec2f2a5ff67bdf19a3bddaec99c6281565b600b60009054906101000a900460ff1681565b610d3761190e565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb3fd0123f0059326c0d3771de6b52f7cc07866caff01a05b16473ae87d382bf960405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610dff81600161138b565b610e0a816001610ffe565b50565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c5481565b60115481565b60145481565b600b60029054906101000a900460ff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610efe61190e565b610f086000612686565b565b610f1261190e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f849a2ad8ad386f1e9897e9e0a62d16771c675e4740986a16fb31bd8e1dde9c9760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610fdc61190e565b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61100661190e565b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61106961190e565b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036110fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f190613692565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555042600c81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61116b61190e565b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461119790613365565b80601f01602080910402602001604051908101604052809291908181526020018280546111c390613365565b80156112105780601f106111e557610100808354040283529160200191611210565b820191906000526020600020905b8154815290600101906020018083116111f357829003601f168201915b5050505050905090565b61122261190e565b7f00000000000000000000000013b13a07b4eec2f2a5ff67bdf19a3bddaec99c6273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790613724565b60405180910390fd5b6112ba828261274c565b5050565b6000806112c961173d565b905060006112d782866115d7565b90508381101561131c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611313906137b6565b60405180910390fd5b6113298286868403611745565b60019250505092915050565b60008061134061173d565b905061134d818585611a18565b600191505092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b61139361190e565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516114309190613054565b60405180910390a25050565b61144461190e565b670de0b6b3a76400006103e8600561145a610bb2565b61146491906134de565b61146e919061354f565b611478919061354f565b8110156114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190613848565b60405180910390fd5b670de0b6b3a7640000816114ce91906134de565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b60006114fa61190e565b620186a06001611508610bb2565b61151291906134de565b61151c919061354f565b82101561155e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611555906138da565b60405180910390fd5b6103e8600561156b610bb2565b61157591906134de565b61157f919061354f565b8211156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b89061396c565b60405180910390fd5b8160098190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60105481565b600061167461190e565b6000600e60006101000a81548160ff0219169083151502179055506001905090565b61169e61190e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361170d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611704906139fe565b60405180910390fd5b61171681612686565b50565b60125481565b600a5481565b731ce270557c1f68cfb577b856766310bf8b47fd9c81565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ab90613a90565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90613b22565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119019190613125565b60405180910390a3505050565b61191661173d565b73ffffffffffffffffffffffffffffffffffffffff16611934611139565b73ffffffffffffffffffffffffffffffffffffffff161461198a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198190613b8e565b60405180910390fd5b565b600061199884846115d7565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611a125781811015611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb90613bfa565b60405180910390fd5b611a118484848403611745565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7e90613c8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed90613d1e565b60405180910390fd5b60008103611b0f57611b0a838360006127ed565b612681565b600b60009054906101000a900460ff161561222857611b2c611139565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611b9a5750611b6a611139565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611bd35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c0d575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611c265750600560149054906101000a900460ff16155b1561222757600b60019054906101000a900460ff16611d2057601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ce05750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1690613d8a565b60405180910390fd5b5b600e60009054906101000a900460ff1615611f3e57611d3d611139565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611dc457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e1c57507f00000000000000000000000013b13a07b4eec2f2a5ff67bdf19a3bddaec99c6273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e725750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611f3d5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eef90613e42565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611fe15750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120885760085481111561202b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202290613ed4565b60405180910390fd5b600a5461203783610eae565b826120429190613612565b1115612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a90613f40565b60405180910390fd5b612226565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561212b5750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561217a57600854811115612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90613fd2565b60405180910390fd5b612225565b601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661222457600a546121d783610eae565b826121e29190613612565b1115612223576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221a90613f40565b60405180910390fd5b5b5b5b5b5b600061223330610eae565b9050600060095482101590508080156122585750600b60029054906101000a900460ff165b80156122715750600560149054906101000a900460ff16155b80156122c75750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561231d5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123735750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123b7576001600560146101000a81548160ff02191690831515021790555061239b612a63565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061246d5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561247757600090505b6000811561267157601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124da57506000601154115b1561258e57611c206124f7600c5442612e6290919063ffffffff16565b101561252b576125246064612516601488612e7890919063ffffffff16565b612e8e90919063ffffffff16565b9050612556565b612553606461254560115488612e7890919063ffffffff16565b612e8e90919063ffffffff16565b90505b6011546012548261256791906134de565b612571919061354f565b601460008282546125829190613612565b9250508190555061264d565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125e957506000600f54115b1561264c576126166064612608600f5488612e7890919063ffffffff16565b612e8e90919063ffffffff16565b9050600f546010548261262991906134de565b612633919061354f565b601360008282546126449190613612565b925050819055505b5b6000811115612662576126618730836127ed565b5b808561266e9190613ff2565b94505b61267c8787876127ed565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285390613c8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c290613d1e565b60405180910390fd5b6128d6838383612ea4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561295c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295390614098565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a4a9190613125565b60405180910390a3612a5d848484612ea9565b50505050565b6000612a6e30610eae565b90506000601454601354612a829190613612565b90506000821480612a935750600081145b15612a9f575050612e60565b6014600954612aae91906134de565b821115612ac7576014600954612ac491906134de565b91505b60008290506000731ce270557c1f68cfb577b856766310bf8b47fd9c73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b1b91906131cf565b602060405180830381865afa158015612b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b5c9190613417565b9050612b8b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611745565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362df4a4b836040518263ffffffff1660e01b8152600401612be69190613125565b600060405180830381600087803b158015612c0057600080fd5b505af1158015612c14573d6000803e3d6000fd5b505050506000612cba82731ce270557c1f68cfb577b856766310bf8b47fd9c73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612c6b91906131cf565b602060405180830381865afa158015612c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cac9190613417565b612e6290919063ffffffff16565b90506000612ce585612cd760145485612e7890919063ffffffff16565b612e8e90919063ffffffff16565b90506000612cfc8284612e6290919063ffffffff16565b905060006013819055506000601481905550731ce270557c1f68cfb577b856766310bf8b47fd9c73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401612d7f929190613444565b6020604051808303816000875af1158015612d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dc29190613482565b50731ce270557c1f68cfb577b856766310bf8b47fd9c73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61dead836040518363ffffffff1660e01b8152600401612e14929190613444565b6020604051808303816000875af1158015612e33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e579190613482565b50505050505050505b565b60008183612e709190613ff2565b905092915050565b60008183612e8691906134de565b905092915050565b60008183612e9c919061354f565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ee8578082015181840152602081019050612ecd565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f1082612eae565b612f1a8185612eb9565b9350612f2a818560208601612eca565b612f3381612ef4565b840191505092915050565b60006020820190508181036000830152612f588184612f05565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f9082612f65565b9050919050565b612fa081612f85565b8114612fab57600080fd5b50565b600081359050612fbd81612f97565b92915050565b6000819050919050565b612fd681612fc3565b8114612fe157600080fd5b50565b600081359050612ff381612fcd565b92915050565b600080604083850312156130105761300f612f60565b5b600061301e85828601612fae565b925050602061302f85828601612fe4565b9150509250929050565b60008115159050919050565b61304e81613039565b82525050565b60006020820190506130696000830184613045565b92915050565b60006020828403121561308557613084612f60565b5b600061309384828501612fae565b91505092915050565b6000819050919050565b60006130c16130bc6130b784612f65565b61309c565b612f65565b9050919050565b60006130d3826130a6565b9050919050565b60006130e5826130c8565b9050919050565b6130f5816130da565b82525050565b600060208201905061311060008301846130ec565b92915050565b61311f81612fc3565b82525050565b600060208201905061313a6000830184613116565b92915050565b60006020828403121561315657613155612f60565b5b600061316484828501612fe4565b91505092915050565b60008060006060848603121561318657613185612f60565b5b600061319486828701612fae565b93505060206131a586828701612fae565b92505060406131b686828701612fe4565b9150509250925092565b6131c981612f85565b82525050565b60006020820190506131e460008301846131c0565b92915050565b600060ff82169050919050565b613200816131ea565b82525050565b600060208201905061321b60008301846131f7565b92915050565b600061322c826130c8565b9050919050565b61323c81613221565b82525050565b60006020820190506132576000830184613233565b92915050565b61326681613039565b811461327157600080fd5b50565b6000813590506132838161325d565b92915050565b600080604083850312156132a05761329f612f60565b5b60006132ae85828601612fae565b92505060206132bf85828601613274565b9150509250929050565b6000602082840312156132df576132de612f60565b5b60006132ed84828501613274565b91505092915050565b6000806040838503121561330d5761330c612f60565b5b600061331b85828601612fae565b925050602061332c85828601612fae565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061337d57607f821691505b6020821081036133905761338f613336565b5b50919050565b7f546f6b656e2063616e206e6f74206265204d4f4e474200000000000000000000600082015250565b60006133cc601683612eb9565b91506133d782613396565b602082019050919050565b600060208201905081810360008301526133fb816133bf565b9050919050565b60008151905061341181612fcd565b92915050565b60006020828403121561342d5761342c612f60565b5b600061343b84828501613402565b91505092915050565b600060408201905061345960008301856131c0565b6134666020830184613116565b9392505050565b60008151905061347c8161325d565b92915050565b60006020828403121561349857613497612f60565b5b60006134a68482850161346d565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134e982612fc3565b91506134f483612fc3565b925082820261350281612fc3565b91508282048414831517613519576135186134af565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061355a82612fc3565b915061356583612fc3565b92508261357557613574613520565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b60006135dc602f83612eb9565b91506135e782613580565b604082019050919050565b6000602082019050818103600083015261360b816135cf565b9050919050565b600061361d82612fc3565b915061362883612fc3565b92508282019050808211156136405761363f6134af565b5b92915050565b7f4e65656420746f207365742073776170206d616e616765720000000000000000600082015250565b600061367c601883612eb9565b915061368782613646565b602082019050919050565b600060208201905081810360008301526136ab8161366f565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061370e603983612eb9565b9150613719826136b2565b604082019050919050565b6000602082019050818103600083015261373d81613701565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006137a0602583612eb9565b91506137ab82613744565b604082019050919050565b600060208201905081810360008301526137cf81613793565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613832602483612eb9565b915061383d826137d6565b604082019050919050565b6000602082019050818103600083015261386181613825565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006138c4603583612eb9565b91506138cf82613868565b604082019050919050565b600060208201905081810360008301526138f3816138b7565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613956603483612eb9565b9150613961826138fa565b604082019050919050565b6000602082019050818103600083015261398581613949565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006139e8602683612eb9565b91506139f38261398c565b604082019050919050565b60006020820190508181036000830152613a17816139db565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613a7a602483612eb9565b9150613a8582613a1e565b604082019050919050565b60006020820190508181036000830152613aa981613a6d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613b0c602283612eb9565b9150613b1782613ab0565b604082019050919050565b60006020820190508181036000830152613b3b81613aff565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b78602083612eb9565b9150613b8382613b42565b602082019050919050565b60006020820190508181036000830152613ba781613b6b565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613be4601d83612eb9565b9150613bef82613bae565b602082019050919050565b60006020820190508181036000830152613c1381613bd7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c76602583612eb9565b9150613c8182613c1a565b604082019050919050565b60006020820190508181036000830152613ca581613c69565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d08602383612eb9565b9150613d1382613cac565b604082019050919050565b60006020820190508181036000830152613d3781613cfb565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613d74601683612eb9565b9150613d7f82613d3e565b602082019050919050565b60006020820190508181036000830152613da381613d67565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000613e2c604983612eb9565b9150613e3782613daa565b606082019050919050565b60006020820190508181036000830152613e5b81613e1f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613ebe603583612eb9565b9150613ec982613e62565b604082019050919050565b60006020820190508181036000830152613eed81613eb1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613f2a601383612eb9565b9150613f3582613ef4565b602082019050919050565b60006020820190508181036000830152613f5981613f1d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613fbc603683612eb9565b9150613fc782613f60565b604082019050919050565b60006020820190508181036000830152613feb81613faf565b9050919050565b6000613ffd82612fc3565b915061400883612fc3565b92508282039050818111156140205761401f6134af565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614082602683612eb9565b915061408d82614026565b604082019050919050565b600060208201905081810360008301526140b181614075565b905091905056fea2646970667358221220179fa12fd31b696a1d3f7c97357f58624cedb2c7fcf087453e2480822a79c66364736f6c63430008120033

Deployed Bytecode Sourcemap

32174:13188:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9040:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11376:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33394:63;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38583:258;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32249:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10160:105;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33217:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37179:272;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12151:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32352:53;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32533:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10002:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12852:235;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32307:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32715:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38085:294;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39554:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32833:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33154:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33249:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32795:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32566:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10328:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2788:103;;;:::i;:::-;;39357:189;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36290:121;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37720:167;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35961:277;;;:::i;:::-;;2140:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38475:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9259:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38849:304;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13590:430;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10658:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33615:57;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32755:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37895:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37459:253;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33044:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32609:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36677:494;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33092:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10911:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32648:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33123:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36472:135;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3046:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33186:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32685:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32412:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9040:100;9094:13;9127:5;9120:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9040:100;:::o;11376:198::-;11456:4;11473:13;11489:12;:10;:12::i;:::-;11473:28;;11512:32;11521:5;11528:7;11537:6;11512:8;:32::i;:::-;11562:4;11555:11;;;11376:198;;;;:::o;33394:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;38583:258::-;2026:13;:11;:13::i;:::-;38692:4:::1;38674:23;;:6;:23;;::::0;38652:95:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38767:6;38760:23;;;38784:7;:5;:7::i;:::-;38800:6;38793:24;;;38826:4;38793:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38760:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38583:258:::0;:::o;32249:51::-;;;:::o;10160:105::-;10221:4;10245:12;;10238:19;;10160:105;:::o;33217:25::-;;;;:::o;37179:272::-;2026:13;:11;:13::i;:::-;37313:4:::1;37305;37300:1;37284:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37283:26;;;;:::i;:::-;37282:35;;;;:::i;:::-;37272:6;:45;;37250:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;37436:6;37426;:17;;;;:::i;:::-;37403:20;:40;;;;37179:272:::0;:::o;12151:292::-;12279:4;12296:15;12314:12;:10;:12::i;:::-;12296:30;;12337:38;12353:4;12359:7;12368:6;12337:15;:38::i;:::-;12386:27;12396:4;12402:2;12406:6;12386:9;:27::i;:::-;12431:4;12424:11;;;12151:292;;;;;:::o;32352:53::-;32398:6;32352:53;:::o;32533:24::-;;;;;;;;;;;;;:::o;10002:93::-;10060:5;10085:2;10078:9;;10002:93;:::o;12852:235::-;12937:4;12954:13;12970:12;:10;:12::i;:::-;12954:28;;12993:64;13002:5;13009:7;13046:10;13018:25;13028:5;13035:7;13018:9;:25::i;:::-;:38;;;;:::i;:::-;12993:8;:64::i;:::-;13075:4;13068:11;;;12852:235;;;;:::o;32307:38::-;;;:::o;32715:33::-;;;;;;;;;;;;;:::o;38085:294::-;2026:13;:11;:13::i;:::-;38206:11:::1;;;;;;;;;;;38167:52;;38186:10;38167:52;;;;;;;;;;;;38262:10;38230:11;;:43;;;;;;;;;;;;;;;;;;38284:33;38300:10;38312:4;38284:15;:33::i;:::-;38328:43;38354:10;38366:4;38328:25;:43::i;:::-;38085:294:::0;:::o;39554:126::-;39620:4;39644:19;:28;39664:7;39644:28;;;;;;;;;;;;;;;;;;;;;;;;;39637:35;;39554:126;;;:::o;32833:27::-;;;;:::o;33154:25::-;;;;:::o;33249:24::-;;;;:::o;32795:31::-;;;;;;;;;;;;;:::o;32566:36::-;;;;;;;;;;;;;:::o;10328:124::-;10402:4;10426:9;:18;10436:7;10426:18;;;;;;;;;;;;;;;;10419:25;;10328:124;;;:::o;2788:103::-;2026:13;:11;:13::i;:::-;2853:30:::1;2880:1;2853:18;:30::i;:::-;2788:103::o:0;39357:189::-;2026:13;:11;:13::i;:::-;39493:9:::1;;;;;;;;;;;39462:41;;39479:12;39462:41;;;;;;;;;;;;39526:12;39514:9;;:24;;;;;;;;;;;;;;;;;;39357:189:::0;:::o;36290:121::-;36342:4;2026:13;:11;:13::i;:::-;36376:5:::1;36359:14;;:22;;;;;;;;;;;;;;;;;;36399:4;36392:11;;36290:121:::0;:::o;37720:167::-;2026:13;:11;:13::i;:::-;37875:4:::1;37833:31;:39;37865:6;37833:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37720:167:::0;;:::o;35961:277::-;2026:13;:11;:13::i;:::-;36071:1:::1;36039:34;;36047:11;;;;;;;;;;;36039:34;;::::0;36016:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36153:4;36137:13;;:20;;;;;;;;;;;;;;;;;;36182:4;36168:11;;:18;;;;;;;;;;;;;;;;;;36215:15;36197;:33;;;;35961:277::o:0;2140:87::-;2186:7;2213:6;;;;;;;;;;;2206:13;;2140:87;:::o;38475:100::-;2026:13;:11;:13::i;:::-;38560:7:::1;38546:11;;:21;;;;;;;;;;;;;;;;;;38475:100:::0;:::o;9259:104::-;9315:13;9348:7;9341:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9259:104;:::o;38849:304::-;2026:13;:11;:13::i;:::-;38993::::1;38985:21;;:4;:21;;::::0;38963:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39104:41;39133:4;39139:5;39104:28;:41::i;:::-;38849:304:::0;;:::o;13590:430::-;13680:4;13697:13;13713:12;:10;:12::i;:::-;13697:28;;13736:21;13760:25;13770:5;13777:7;13760:9;:25::i;:::-;13736:49;;13824:15;13804:16;:35;;13796:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13917:60;13926:5;13933:7;13961:15;13942:16;:34;13917:8;:60::i;:::-;14008:4;14001:11;;;;13590:430;;;;:::o;10658:190::-;10734:4;10751:13;10767:12;:10;:12::i;:::-;10751:28;;10790;10800:5;10807:2;10811:6;10790:9;:28::i;:::-;10836:4;10829:11;;;10658:190;;;;:::o;33615:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;32755:33::-;;;;;;;;;;;;;:::o;37895:182::-;2026:13;:11;:13::i;:::-;38011:8:::1;37980:19;:28;38000:7;37980:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38051:7;38035:34;;;38060:8;38035:34;;;;;;:::i;:::-;;;;;;;;37895:182:::0;;:::o;37459:253::-;2026:13;:11;:13::i;:::-;37596:4:::1;37588;37583:1;37567:13;:11;:13::i;:::-;:17;;;;:::i;:::-;37566:26;;;;:::i;:::-;37565:35;;;;:::i;:::-;37555:6;:45;;37533:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;37697:6;37687;:17;;;;:::i;:::-;37675:9;:29;;;;37459:253:::0;:::o;33044:39::-;;;;;;;;;;;;;:::o;32609:32::-;;;;:::o;36677:494::-;36782:4;2026:13;:11;:13::i;:::-;36861:6:::1;36856:1;36840:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36839:28;;;;:::i;:::-;36826:9;:41;;36804:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;37016:4;37011:1;36995:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36994:26;;;;:::i;:::-;36981:9;:39;;36959:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;37132:9;37111:18;:30;;;;37159:4;37152:11;;36677:494:::0;;;:::o;33092:24::-;;;;:::o;10911:148::-;11000:4;11024:11;:18;11036:5;11024:18;;;;;;;;;;;;;;;:27;11043:7;11024:27;;;;;;;;;;;;;;;;11017:34;;10911:148;;;;:::o;32648:30::-;;;;:::o;33123:22::-;;;;:::o;36472:135::-;36532:4;2026:13;:11;:13::i;:::-;36572:5:::1;36549:20;;:28;;;;;;;;;;;;;;;;;;36595:4;36588:11;;36472:135:::0;:::o;3046:201::-;2026:13;:11;:13::i;:::-;3155:1:::1;3135:22;;:8;:22;;::::0;3127:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3211:28;3230:8;3211:18;:28::i;:::-;3046:201:::0;:::o;33186:22::-;;;;:::o;32685:21::-;;;;:::o;32412:82::-;32451:42;32412:82;:::o;777:98::-;830:7;857:10;850:17;;777:98;:::o;17596:377::-;17746:1;17729:19;;:5;:19;;;17721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17827:1;17808:21;;:7;:21;;;17800:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17911:6;17881:11;:18;17893:5;17881:18;;;;;;;;;;;;;;;:27;17900:7;17881:27;;;;;;;;;;;;;;;:36;;;;17949:7;17933:32;;17942:5;17933:32;;;17958:6;17933:32;;;;;;:::i;:::-;;;;;;;;17596:377;;;:::o;2305:132::-;2380:12;:10;:12::i;:::-;2369:23;;:7;:5;:7::i;:::-;:23;;;2361:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2305:132::o;18264:444::-;18396:21;18420:25;18430:5;18437:7;18420:9;:25::i;:::-;18396:49;;18480:14;18460:16;:34;18456:245;;18539:6;18519:16;:26;;18511:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18623:51;18632:5;18639:7;18667:6;18648:16;:25;18623:8;:51::i;:::-;18456:245;18385:323;18264:444;;;:::o;39688:4616::-;39833:1;39817:18;;:4;:18;;;39809:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39910:1;39896:16;;:2;:16;;;39888:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39979:1;39969:6;:11;39965:93;;39997:28;40013:4;40019:2;40023:1;39997:15;:28::i;:::-;40040:7;;39965:93;40074:14;;;;;;;;;;;40070:2542;;;40135:7;:5;:7::i;:::-;40127:15;;:4;:15;;;;:49;;;;;40169:7;:5;:7::i;:::-;40163:13;;:2;:13;;;;40127:49;:86;;;;;40211:1;40197:16;;:2;:16;;;;40127:86;:128;;;;;40248:6;40234:21;;:2;:21;;;;40127:128;:158;;;;;40277:8;;;;;;;;;;;40276:9;40127:158;40105:2496;;;40325:13;;;;;;;;;;;40320:223;;40397:19;:25;40417:4;40397:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40426:19;:23;40446:2;40426:23;;;;;;;;;;;;;;;;;;;;;;;;;40397:52;40363:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;40320:223;40699:20;;;;;;;;;;;40695:696;;;40780:7;:5;:7::i;:::-;40774:13;;:2;:13;;;;:72;;;;;40830:15;40816:30;;:2;:30;;;;40774:72;:129;;;;;40889:13;40875:28;;:2;:28;;;;40774:129;:184;;;;;40933:19;:25;40953:4;40933:25;;;;;;;;;;;;;;;;;;;;;;;;;40932:26;40774:184;40744:628;;;41122:12;41047:28;:39;41076:9;41047:39;;;;;;;;;;;;;;;;:87;41009:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;41336:12;41294:28;:39;41323:9;41294:39;;;;;;;;;;;;;;;:54;;;;40744:628;40695:696;41465:25;:31;41491:4;41465:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;41522:31;:35;41554:2;41522:35;;;;;;;;;;;;;;;;;;;;;;;;;41521:36;41465:92;41439:1147;;;41644:20;;41634:6;:30;;41600:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;41852:9;;41835:13;41845:2;41835:9;:13::i;:::-;41826:6;:22;;;;:::i;:::-;:35;;41792:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41439:1147;;;42030:25;:29;42056:2;42030:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;42085:31;:37;42117:4;42085:37;;;;;;;;;;;;;;;;;;;;;;;;;42084:38;42030:92;42004:582;;;42209:20;;42199:6;:30;;42165:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;42004:582;;;42366:31;:35;42398:2;42366:35;;;;;;;;;;;;;;;;;;;;;;;;;42361:225;;42486:9;;42469:13;42479:2;42469:9;:13::i;:::-;42460:6;:22;;;;:::i;:::-;:35;;42426:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42361:225;42004:582;41439:1147;40105:2496;40070:2542;42624:25;42652:24;42670:4;42652:9;:24::i;:::-;42624:52;;42689:12;42728:18;;42704:20;:42;;42689:57;;42777:7;:35;;;;;42801:11;;;;;;;;;;;42777:35;:61;;;;;42830:8;;;;;;;;;;;42829:9;42777:61;:110;;;;;42856:25;:31;42882:4;42856:31;;;;;;;;;;;;;;;;;;;;;;;;;42855:32;42777:110;:153;;;;;42905:19;:25;42925:4;42905:25;;;;;;;;;;;;;;;;;;;;;;;;;42904:26;42777:153;:194;;;;;42948:19;:23;42968:2;42948:23;;;;;;;;;;;;;;;;;;;;;;;;;42947:24;42777:194;42759:326;;;43009:4;42998:8;;:15;;;;;;;;;;;;;;;;;;43030:10;:8;:10::i;:::-;43068:5;43057:8;;:16;;;;;;;;;;;;;;;;;;42759:326;43097:12;43113:8;;;;;;;;;;;43112:9;43097:24;;43223:19;:25;43243:4;43223:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43252:19;:23;43272:2;43252:23;;;;;;;;;;;;;;;;;;;;;;;;;43223:52;43219:100;;;43302:5;43292:15;;43219:100;43331:9;43433:7;43429:822;;;43485:25;:29;43511:2;43485:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43534:1;43518:13;;:17;43485:50;43481:621;;;43599:7;43560:36;43580:15;;43560;:19;;:36;;;;:::i;:::-;:46;43556:215;;;43638:23;43657:3;43638:14;43649:2;43638:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;43631:30;;43556:215;;;43717:34;43747:3;43717:25;43728:13;;43717:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;43710:41;;43556:215;43827:13;;43813:10;;43806:4;:17;;;;:::i;:::-;43805:35;;;;:::i;:::-;43789:12;;:51;;;;;;;:::i;:::-;;;;;;;;43481:621;;;43904:25;:31;43930:4;43904:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43954:1;43939:12;;:16;43904:51;43900:202;;;43983:33;44012:3;43983:24;43994:12;;43983:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43976:40;;44074:12;;44060:10;;44053:4;:17;;;;:::i;:::-;44052:34;;;;:::i;:::-;44035:13;;:51;;;;;;;:::i;:::-;;;;;;;;43900:202;43481:621;44129:1;44122:4;:8;44118:91;;;44151:42;44167:4;44181;44188;44151:15;:42::i;:::-;44118:91;44235:4;44225:14;;;;;:::i;:::-;;;43429:822;44263:33;44279:4;44285:2;44289:6;44263:15;:33::i;:::-;39798:4506;;;;39688:4616;;;;:::o;3407:191::-;3481:16;3500:6;;;;;;;;;;;3481:25;;3526:8;3517:6;;:17;;;;;;;;;;;;;;;;;;3581:8;3550:40;;3571:8;3550:40;;;;;;;;;;;;3470:128;3407:191;:::o;39161:188::-;39278:5;39244:25;:31;39270:4;39244:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39335:5;39301:40;;39329:4;39301:40;;;;;;;;;;;;39161:188;;:::o;14490:834::-;14634:1;14618:18;;:4;:18;;;14610:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14711:1;14697:16;;:2;:16;;;14689:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14766:38;14787:4;14793:2;14797:6;14766:20;:38::i;:::-;14817:16;14836:9;:15;14846:4;14836:15;;;;;;;;;;;;;;;;14817:34;;14885:6;14870:11;:21;;14862:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15002:6;14988:11;:20;14970:9;:15;14980:4;14970:15;;;;;;;;;;;;;;;:38;;;;15205:6;15188:9;:13;15198:2;15188:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15255:2;15240:26;;15249:4;15240:26;;;15259:6;15240:26;;;;;;:::i;:::-;;;;;;;;15279:37;15299:4;15305:2;15309:6;15279:19;:37::i;:::-;14599:725;14490:834;;;:::o;44312:1047::-;44351:20;44374:24;44392:4;44374:9;:24::i;:::-;44351:47;;44409:22;44450:12;;44434:13;;:28;;;;:::i;:::-;44409:53;;44498:1;44479:15;:20;:46;;;;44524:1;44503:17;:22;44479:46;44475:85;;;44542:7;;;;44475:85;44615:2;44594:18;;:23;;;;:::i;:::-;44576:15;:41;44572:115;;;44673:2;44652:18;;:23;;;;:::i;:::-;44634:41;;44572:115;44699:24;44726:15;44699:42;;44752:23;32451:42;44778:22;;;44809:4;44778:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44752:63;;44828:66;44845:4;44860:11;;;;;;;;;;;44874:19;44828:8;:66::i;:::-;44905:11;;;;;;;;;;;:22;;;44928:19;44905:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44961:16;44980:61;45022:18;32451:42;44980:22;;;45011:4;44980:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;:61;;;;:::i;:::-;44961:80;;45052:15;45070:52;45104:17;45070:29;45086:12;;45070:11;:15;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;45052:70;;45133:16;45152:27;45168:10;45152:11;:15;;:27;;;;:::i;:::-;45133:46;;45208:1;45192:13;:17;;;;45235:1;45220:12;:16;;;;32451:42;45249:21;;;45271:9;;;;;;;;;;;45282:10;45249:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32451:42;45304:21;;;32398:6;45339:11;45304:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44340:1019;;;;;;;44312:1047;:::o;23270:89::-;23322:4;23350:1;23346;:5;;;;:::i;:::-;23339:12;;23270:89;;;;:::o;23618:::-;23670:4;23698:1;23694;:5;;;;:::i;:::-;23687:12;;23618:89;;;;:::o;24008:::-;24060:4;24088:1;24084;:5;;;;:::i;:::-;24077:12;;24008:89;;;;:::o;19308:122::-;;;;:::o;20034:121::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::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:152::-;6929:9;6962:37;6993:5;6962:37;:::i;:::-;6949:50;;6853:152;;;:::o;7011:183::-;7124:63;7181:5;7124:63;:::i;:::-;7119:3;7112:76;7011:183;;:::o;7200:274::-;7319:4;7357:2;7346:9;7342:18;7334:26;;7370:97;7464:1;7453:9;7449:17;7440:6;7370:97;:::i;:::-;7200:274;;;;:::o;7480:116::-;7550:21;7565:5;7550:21;:::i;:::-;7543:5;7540:32;7530:60;;7586:1;7583;7576:12;7530:60;7480:116;:::o;7602:133::-;7645:5;7683:6;7670:20;7661:29;;7699:30;7723:5;7699:30;:::i;:::-;7602:133;;;;:::o;7741:468::-;7806:6;7814;7863:2;7851:9;7842:7;7838:23;7834:32;7831:119;;;7869:79;;:::i;:::-;7831:119;7989:1;8014:53;8059:7;8050:6;8039:9;8035:22;8014:53;:::i;:::-;8004:63;;7960:117;8116:2;8142:50;8184:7;8175:6;8164:9;8160:22;8142:50;:::i;:::-;8132:60;;8087:115;7741:468;;;;;:::o;8215:323::-;8271:6;8320:2;8308:9;8299:7;8295:23;8291:32;8288:119;;;8326:79;;:::i;:::-;8288:119;8446:1;8471:50;8513:7;8504:6;8493:9;8489:22;8471:50;:::i;:::-;8461:60;;8417:114;8215:323;;;;:::o;8544:474::-;8612:6;8620;8669:2;8657:9;8648:7;8644:23;8640:32;8637:119;;;8675:79;;:::i;:::-;8637:119;8795:1;8820:53;8865:7;8856:6;8845:9;8841:22;8820:53;:::i;:::-;8810:63;;8766:117;8922:2;8948:53;8993:7;8984:6;8973:9;8969:22;8948:53;:::i;:::-;8938:63;;8893:118;8544:474;;;;;:::o;9024:180::-;9072:77;9069:1;9062:88;9169:4;9166:1;9159:15;9193:4;9190:1;9183:15;9210:320;9254:6;9291:1;9285:4;9281:12;9271:22;;9338:1;9332:4;9328:12;9359:18;9349:81;;9415:4;9407:6;9403:17;9393:27;;9349:81;9477:2;9469:6;9466:14;9446:18;9443:38;9440:84;;9496:18;;:::i;:::-;9440:84;9261:269;9210:320;;;:::o;9536:172::-;9676:24;9672:1;9664:6;9660:14;9653:48;9536:172;:::o;9714:366::-;9856:3;9877:67;9941:2;9936:3;9877:67;:::i;:::-;9870:74;;9953:93;10042:3;9953:93;:::i;:::-;10071:2;10066:3;10062:12;10055:19;;9714:366;;;:::o;10086:419::-;10252:4;10290:2;10279:9;10275:18;10267:26;;10339:9;10333:4;10329:20;10325:1;10314:9;10310:17;10303:47;10367:131;10493:4;10367:131;:::i;:::-;10359:139;;10086:419;;;:::o;10511:143::-;10568:5;10599:6;10593:13;10584:22;;10615:33;10642:5;10615:33;:::i;:::-;10511:143;;;;:::o;10660:351::-;10730:6;10779:2;10767:9;10758:7;10754:23;10750:32;10747:119;;;10785:79;;:::i;:::-;10747:119;10905:1;10930:64;10986:7;10977:6;10966:9;10962:22;10930:64;:::i;:::-;10920:74;;10876:128;10660:351;;;;:::o;11017:332::-;11138:4;11176:2;11165:9;11161:18;11153:26;;11189:71;11257:1;11246:9;11242:17;11233:6;11189:71;:::i;:::-;11270:72;11338:2;11327:9;11323:18;11314:6;11270:72;:::i;:::-;11017:332;;;;;:::o;11355:137::-;11409:5;11440:6;11434:13;11425:22;;11456:30;11480:5;11456:30;:::i;:::-;11355:137;;;;:::o;11498:345::-;11565:6;11614:2;11602:9;11593:7;11589:23;11585:32;11582:119;;;11620:79;;:::i;:::-;11582:119;11740:1;11765:61;11818:7;11809:6;11798:9;11794:22;11765:61;:::i;:::-;11755:71;;11711:125;11498:345;;;;:::o;11849:180::-;11897:77;11894:1;11887:88;11994:4;11991:1;11984:15;12018:4;12015:1;12008:15;12035:410;12075:7;12098:20;12116:1;12098:20;:::i;:::-;12093:25;;12132:20;12150:1;12132:20;:::i;:::-;12127:25;;12187:1;12184;12180:9;12209:30;12227:11;12209:30;:::i;:::-;12198:41;;12388:1;12379:7;12375:15;12372:1;12369:22;12349:1;12342:9;12322:83;12299:139;;12418:18;;:::i;:::-;12299:139;12083:362;12035:410;;;;:::o;12451:180::-;12499:77;12496:1;12489:88;12596:4;12593:1;12586:15;12620:4;12617:1;12610:15;12637:185;12677:1;12694:20;12712:1;12694:20;:::i;:::-;12689:25;;12728:20;12746:1;12728:20;:::i;:::-;12723:25;;12767:1;12757:35;;12772:18;;:::i;:::-;12757:35;12814:1;12811;12807:9;12802:14;;12637:185;;;;:::o;12828:234::-;12968:34;12964:1;12956:6;12952:14;12945:58;13037:17;13032:2;13024:6;13020:15;13013:42;12828:234;:::o;13068:366::-;13210:3;13231:67;13295:2;13290:3;13231:67;:::i;:::-;13224:74;;13307:93;13396:3;13307:93;:::i;:::-;13425:2;13420:3;13416:12;13409:19;;13068:366;;;:::o;13440:419::-;13606:4;13644:2;13633:9;13629:18;13621:26;;13693:9;13687:4;13683:20;13679:1;13668:9;13664:17;13657:47;13721:131;13847:4;13721:131;:::i;:::-;13713:139;;13440:419;;;:::o;13865:191::-;13905:3;13924:20;13942:1;13924:20;:::i;:::-;13919:25;;13958:20;13976:1;13958:20;:::i;:::-;13953:25;;14001:1;13998;13994:9;13987:16;;14022:3;14019:1;14016:10;14013:36;;;14029:18;;:::i;:::-;14013:36;13865:191;;;;:::o;14062:174::-;14202:26;14198:1;14190:6;14186:14;14179:50;14062:174;:::o;14242:366::-;14384:3;14405:67;14469:2;14464:3;14405:67;:::i;:::-;14398:74;;14481:93;14570:3;14481:93;:::i;:::-;14599:2;14594:3;14590:12;14583:19;;14242:366;;;:::o;14614:419::-;14780:4;14818:2;14807:9;14803:18;14795:26;;14867:9;14861:4;14857:20;14853:1;14842:9;14838:17;14831:47;14895:131;15021:4;14895:131;:::i;:::-;14887:139;;14614:419;;;:::o;15039:244::-;15179:34;15175:1;15167:6;15163:14;15156:58;15248:27;15243:2;15235:6;15231:15;15224:52;15039:244;:::o;15289:366::-;15431:3;15452:67;15516:2;15511:3;15452:67;:::i;:::-;15445:74;;15528:93;15617:3;15528:93;:::i;:::-;15646:2;15641:3;15637:12;15630:19;;15289:366;;;:::o;15661:419::-;15827:4;15865:2;15854:9;15850:18;15842:26;;15914:9;15908:4;15904:20;15900:1;15889:9;15885:17;15878:47;15942:131;16068:4;15942:131;:::i;:::-;15934:139;;15661:419;;;:::o;16086:224::-;16226:34;16222:1;16214:6;16210:14;16203:58;16295:7;16290:2;16282:6;16278:15;16271:32;16086:224;:::o;16316:366::-;16458:3;16479:67;16543:2;16538:3;16479:67;:::i;:::-;16472:74;;16555:93;16644:3;16555:93;:::i;:::-;16673:2;16668:3;16664:12;16657:19;;16316:366;;;:::o;16688:419::-;16854:4;16892:2;16881:9;16877:18;16869:26;;16941:9;16935:4;16931:20;16927:1;16916:9;16912:17;16905:47;16969:131;17095:4;16969:131;:::i;:::-;16961:139;;16688:419;;;:::o;17113:223::-;17253:34;17249:1;17241:6;17237:14;17230:58;17322:6;17317:2;17309:6;17305:15;17298:31;17113:223;:::o;17342:366::-;17484:3;17505:67;17569:2;17564:3;17505:67;:::i;:::-;17498:74;;17581:93;17670:3;17581:93;:::i;:::-;17699:2;17694:3;17690:12;17683:19;;17342:366;;;:::o;17714:419::-;17880:4;17918:2;17907:9;17903:18;17895:26;;17967:9;17961:4;17957:20;17953:1;17942:9;17938:17;17931:47;17995:131;18121:4;17995:131;:::i;:::-;17987:139;;17714:419;;;:::o;18139:240::-;18279:34;18275:1;18267:6;18263:14;18256:58;18348:23;18343:2;18335:6;18331:15;18324:48;18139:240;:::o;18385:366::-;18527:3;18548:67;18612:2;18607:3;18548:67;:::i;:::-;18541:74;;18624:93;18713:3;18624:93;:::i;:::-;18742:2;18737:3;18733:12;18726:19;;18385:366;;;:::o;18757:419::-;18923:4;18961:2;18950:9;18946:18;18938:26;;19010:9;19004:4;19000:20;18996:1;18985:9;18981:17;18974:47;19038:131;19164:4;19038:131;:::i;:::-;19030:139;;18757:419;;;:::o;19182:239::-;19322:34;19318:1;19310:6;19306:14;19299:58;19391:22;19386:2;19378:6;19374:15;19367:47;19182:239;:::o;19427:366::-;19569:3;19590:67;19654:2;19649:3;19590:67;:::i;:::-;19583:74;;19666:93;19755:3;19666:93;:::i;:::-;19784:2;19779:3;19775:12;19768:19;;19427:366;;;:::o;19799:419::-;19965:4;20003:2;19992:9;19988:18;19980:26;;20052:9;20046:4;20042:20;20038:1;20027:9;20023:17;20016:47;20080:131;20206:4;20080:131;:::i;:::-;20072:139;;19799:419;;;:::o;20224:225::-;20364:34;20360:1;20352:6;20348:14;20341:58;20433:8;20428:2;20420:6;20416:15;20409:33;20224:225;:::o;20455:366::-;20597:3;20618:67;20682:2;20677:3;20618:67;:::i;:::-;20611:74;;20694:93;20783:3;20694:93;:::i;:::-;20812:2;20807:3;20803:12;20796:19;;20455:366;;;:::o;20827:419::-;20993:4;21031:2;21020:9;21016:18;21008:26;;21080:9;21074:4;21070:20;21066:1;21055:9;21051:17;21044:47;21108:131;21234:4;21108:131;:::i;:::-;21100:139;;20827:419;;;:::o;21252:223::-;21392:34;21388:1;21380:6;21376:14;21369:58;21461:6;21456:2;21448:6;21444:15;21437:31;21252:223;:::o;21481:366::-;21623:3;21644:67;21708:2;21703:3;21644:67;:::i;:::-;21637:74;;21720:93;21809:3;21720:93;:::i;:::-;21838:2;21833:3;21829:12;21822:19;;21481:366;;;:::o;21853:419::-;22019:4;22057:2;22046:9;22042:18;22034:26;;22106:9;22100:4;22096:20;22092:1;22081:9;22077:17;22070:47;22134:131;22260:4;22134:131;:::i;:::-;22126:139;;21853:419;;;:::o;22278:221::-;22418:34;22414:1;22406:6;22402:14;22395:58;22487:4;22482:2;22474:6;22470:15;22463:29;22278:221;:::o;22505:366::-;22647:3;22668:67;22732:2;22727:3;22668:67;:::i;:::-;22661:74;;22744:93;22833:3;22744:93;:::i;:::-;22862:2;22857:3;22853:12;22846:19;;22505:366;;;:::o;22877:419::-;23043:4;23081:2;23070:9;23066:18;23058:26;;23130:9;23124:4;23120:20;23116:1;23105:9;23101:17;23094:47;23158:131;23284:4;23158:131;:::i;:::-;23150:139;;22877:419;;;:::o;23302:182::-;23442:34;23438:1;23430:6;23426:14;23419:58;23302:182;:::o;23490:366::-;23632:3;23653:67;23717:2;23712:3;23653:67;:::i;:::-;23646:74;;23729:93;23818:3;23729:93;:::i;:::-;23847:2;23842:3;23838:12;23831:19;;23490:366;;;:::o;23862:419::-;24028:4;24066:2;24055:9;24051:18;24043:26;;24115:9;24109:4;24105:20;24101:1;24090:9;24086:17;24079:47;24143:131;24269:4;24143:131;:::i;:::-;24135:139;;23862:419;;;:::o;24287:179::-;24427:31;24423:1;24415:6;24411:14;24404:55;24287:179;:::o;24472:366::-;24614:3;24635:67;24699:2;24694:3;24635:67;:::i;:::-;24628:74;;24711:93;24800:3;24711:93;:::i;:::-;24829:2;24824:3;24820:12;24813:19;;24472:366;;;:::o;24844:419::-;25010:4;25048:2;25037:9;25033:18;25025:26;;25097:9;25091:4;25087:20;25083:1;25072:9;25068:17;25061:47;25125:131;25251:4;25125:131;:::i;:::-;25117:139;;24844:419;;;:::o;25269:224::-;25409:34;25405:1;25397:6;25393:14;25386:58;25478:7;25473:2;25465:6;25461:15;25454:32;25269:224;:::o;25499:366::-;25641:3;25662:67;25726:2;25721:3;25662:67;:::i;:::-;25655:74;;25738:93;25827:3;25738:93;:::i;:::-;25856:2;25851:3;25847:12;25840:19;;25499:366;;;:::o;25871:419::-;26037:4;26075:2;26064:9;26060:18;26052:26;;26124:9;26118:4;26114:20;26110:1;26099:9;26095:17;26088:47;26152:131;26278:4;26152:131;:::i;:::-;26144:139;;25871:419;;;:::o;26296:222::-;26436:34;26432:1;26424:6;26420:14;26413:58;26505:5;26500:2;26492:6;26488:15;26481:30;26296:222;:::o;26524:366::-;26666:3;26687:67;26751:2;26746:3;26687:67;:::i;:::-;26680:74;;26763:93;26852:3;26763:93;:::i;:::-;26881:2;26876:3;26872:12;26865:19;;26524:366;;;:::o;26896:419::-;27062:4;27100:2;27089:9;27085:18;27077:26;;27149:9;27143:4;27139:20;27135:1;27124:9;27120:17;27113:47;27177:131;27303:4;27177:131;:::i;:::-;27169:139;;26896:419;;;:::o;27321:172::-;27461:24;27457:1;27449:6;27445:14;27438:48;27321:172;:::o;27499:366::-;27641:3;27662:67;27726:2;27721:3;27662:67;:::i;:::-;27655:74;;27738:93;27827:3;27738:93;:::i;:::-;27856:2;27851:3;27847:12;27840:19;;27499:366;;;:::o;27871:419::-;28037:4;28075:2;28064:9;28060:18;28052:26;;28124:9;28118:4;28114:20;28110:1;28099:9;28095:17;28088:47;28152:131;28278:4;28152:131;:::i;:::-;28144:139;;27871:419;;;:::o;28296:297::-;28436:34;28432:1;28424:6;28420:14;28413:58;28505:34;28500:2;28492:6;28488:15;28481:59;28574:11;28569:2;28561:6;28557:15;28550:36;28296:297;:::o;28599:366::-;28741:3;28762:67;28826:2;28821:3;28762:67;:::i;:::-;28755:74;;28838:93;28927:3;28838:93;:::i;:::-;28956:2;28951:3;28947:12;28940:19;;28599:366;;;:::o;28971:419::-;29137:4;29175:2;29164:9;29160:18;29152:26;;29224:9;29218:4;29214:20;29210:1;29199:9;29195:17;29188:47;29252:131;29378:4;29252:131;:::i;:::-;29244:139;;28971:419;;;:::o;29396:240::-;29536:34;29532:1;29524:6;29520:14;29513:58;29605:23;29600:2;29592:6;29588:15;29581:48;29396:240;:::o;29642:366::-;29784:3;29805:67;29869:2;29864:3;29805:67;:::i;:::-;29798:74;;29881:93;29970:3;29881:93;:::i;:::-;29999:2;29994:3;29990:12;29983:19;;29642:366;;;:::o;30014:419::-;30180:4;30218:2;30207:9;30203:18;30195:26;;30267:9;30261:4;30257:20;30253:1;30242:9;30238:17;30231:47;30295:131;30421:4;30295:131;:::i;:::-;30287:139;;30014:419;;;:::o;30439:169::-;30579:21;30575:1;30567:6;30563:14;30556:45;30439:169;:::o;30614:366::-;30756:3;30777:67;30841:2;30836:3;30777:67;:::i;:::-;30770:74;;30853:93;30942:3;30853:93;:::i;:::-;30971:2;30966:3;30962:12;30955:19;;30614:366;;;:::o;30986:419::-;31152:4;31190:2;31179:9;31175:18;31167:26;;31239:9;31233:4;31229:20;31225:1;31214:9;31210:17;31203:47;31267:131;31393:4;31267:131;:::i;:::-;31259:139;;30986:419;;;:::o;31411:241::-;31551:34;31547:1;31539:6;31535:14;31528:58;31620:24;31615:2;31607:6;31603:15;31596:49;31411:241;:::o;31658:366::-;31800:3;31821:67;31885:2;31880:3;31821:67;:::i;:::-;31814:74;;31897:93;31986:3;31897:93;:::i;:::-;32015:2;32010:3;32006:12;31999:19;;31658:366;;;:::o;32030:419::-;32196:4;32234:2;32223:9;32219:18;32211:26;;32283:9;32277:4;32273:20;32269:1;32258:9;32254:17;32247:47;32311:131;32437:4;32311:131;:::i;:::-;32303:139;;32030:419;;;:::o;32455:194::-;32495:4;32515:20;32533:1;32515:20;:::i;:::-;32510:25;;32549:20;32567:1;32549:20;:::i;:::-;32544:25;;32593:1;32590;32586:9;32578:17;;32617:1;32611:4;32608:11;32605:37;;;32622:18;;:::i;:::-;32605:37;32455:194;;;;:::o;32655:225::-;32795:34;32791:1;32783:6;32779:14;32772:58;32864:8;32859:2;32851:6;32847:15;32840:33;32655:225;:::o;32886:366::-;33028:3;33049:67;33113:2;33108:3;33049:67;:::i;:::-;33042:74;;33125:93;33214:3;33125:93;:::i;:::-;33243:2;33238:3;33234:12;33227:19;;32886:366;;;:::o;33258:419::-;33424:4;33462:2;33451:9;33447:18;33439:26;;33511:9;33505:4;33501:20;33497:1;33486:9;33482:17;33475:47;33539:131;33665:4;33539:131;:::i;:::-;33531:139;;33258:419;;;:::o

Swarm Source

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