ETH Price: $2,937.41 (-1.12%)
 

Overview

Max Total Supply

100,000,000 ZOOMER

Holders

19,283

Transfers

-
1 ( -66.67%)

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
Zoomer

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-05-09
*/

/*
 * SPDX-License-Identifier: MIT
*/

pragma solidity 0.8.19;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IDexFactory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

contract Zoomer is Context, ERC20, Ownable {
    using SafeMath for uint256;
    mapping(address => bool) private _isExcludedFromFee;
    address payable private _taxWallet;
    uint256 firstBlock;

    uint64 private lastLiquifyTime;

    uint256 private buyFee = 20;
    uint256 private sellFee = 60;
    uint256 private _preventSwapBefore = 1;
    uint256 private _buyCount = 0;

    uint256 private _txAmountLimit;
    uint256 private _walletAmountLimit;
    uint256 private _swapbackMin;
    uint256 private _swapbackMax;

    IDexRouter private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;

    event MaxTxAmountUpdated(uint _txAmountLimit);
    event MaxWalletAmountUpdated(uint _walletAmountLimit);
    event FeesUpdated(uint buyFee, uint sellFee);
    event SwapbackUpdated(uint _swapbackMin, uint _swapbackMax);
    event FeeReceiverUpdated(address _taxWallet);
    event ExcludedFromFee(address account, bool status);
    event LimitsRemoved();
    event TradingOpened();

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() ERC20("Zoomer", "ZOOMER") {
        uint256 _totalSupply = 100_000_000 * 10 ** 18;

        _txAmountLimit = (_totalSupply * 20) / 1000;
        _walletAmountLimit = (_totalSupply * 20) / 1000;
        _swapbackMin = (_totalSupply * 5) / 10000;
        _swapbackMax = (_totalSupply * 300) / 10000;
        _taxWallet = payable(0x5bbfE9c3ea7033B8f9E27f94eE8c63b45DdF2e30);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

        _mint(_msgSender(), _totalSupply);
    }

    receive() external payable {}

    function setTrading() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        uniswapV2Router = IDexRouter(
            0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24
        );
        _approve(address(this), address(uniswapV2Router), totalSupply());
        uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0,
            0,
            owner(),
            block.timestamp
        );
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        swapEnabled = true;
        tradingOpen = true;
        firstBlock = block.number;
        lastLiquifyTime = uint64(block.number);
        _isExcludedFromFee[address(this)] = true;
        buyFee = 30;
        emit TradingOpened();
    }

    function changeWall(address payable marketingWallet) external onlyOwner {
        _taxWallet = marketingWallet;

        emit FeeReceiverUpdated(marketingWallet);
    }

    function changeTxAmount(uint256 newValue) external onlyOwner {
        require(newValue >= 1, "Max tx cant be lower than 0.1%");
        _txAmountLimit = (totalSupply() * newValue) / 1000;
        emit MaxTxAmountUpdated(_txAmountLimit);
    }

    function changeWlltAmt(uint256 newValue) external onlyOwner {
        require(newValue >= 1, "Max wallet cant be lower than 0.1%");
        _walletAmountLimit = (totalSupply() * newValue) / 1000;
        emit MaxWalletAmountUpdated(_walletAmountLimit);
    }

    function changeRangeSB(
        uint256 taxSwapThreshold,
        uint256 maxTaxSwap
    ) external onlyOwner {
        _swapbackMin = (totalSupply() * taxSwapThreshold) / 10000;
        _swapbackMax = (totalSupply() * maxTaxSwap) / 10000;
        emit SwapbackUpdated(taxSwapThreshold, maxTaxSwap);
    }

    function rmvlimitsTxs() external onlyOwner {
        _txAmountLimit = totalSupply();
        _walletAmountLimit = totalSupply();
        emit MaxTxAmountUpdated(totalSupply());
        emit MaxWalletAmountUpdated(totalSupply());
    }

    function changeTaxes(uint256 buyTax, uint256 sellTax) external onlyOwner {
        require(buyTax <= 99, "Invalid buy tax value");
        require(sellTax <= 99, "Invalid sell tax value");
        buyFee = buyTax;
        sellFee = sellTax;
        emit FeesUpdated(buyTax, sellTax);
    }

    function rmvEth() external {
        require(msg.sender == _taxWallet, "Only fee receiver can trigger");
        _taxWallet.transfer(address(this).balance);
    }

    function setFeeWl(address account, bool status) external onlyOwner {
        _isExcludedFromFee[account] = status;
        emit ExcludedFromFee(account, status);
    }

    function viewInfo()
        external
        view
        returns (
            uint256 _buyFee,
            uint256 _sellFee,
            uint256 maxTxAmount,
            uint256 maxWalletSize,
            uint256 taxSwapThreshold,
            uint256 maxTaxSwap
        )
    {
        return (
            buyFee,
            sellFee,
            _txAmountLimit,
            _walletAmountLimit,
            _swapbackMin,
            _swapbackMax
        );
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount = 0;
        if (from != owner() && to != owner() && !inSwap) {
            
            taxAmount = amount.mul(buyFee).div(100);

            if (
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                !_isExcludedFromFee[to]
            ) {
                require(amount <= _txAmountLimit, "Exceeds the _txAmountLimit.");
                require(
                    balanceOf(to) + amount <= _walletAmountLimit,
                    "Exceeds the maxWalletSize."
                );

                if (firstBlock + 3 > block.number) {
                    require(!isContract(to));
                }
                _buyCount++;
            }

            if (to != uniswapV2Pair && !_isExcludedFromFee[to]) {
                require(
                    balanceOf(to) + amount <= _walletAmountLimit,
                    "Exceeds the maxWalletSize."
                );
            }

            if (to == uniswapV2Pair && from != address(this)) {
                taxAmount = amount.mul(sellFee).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (
                !inSwap &&
                to == uniswapV2Pair &&
                swapEnabled &&
                contractTokenBalance > _swapbackMin &&
                _buyCount > _preventSwapBefore &&
                lastLiquifyTime != uint64(block.number)
            ) {
                swapTokensForEth(min(contractTokenBalance, _swapbackMax));
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee();
                }
            }
        }

        if (taxAmount > 0) {
            super._transfer(from, address(this), taxAmount);
        }
        super._transfer(from, to, amount.sub(taxAmount));
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function isContract(address account) private view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function triggerSwap() external {
        require(
            msg.sender == _taxWallet || msg.sender == owner(),
            "Only fee receiver can trigger"
        );
        uint256 contractTokenBalance = balanceOf(address(this));

        swapTokensForEth(contractTokenBalance);
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFee();
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        lastLiquifyTime = uint64(block.number);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee() private {
        bool success;
        (success, ) = address(_taxWallet).call{value: address(this).balance}(
            ""
        );
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_taxWallet","type":"address"}],"name":"FeeReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_txAmountLimit","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_walletAmountLimit","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":false,"internalType":"uint256","name":"_swapbackMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_swapbackMax","type":"uint256"}],"name":"SwapbackUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"changeRangeSB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"changeTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"changeWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeWlltAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmvEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmvlimitsTxs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setFeeWl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewInfo","outputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526014600a55603c600b556001600c556000600d556000601360156101000a81548160ff0219169083151502179055506000601360166101000a81548160ff0219169083151502179055503480156200005b57600080fd5b506040518060400160405280600681526020017f5a6f6f6d657200000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f5a4f4f4d455200000000000000000000000000000000000000000000000000008152508160039081620000d9919062000859565b508060049081620000eb919062000859565b5050506200010e620001026200036560201b60201c565b6200036d60201b60201c565b60006a52b7d2dcc80cd2e400000090506103e86014826200013091906200096f565b6200013c9190620009e9565b600e819055506103e86014826200015491906200096f565b620001609190620009e9565b600f819055506127106005826200017891906200096f565b620001849190620009e9565b60108190555061271061012c826200019d91906200096f565b620001a99190620009e9565b601181905550735bbfe9c3ea7033b8f9e27f94ee8c63b45ddf2e30600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660006200021a6200043360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200035e620003516200036560201b60201c565b826200045d60201b60201c565b5062000b0d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004c69062000a82565b60405180910390fd5b620004e360008383620005d560201b60201c565b8060026000828254620004f7919062000aa4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200054e919062000aa4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005b5919062000af0565b60405180910390a3620005d160008383620005da60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200066157607f821691505b60208210810362000677576200067662000619565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006a2565b620006ed8683620006a2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200073a620007346200072e8462000705565b6200070f565b62000705565b9050919050565b6000819050919050565b620007568362000719565b6200076e620007658262000741565b848454620006af565b825550505050565b600090565b6200078562000776565b620007928184846200074b565b505050565b5b81811015620007ba57620007ae6000826200077b565b60018101905062000798565b5050565b601f8211156200080957620007d3816200067d565b620007de8462000692565b81016020851015620007ee578190505b62000806620007fd8562000692565b83018262000797565b50505b505050565b600082821c905092915050565b60006200082e600019846008026200080e565b1980831691505092915050565b60006200084983836200081b565b9150826002028217905092915050565b6200086482620005df565b67ffffffffffffffff81111562000880576200087f620005ea565b5b6200088c825462000648565b62000899828285620007be565b600060209050601f831160018114620008d15760008415620008bc578287015190505b620008c885826200083b565b86555062000938565b601f198416620008e1866200067d565b60005b828110156200090b57848901518255600182019150602085019450602081019050620008e4565b868310156200092b578489015162000927601f8916826200081b565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200097c8262000705565b9150620009898362000705565b9250828202620009998162000705565b91508282048414831517620009b357620009b262000940565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620009f68262000705565b915062000a038362000705565b92508262000a165762000a15620009ba565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a6a601f8362000a21565b915062000a778262000a32565b602082019050919050565b6000602082019050818103600083015262000a9d8162000a5b565b9050919050565b600062000ab18262000705565b915062000abe8362000705565b925082820190508082111562000ad95762000ad862000940565b5b92915050565b62000aea8162000705565b82525050565b600060208201905062000b07600083018462000adf565b92915050565b613fab8062000b1d6000396000f3fe60806040526004361061016a5760003560e01c80638f937cc4116100d1578063ae6014801161008a578063f2fde38b11610064578063f2fde38b14610516578063fc136e9e1461053f578063fe03a53114610568578063fe2314d61461059157610171565b8063ae60148014610480578063bbd23307146104b0578063dd62ed3e146104d957610171565b80638f937cc41461038457806395d89b411461039b578063a457c2d7146103c6578063a6dcb90f14610403578063a9059cbb1461041a578063a91f47be1461045757610171565b8063395093511161012357806339509351146102885780634db2e1a8146102c557806370a08231146102ee578063715018a61461032b5780637c519ffb146103425780638da5cb5b1461035957610171565b806306fdde0314610176578063095ea7b3146101a15780630f6d0e4c146101de57806318160ddd146101f557806323b872dd14610220578063313ce5671461025d57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b6105ba565b6040516101989190612bfd565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c39190612cb8565b61064c565b6040516101d59190612d13565b60405180910390f35b3480156101ea57600080fd5b506101f361066a565b005b34801561020157600080fd5b5061020a610780565b6040516102179190612d3d565b60405180910390f35b34801561022c57600080fd5b5061024760048036038101906102429190612d58565b61078a565b6040516102549190612d13565b60405180910390f35b34801561026957600080fd5b50610272610882565b60405161027f9190612dc7565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190612cb8565b61088b565b6040516102bc9190612d13565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190612de2565b610937565b005b3480156102fa57600080fd5b5061031560048036038101906103109190612e22565b610a3c565b6040516103229190612d3d565b60405180910390f35b34801561033757600080fd5b50610340610a84565b005b34801561034e57600080fd5b50610357610b0c565b005b34801561036557600080fd5b5061036e6110d2565b60405161037b9190612e5e565b60405180910390f35b34801561039057600080fd5b506103996110fc565b005b3480156103a757600080fd5b506103b06111fa565b6040516103bd9190612bfd565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e89190612cb8565b61128c565b6040516103fa9190612d13565b60405180910390f35b34801561040f57600080fd5b50610418611377565b005b34801561042657600080fd5b50610441600480360381019061043c9190612cb8565b611472565b60405161044e9190612d13565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190612e79565b611490565b005b34801561048c57600080fd5b506104956115b2565b6040516104a796959493929190612ea6565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d29190612f33565b6115e1565b005b3480156104e557600080fd5b5061050060048036038101906104fb9190612f73565b6116f1565b60405161050d9190612d3d565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190612e22565b611778565b005b34801561054b57600080fd5b5061056660048036038101906105619190612ff1565b61186f565b005b34801561057457600080fd5b5061058f600480360381019061058a9190612e79565b611966565b005b34801561059d57600080fd5b506105b860048036038101906105b39190612de2565b611a88565b005b6060600380546105c99061304d565b80601f01602080910402602001604051908101604052809291908181526020018280546105f59061304d565b80156106425780601f1061061757610100808354040283529160200191610642565b820191906000526020600020905b81548152906001019060200180831161062557829003601f168201915b5050505050905090565b6000610660610659611bd7565b8484611bdf565b6001905092915050565b610672611bd7565b73ffffffffffffffffffffffffffffffffffffffff166106906110d2565b73ffffffffffffffffffffffffffffffffffffffff16146106e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dd906130ca565b60405180910390fd5b6106ee610780565b600e819055506106fc610780565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf61072b610780565b6040516107389190612d3d565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001610769610780565b6040516107769190612d3d565b60405180910390a1565b6000600254905090565b6000610797848484611da8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107e2611bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610862576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108599061315c565b60405180910390fd5b6108768561086e611bd7565b858403611bdf565b60019150509392505050565b60006012905090565b600061092d610898611bd7565b8484600160006108a6611bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461092891906131ab565b611bdf565b6001905092915050565b61093f611bd7565b73ffffffffffffffffffffffffffffffffffffffff1661095d6110d2565b73ffffffffffffffffffffffffffffffffffffffff16146109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa906130ca565b60405180910390fd5b612710826109bf610780565b6109c991906131df565b6109d39190613250565b601081905550612710816109e5610780565b6109ef91906131df565b6109f99190613250565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb18282604051610a30929190613281565b60405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a8c611bd7565b73ffffffffffffffffffffffffffffffffffffffff16610aaa6110d2565b73ffffffffffffffffffffffffffffffffffffffff1614610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af7906130ca565b60405180910390fd5b610b0a600061247b565b565b610b14611bd7565b73ffffffffffffffffffffffffffffffffffffffff16610b326110d2565b73ffffffffffffffffffffffffffffffffffffffff1614610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f906130ca565b60405180910390fd5b601360149054906101000a900460ff1615610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf906132f6565b60405180910390fd5b734752ba5dbc23f44d87826276bf6fd6b1c372ad24601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c6130601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610c5c610780565b611bdf565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf2919061332b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9f919061332b565b6040518363ffffffff1660e01b8152600401610dbc929190613358565b6020604051808303816000875af1158015610ddb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dff919061332b565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610e8830610a3c565b600080610e936110d2565b426040518863ffffffff1660e01b8152600401610eb5969594939291906133c6565b60606040518083038185885af1158015610ed3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ef8919061343c565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610f9a92919061348f565b6020604051808303816000875af1158015610fb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdd91906134cd565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601e600a819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061118a575061115b6110d2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090613546565b60405180910390fd5b60006111d430610a3c565b90506111df81612541565b600047905060008111156111f6576111f56127e3565b5b5050565b6060600480546112099061304d565b80601f01602080910402602001604051908101604052809291908181526020018280546112359061304d565b80156112825780601f1061125757610100808354040283529160200191611282565b820191906000526020600020905b81548152906001019060200180831161126557829003601f168201915b5050505050905090565b6000806001600061129b611bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f906135d8565b60405180910390fd5b61136c611363611bd7565b85858403611bdf565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90613546565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561146f573d6000803e3d6000fd5b50565b600061148661147f611bd7565b8484611da8565b6001905092915050565b611498611bd7565b73ffffffffffffffffffffffffffffffffffffffff166114b66110d2565b73ffffffffffffffffffffffffffffffffffffffff161461150c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611503906130ca565b60405180910390fd5b6001811015611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790613644565b60405180910390fd5b6103e88161155c610780565b61156691906131df565b6115709190613250565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e546040516115a79190612d3d565b60405180910390a150565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6115e9611bd7565b73ffffffffffffffffffffffffffffffffffffffff166116076110d2565b73ffffffffffffffffffffffffffffffffffffffff161461165d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611654906130ca565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa982826040516116e5929190613664565b60405180910390a15050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611780611bd7565b73ffffffffffffffffffffffffffffffffffffffff1661179e6110d2565b73ffffffffffffffffffffffffffffffffffffffff16146117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb906130ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185a906136ff565b60405180910390fd5b61186c8161247b565b50565b611877611bd7565b73ffffffffffffffffffffffffffffffffffffffff166118956110d2565b73ffffffffffffffffffffffffffffffffffffffff16146118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e2906130ca565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee8160405161195b9190613774565b60405180910390a150565b61196e611bd7565b73ffffffffffffffffffffffffffffffffffffffff1661198c6110d2565b73ffffffffffffffffffffffffffffffffffffffff16146119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d9906130ca565b60405180910390fd5b6001811015611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d90613801565b60405180910390fd5b6103e881611a32610780565b611a3c91906131df565b611a469190613250565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f54604051611a7d9190612d3d565b60405180910390a150565b611a90611bd7565b73ffffffffffffffffffffffffffffffffffffffff16611aae6110d2565b73ffffffffffffffffffffffffffffffffffffffff1614611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb906130ca565b60405180910390fd5b6063821115611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f9061386d565b60405180910390fd5b6063811115611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b83906138d9565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611bcb929190613281565b60405180910390a15050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c459061396b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb4906139fd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d9b9190612d3d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90613a8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90613b21565b60405180910390fd5b60008111611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec090613bb3565b60405180910390fd5b6000611ed36110d2565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611f415750611f116110d2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611f5a5750601360159054906101000a900460ff16155b1561244357611f876064611f79600a548561287690919063ffffffff16565b61288c90919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156120345750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561208a5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561216f57600e548211156120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90613c1f565b60405180910390fd5b600f54826120e185610a3c565b6120eb91906131ab565b111561212c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212390613c8b565b60405180910390fd5b43600360085461213c91906131ab565b11156121565761214b836128a2565b1561215557600080fd5b5b600d600081548092919061216990613cab565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122175750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561227557600f548261222985610a3c565b61223391906131ab565b1115612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b90613c8b565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156122fe57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561232e5761232b606461231d600b548561287690919063ffffffff16565b61288c90919063ffffffff16565b90505b600061233930610a3c565b9050601360159054906101000a900460ff161580156123a55750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156123bd5750601360169054906101000a900460ff165b80156123ca575060105481115b80156123d95750600c54600d54115b801561240f57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b1561244157612428612423826011546128b5565b612541565b6000479050600081111561243f5761243e6127e3565b5b505b505b6000811115612458576124578430836128ce565b5b61247584846124708486612b4d90919063ffffffff16565b6128ce565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff8111156125a2576125a1613cf3565b5b6040519080825280602002602001820160405280156125d05781602001602082028036833780820191505090505b50905030816000815181106125e8576125e7613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b3919061332b565b816001815181106126c7576126c6613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061272e30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611bdf565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612792959493929190613e0f565b600060405180830381600087803b1580156127ac57600080fd5b505af11580156127c0573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161282b90613e9a565b60006040518083038185875af1925050503d8060008114612868576040519150601f19603f3d011682016040523d82523d6000602084013e61286d565b606091505b50508091505050565b6000818361288491906131df565b905092915050565b6000818361289a9190613250565b905092915050565b600080823b905060008111915050919050565b60008183116128c457826128c6565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490613a8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a390613b21565b60405180910390fd5b6129b7838383612b63565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3490613f21565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad091906131ab565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b349190612d3d565b60405180910390a3612b47848484612b68565b50505050565b60008183612b5b9190613f41565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ba7578082015181840152602081019050612b8c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612bcf82612b6d565b612bd98185612b78565b9350612be9818560208601612b89565b612bf281612bb3565b840191505092915050565b60006020820190508181036000830152612c178184612bc4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4f82612c24565b9050919050565b612c5f81612c44565b8114612c6a57600080fd5b50565b600081359050612c7c81612c56565b92915050565b6000819050919050565b612c9581612c82565b8114612ca057600080fd5b50565b600081359050612cb281612c8c565b92915050565b60008060408385031215612ccf57612cce612c1f565b5b6000612cdd85828601612c6d565b9250506020612cee85828601612ca3565b9150509250929050565b60008115159050919050565b612d0d81612cf8565b82525050565b6000602082019050612d286000830184612d04565b92915050565b612d3781612c82565b82525050565b6000602082019050612d526000830184612d2e565b92915050565b600080600060608486031215612d7157612d70612c1f565b5b6000612d7f86828701612c6d565b9350506020612d9086828701612c6d565b9250506040612da186828701612ca3565b9150509250925092565b600060ff82169050919050565b612dc181612dab565b82525050565b6000602082019050612ddc6000830184612db8565b92915050565b60008060408385031215612df957612df8612c1f565b5b6000612e0785828601612ca3565b9250506020612e1885828601612ca3565b9150509250929050565b600060208284031215612e3857612e37612c1f565b5b6000612e4684828501612c6d565b91505092915050565b612e5881612c44565b82525050565b6000602082019050612e736000830184612e4f565b92915050565b600060208284031215612e8f57612e8e612c1f565b5b6000612e9d84828501612ca3565b91505092915050565b600060c082019050612ebb6000830189612d2e565b612ec86020830188612d2e565b612ed56040830187612d2e565b612ee26060830186612d2e565b612eef6080830185612d2e565b612efc60a0830184612d2e565b979650505050505050565b612f1081612cf8565b8114612f1b57600080fd5b50565b600081359050612f2d81612f07565b92915050565b60008060408385031215612f4a57612f49612c1f565b5b6000612f5885828601612c6d565b9250506020612f6985828601612f1e565b9150509250929050565b60008060408385031215612f8a57612f89612c1f565b5b6000612f9885828601612c6d565b9250506020612fa985828601612c6d565b9150509250929050565b6000612fbe82612c24565b9050919050565b612fce81612fb3565b8114612fd957600080fd5b50565b600081359050612feb81612fc5565b92915050565b60006020828403121561300757613006612c1f565b5b600061301584828501612fdc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061306557607f821691505b6020821081036130785761307761301e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130b4602083612b78565b91506130bf8261307e565b602082019050919050565b600060208201905081810360008301526130e3816130a7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613146602883612b78565b9150613151826130ea565b604082019050919050565b6000602082019050818103600083015261317581613139565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131b682612c82565b91506131c183612c82565b92508282019050808211156131d9576131d861317c565b5b92915050565b60006131ea82612c82565b91506131f583612c82565b925082820261320381612c82565b9150828204841483151761321a5761321961317c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061325b82612c82565b915061326683612c82565b92508261327657613275613221565b5b828204905092915050565b60006040820190506132966000830185612d2e565b6132a36020830184612d2e565b9392505050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b60006132e0601783612b78565b91506132eb826132aa565b602082019050919050565b6000602082019050818103600083015261330f816132d3565b9050919050565b60008151905061332581612c56565b92915050565b60006020828403121561334157613340612c1f565b5b600061334f84828501613316565b91505092915050565b600060408201905061336d6000830185612e4f565b61337a6020830184612e4f565b9392505050565b6000819050919050565b6000819050919050565b60006133b06133ab6133a684613381565b61338b565b612c82565b9050919050565b6133c081613395565b82525050565b600060c0820190506133db6000830189612e4f565b6133e86020830188612d2e565b6133f560408301876133b7565b61340260608301866133b7565b61340f6080830185612e4f565b61341c60a0830184612d2e565b979650505050505050565b60008151905061343681612c8c565b92915050565b60008060006060848603121561345557613454612c1f565b5b600061346386828701613427565b935050602061347486828701613427565b925050604061348586828701613427565b9150509250925092565b60006040820190506134a46000830185612e4f565b6134b16020830184612d2e565b9392505050565b6000815190506134c781612f07565b92915050565b6000602082840312156134e3576134e2612c1f565b5b60006134f1848285016134b8565b91505092915050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b6000613530601d83612b78565b915061353b826134fa565b602082019050919050565b6000602082019050818103600083015261355f81613523565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006135c2602583612b78565b91506135cd82613566565b604082019050919050565b600060208201905081810360008301526135f1816135b5565b9050919050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b600061362e601e83612b78565b9150613639826135f8565b602082019050919050565b6000602082019050818103600083015261365d81613621565b9050919050565b60006040820190506136796000830185612e4f565b6136866020830184612d04565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006136e9602683612b78565b91506136f48261368d565b604082019050919050565b60006020820190508181036000830152613718816136dc565b9050919050565b600061373a61373561373084612c24565b61338b565b612c24565b9050919050565b600061374c8261371f565b9050919050565b600061375e82613741565b9050919050565b61376e81613753565b82525050565b60006020820190506137896000830184613765565b92915050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006137eb602283612b78565b91506137f68261378f565b604082019050919050565b6000602082019050818103600083015261381a816137de565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613857601583612b78565b915061386282613821565b602082019050919050565b600060208201905081810360008301526138868161384a565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b60006138c3601683612b78565b91506138ce8261388d565b602082019050919050565b600060208201905081810360008301526138f2816138b6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613955602483612b78565b9150613960826138f9565b604082019050919050565b6000602082019050818103600083015261398481613948565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139e7602283612b78565b91506139f28261398b565b604082019050919050565b60006020820190508181036000830152613a16816139da565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613a79602583612b78565b9150613a8482613a1d565b604082019050919050565b60006020820190508181036000830152613aa881613a6c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b0b602383612b78565b9150613b1682613aaf565b604082019050919050565b60006020820190508181036000830152613b3a81613afe565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613b9d602983612b78565b9150613ba882613b41565b604082019050919050565b60006020820190508181036000830152613bcc81613b90565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000613c09601b83612b78565b9150613c1482613bd3565b602082019050919050565b60006020820190508181036000830152613c3881613bfc565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000613c75601a83612b78565b9150613c8082613c3f565b602082019050919050565b60006020820190508181036000830152613ca481613c68565b9050919050565b6000613cb682612c82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ce857613ce761317c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d8681612c44565b82525050565b6000613d988383613d7d565b60208301905092915050565b6000602082019050919050565b6000613dbc82613d51565b613dc68185613d5c565b9350613dd183613d6d565b8060005b83811015613e02578151613de98882613d8c565b9750613df483613da4565b925050600181019050613dd5565b5085935050505092915050565b600060a082019050613e246000830188612d2e565b613e3160208301876133b7565b8181036040830152613e438186613db1565b9050613e526060830185612e4f565b613e5f6080830184612d2e565b9695505050505050565b600081905092915050565b50565b6000613e84600083613e69565b9150613e8f82613e74565b600082019050919050565b6000613ea582613e77565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f0b602683612b78565b9150613f1682613eaf565b604082019050919050565b60006020820190508181036000830152613f3a81613efe565b9050919050565b6000613f4c82612c82565b9150613f5783612c82565b9250828203905081811115613f6f57613f6e61317c565b5b9291505056fea2646970667358221220d992b81149ab19b8450b26375a88d8e5ba01af4c51d914f5ff1abf3d4c978ed664736f6c63430008130033

Deployed Bytecode

0x60806040526004361061016a5760003560e01c80638f937cc4116100d1578063ae6014801161008a578063f2fde38b11610064578063f2fde38b14610516578063fc136e9e1461053f578063fe03a53114610568578063fe2314d61461059157610171565b8063ae60148014610480578063bbd23307146104b0578063dd62ed3e146104d957610171565b80638f937cc41461038457806395d89b411461039b578063a457c2d7146103c6578063a6dcb90f14610403578063a9059cbb1461041a578063a91f47be1461045757610171565b8063395093511161012357806339509351146102885780634db2e1a8146102c557806370a08231146102ee578063715018a61461032b5780637c519ffb146103425780638da5cb5b1461035957610171565b806306fdde0314610176578063095ea7b3146101a15780630f6d0e4c146101de57806318160ddd146101f557806323b872dd14610220578063313ce5671461025d57610171565b3661017157005b600080fd5b34801561018257600080fd5b5061018b6105ba565b6040516101989190612bfd565b60405180910390f35b3480156101ad57600080fd5b506101c860048036038101906101c39190612cb8565b61064c565b6040516101d59190612d13565b60405180910390f35b3480156101ea57600080fd5b506101f361066a565b005b34801561020157600080fd5b5061020a610780565b6040516102179190612d3d565b60405180910390f35b34801561022c57600080fd5b5061024760048036038101906102429190612d58565b61078a565b6040516102549190612d13565b60405180910390f35b34801561026957600080fd5b50610272610882565b60405161027f9190612dc7565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190612cb8565b61088b565b6040516102bc9190612d13565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e79190612de2565b610937565b005b3480156102fa57600080fd5b5061031560048036038101906103109190612e22565b610a3c565b6040516103229190612d3d565b60405180910390f35b34801561033757600080fd5b50610340610a84565b005b34801561034e57600080fd5b50610357610b0c565b005b34801561036557600080fd5b5061036e6110d2565b60405161037b9190612e5e565b60405180910390f35b34801561039057600080fd5b506103996110fc565b005b3480156103a757600080fd5b506103b06111fa565b6040516103bd9190612bfd565b60405180910390f35b3480156103d257600080fd5b506103ed60048036038101906103e89190612cb8565b61128c565b6040516103fa9190612d13565b60405180910390f35b34801561040f57600080fd5b50610418611377565b005b34801561042657600080fd5b50610441600480360381019061043c9190612cb8565b611472565b60405161044e9190612d13565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190612e79565b611490565b005b34801561048c57600080fd5b506104956115b2565b6040516104a796959493929190612ea6565b60405180910390f35b3480156104bc57600080fd5b506104d760048036038101906104d29190612f33565b6115e1565b005b3480156104e557600080fd5b5061050060048036038101906104fb9190612f73565b6116f1565b60405161050d9190612d3d565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190612e22565b611778565b005b34801561054b57600080fd5b5061056660048036038101906105619190612ff1565b61186f565b005b34801561057457600080fd5b5061058f600480360381019061058a9190612e79565b611966565b005b34801561059d57600080fd5b506105b860048036038101906105b39190612de2565b611a88565b005b6060600380546105c99061304d565b80601f01602080910402602001604051908101604052809291908181526020018280546105f59061304d565b80156106425780601f1061061757610100808354040283529160200191610642565b820191906000526020600020905b81548152906001019060200180831161062557829003601f168201915b5050505050905090565b6000610660610659611bd7565b8484611bdf565b6001905092915050565b610672611bd7565b73ffffffffffffffffffffffffffffffffffffffff166106906110d2565b73ffffffffffffffffffffffffffffffffffffffff16146106e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106dd906130ca565b60405180910390fd5b6106ee610780565b600e819055506106fc610780565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf61072b610780565b6040516107389190612d3d565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001610769610780565b6040516107769190612d3d565b60405180910390a1565b6000600254905090565b6000610797848484611da8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107e2611bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610862576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108599061315c565b60405180910390fd5b6108768561086e611bd7565b858403611bdf565b60019150509392505050565b60006012905090565b600061092d610898611bd7565b8484600160006108a6611bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461092891906131ab565b611bdf565b6001905092915050565b61093f611bd7565b73ffffffffffffffffffffffffffffffffffffffff1661095d6110d2565b73ffffffffffffffffffffffffffffffffffffffff16146109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa906130ca565b60405180910390fd5b612710826109bf610780565b6109c991906131df565b6109d39190613250565b601081905550612710816109e5610780565b6109ef91906131df565b6109f99190613250565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb18282604051610a30929190613281565b60405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a8c611bd7565b73ffffffffffffffffffffffffffffffffffffffff16610aaa6110d2565b73ffffffffffffffffffffffffffffffffffffffff1614610b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af7906130ca565b60405180910390fd5b610b0a600061247b565b565b610b14611bd7565b73ffffffffffffffffffffffffffffffffffffffff16610b326110d2565b73ffffffffffffffffffffffffffffffffffffffff1614610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f906130ca565b60405180910390fd5b601360149054906101000a900460ff1615610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf906132f6565b60405180910390fd5b734752ba5dbc23f44d87826276bf6fd6b1c372ad24601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610c6130601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610c5c610780565b611bdf565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf2919061332b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9f919061332b565b6040518363ffffffff1660e01b8152600401610dbc929190613358565b6020604051808303816000875af1158015610ddb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dff919061332b565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610e8830610a3c565b600080610e936110d2565b426040518863ffffffff1660e01b8152600401610eb5969594939291906133c6565b60606040518083038185885af1158015610ed3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ef8919061343c565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610f9a92919061348f565b6020604051808303816000875af1158015610fb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdd91906134cd565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601e600a819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061118a575061115b6110d2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c090613546565b60405180910390fd5b60006111d430610a3c565b90506111df81612541565b600047905060008111156111f6576111f56127e3565b5b5050565b6060600480546112099061304d565b80601f01602080910402602001604051908101604052809291908181526020018280546112359061304d565b80156112825780601f1061125757610100808354040283529160200191611282565b820191906000526020600020905b81548152906001019060200180831161126557829003601f168201915b5050505050905090565b6000806001600061129b611bd7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134f906135d8565b60405180910390fd5b61136c611363611bd7565b85858403611bdf565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fe90613546565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561146f573d6000803e3d6000fd5b50565b600061148661147f611bd7565b8484611da8565b6001905092915050565b611498611bd7565b73ffffffffffffffffffffffffffffffffffffffff166114b66110d2565b73ffffffffffffffffffffffffffffffffffffffff161461150c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611503906130ca565b60405180910390fd5b6001811015611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790613644565b60405180910390fd5b6103e88161155c610780565b61156691906131df565b6115709190613250565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e546040516115a79190612d3d565b60405180910390a150565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6115e9611bd7565b73ffffffffffffffffffffffffffffffffffffffff166116076110d2565b73ffffffffffffffffffffffffffffffffffffffff161461165d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611654906130ca565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa982826040516116e5929190613664565b60405180910390a15050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611780611bd7565b73ffffffffffffffffffffffffffffffffffffffff1661179e6110d2565b73ffffffffffffffffffffffffffffffffffffffff16146117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb906130ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185a906136ff565b60405180910390fd5b61186c8161247b565b50565b611877611bd7565b73ffffffffffffffffffffffffffffffffffffffff166118956110d2565b73ffffffffffffffffffffffffffffffffffffffff16146118eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e2906130ca565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee8160405161195b9190613774565b60405180910390a150565b61196e611bd7565b73ffffffffffffffffffffffffffffffffffffffff1661198c6110d2565b73ffffffffffffffffffffffffffffffffffffffff16146119e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d9906130ca565b60405180910390fd5b6001811015611a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1d90613801565b60405180910390fd5b6103e881611a32610780565b611a3c91906131df565b611a469190613250565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f54604051611a7d9190612d3d565b60405180910390a150565b611a90611bd7565b73ffffffffffffffffffffffffffffffffffffffff16611aae6110d2565b73ffffffffffffffffffffffffffffffffffffffff1614611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb906130ca565b60405180910390fd5b6063821115611b48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3f9061386d565b60405180910390fd5b6063811115611b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b83906138d9565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611bcb929190613281565b60405180910390a15050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c459061396b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb4906139fd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d9b9190612d3d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90613a8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7d90613b21565b60405180910390fd5b60008111611ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec090613bb3565b60405180910390fd5b6000611ed36110d2565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611f415750611f116110d2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611f5a5750601360159054906101000a900460ff16155b1561244357611f876064611f79600a548561287690919063ffffffff16565b61288c90919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156120345750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561208a5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561216f57600e548211156120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90613c1f565b60405180910390fd5b600f54826120e185610a3c565b6120eb91906131ab565b111561212c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212390613c8b565b60405180910390fd5b43600360085461213c91906131ab565b11156121565761214b836128a2565b1561215557600080fd5b5b600d600081548092919061216990613cab565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122175750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561227557600f548261222985610a3c565b61223391906131ab565b1115612274576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226b90613c8b565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156122fe57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561232e5761232b606461231d600b548561287690919063ffffffff16565b61288c90919063ffffffff16565b90505b600061233930610a3c565b9050601360159054906101000a900460ff161580156123a55750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156123bd5750601360169054906101000a900460ff165b80156123ca575060105481115b80156123d95750600c54600d54115b801561240f57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b1561244157612428612423826011546128b5565b612541565b6000479050600081111561243f5761243e6127e3565b5b505b505b6000811115612458576124578430836128ce565b5b61247584846124708486612b4d90919063ffffffff16565b6128ce565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff8111156125a2576125a1613cf3565b5b6040519080825280602002602001820160405280156125d05781602001602082028036833780820191505090505b50905030816000815181106125e8576125e7613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561268f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b3919061332b565b816001815181106126c7576126c6613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061272e30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611bdf565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612792959493929190613e0f565b600060405180830381600087803b1580156127ac57600080fd5b505af11580156127c0573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161282b90613e9a565b60006040518083038185875af1925050503d8060008114612868576040519150601f19603f3d011682016040523d82523d6000602084013e61286d565b606091505b50508091505050565b6000818361288491906131df565b905092915050565b6000818361289a9190613250565b905092915050565b600080823b905060008111915050919050565b60008183116128c457826128c6565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361293d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293490613a8f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a390613b21565b60405180910390fd5b6129b7838383612b63565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612a3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3490613f21565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ad091906131ab565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b349190612d3d565b60405180910390a3612b47848484612b68565b50505050565b60008183612b5b9190613f41565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ba7578082015181840152602081019050612b8c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612bcf82612b6d565b612bd98185612b78565b9350612be9818560208601612b89565b612bf281612bb3565b840191505092915050565b60006020820190508181036000830152612c178184612bc4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c4f82612c24565b9050919050565b612c5f81612c44565b8114612c6a57600080fd5b50565b600081359050612c7c81612c56565b92915050565b6000819050919050565b612c9581612c82565b8114612ca057600080fd5b50565b600081359050612cb281612c8c565b92915050565b60008060408385031215612ccf57612cce612c1f565b5b6000612cdd85828601612c6d565b9250506020612cee85828601612ca3565b9150509250929050565b60008115159050919050565b612d0d81612cf8565b82525050565b6000602082019050612d286000830184612d04565b92915050565b612d3781612c82565b82525050565b6000602082019050612d526000830184612d2e565b92915050565b600080600060608486031215612d7157612d70612c1f565b5b6000612d7f86828701612c6d565b9350506020612d9086828701612c6d565b9250506040612da186828701612ca3565b9150509250925092565b600060ff82169050919050565b612dc181612dab565b82525050565b6000602082019050612ddc6000830184612db8565b92915050565b60008060408385031215612df957612df8612c1f565b5b6000612e0785828601612ca3565b9250506020612e1885828601612ca3565b9150509250929050565b600060208284031215612e3857612e37612c1f565b5b6000612e4684828501612c6d565b91505092915050565b612e5881612c44565b82525050565b6000602082019050612e736000830184612e4f565b92915050565b600060208284031215612e8f57612e8e612c1f565b5b6000612e9d84828501612ca3565b91505092915050565b600060c082019050612ebb6000830189612d2e565b612ec86020830188612d2e565b612ed56040830187612d2e565b612ee26060830186612d2e565b612eef6080830185612d2e565b612efc60a0830184612d2e565b979650505050505050565b612f1081612cf8565b8114612f1b57600080fd5b50565b600081359050612f2d81612f07565b92915050565b60008060408385031215612f4a57612f49612c1f565b5b6000612f5885828601612c6d565b9250506020612f6985828601612f1e565b9150509250929050565b60008060408385031215612f8a57612f89612c1f565b5b6000612f9885828601612c6d565b9250506020612fa985828601612c6d565b9150509250929050565b6000612fbe82612c24565b9050919050565b612fce81612fb3565b8114612fd957600080fd5b50565b600081359050612feb81612fc5565b92915050565b60006020828403121561300757613006612c1f565b5b600061301584828501612fdc565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061306557607f821691505b6020821081036130785761307761301e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130b4602083612b78565b91506130bf8261307e565b602082019050919050565b600060208201905081810360008301526130e3816130a7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613146602883612b78565b9150613151826130ea565b604082019050919050565b6000602082019050818103600083015261317581613139565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131b682612c82565b91506131c183612c82565b92508282019050808211156131d9576131d861317c565b5b92915050565b60006131ea82612c82565b91506131f583612c82565b925082820261320381612c82565b9150828204841483151761321a5761321961317c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061325b82612c82565b915061326683612c82565b92508261327657613275613221565b5b828204905092915050565b60006040820190506132966000830185612d2e565b6132a36020830184612d2e565b9392505050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b60006132e0601783612b78565b91506132eb826132aa565b602082019050919050565b6000602082019050818103600083015261330f816132d3565b9050919050565b60008151905061332581612c56565b92915050565b60006020828403121561334157613340612c1f565b5b600061334f84828501613316565b91505092915050565b600060408201905061336d6000830185612e4f565b61337a6020830184612e4f565b9392505050565b6000819050919050565b6000819050919050565b60006133b06133ab6133a684613381565b61338b565b612c82565b9050919050565b6133c081613395565b82525050565b600060c0820190506133db6000830189612e4f565b6133e86020830188612d2e565b6133f560408301876133b7565b61340260608301866133b7565b61340f6080830185612e4f565b61341c60a0830184612d2e565b979650505050505050565b60008151905061343681612c8c565b92915050565b60008060006060848603121561345557613454612c1f565b5b600061346386828701613427565b935050602061347486828701613427565b925050604061348586828701613427565b9150509250925092565b60006040820190506134a46000830185612e4f565b6134b16020830184612d2e565b9392505050565b6000815190506134c781612f07565b92915050565b6000602082840312156134e3576134e2612c1f565b5b60006134f1848285016134b8565b91505092915050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b6000613530601d83612b78565b915061353b826134fa565b602082019050919050565b6000602082019050818103600083015261355f81613523565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006135c2602583612b78565b91506135cd82613566565b604082019050919050565b600060208201905081810360008301526135f1816135b5565b9050919050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b600061362e601e83612b78565b9150613639826135f8565b602082019050919050565b6000602082019050818103600083015261365d81613621565b9050919050565b60006040820190506136796000830185612e4f565b6136866020830184612d04565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006136e9602683612b78565b91506136f48261368d565b604082019050919050565b60006020820190508181036000830152613718816136dc565b9050919050565b600061373a61373561373084612c24565b61338b565b612c24565b9050919050565b600061374c8261371f565b9050919050565b600061375e82613741565b9050919050565b61376e81613753565b82525050565b60006020820190506137896000830184613765565b92915050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b60006137eb602283612b78565b91506137f68261378f565b604082019050919050565b6000602082019050818103600083015261381a816137de565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613857601583612b78565b915061386282613821565b602082019050919050565b600060208201905081810360008301526138868161384a565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b60006138c3601683612b78565b91506138ce8261388d565b602082019050919050565b600060208201905081810360008301526138f2816138b6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613955602483612b78565b9150613960826138f9565b604082019050919050565b6000602082019050818103600083015261398481613948565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006139e7602283612b78565b91506139f28261398b565b604082019050919050565b60006020820190508181036000830152613a16816139da565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613a79602583612b78565b9150613a8482613a1d565b604082019050919050565b60006020820190508181036000830152613aa881613a6c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613b0b602383612b78565b9150613b1682613aaf565b604082019050919050565b60006020820190508181036000830152613b3a81613afe565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613b9d602983612b78565b9150613ba882613b41565b604082019050919050565b60006020820190508181036000830152613bcc81613b90565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000613c09601b83612b78565b9150613c1482613bd3565b602082019050919050565b60006020820190508181036000830152613c3881613bfc565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b6000613c75601a83612b78565b9150613c8082613c3f565b602082019050919050565b60006020820190508181036000830152613ca481613c68565b9050919050565b6000613cb682612c82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ce857613ce761317c565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613d8681612c44565b82525050565b6000613d988383613d7d565b60208301905092915050565b6000602082019050919050565b6000613dbc82613d51565b613dc68185613d5c565b9350613dd183613d6d565b8060005b83811015613e02578151613de98882613d8c565b9750613df483613da4565b925050600181019050613dd5565b5085935050505092915050565b600060a082019050613e246000830188612d2e565b613e3160208301876133b7565b8181036040830152613e438186613db1565b9050613e526060830185612e4f565b613e5f6080830184612d2e565b9695505050505050565b600081905092915050565b50565b6000613e84600083613e69565b9150613e8f82613e74565b600082019050919050565b6000613ea582613e77565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613f0b602683612b78565b9150613f1682613eaf565b604082019050919050565b60006020820190508181036000830152613f3a81613efe565b9050919050565b6000613f4c82612c82565b9150613f5783612c82565b9250828203905081811115613f6f57613f6e61317c565b5b9291505056fea2646970667358221220d992b81149ab19b8450b26375a88d8e5ba01af4c51d914f5ff1abf3d4c978ed664736f6c63430008130033

Deployed Bytecode Sourcemap

25321:9069:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10919:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13152:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29222:239;;;;;;;;;;;;;:::i;:::-;;12039:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13824:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11881:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14758:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28902:312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12210:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22258:103;;;;;;;;;;;;;:::i;:::-;;27184:1005;;;;;;;;;;;;;:::i;:::-;;21607:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33233:436;;;;;;;;;;;;;:::i;:::-;;11138:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15547:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29772:165;;;;;;;;;;;;;:::i;:::-;;12566:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28377:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30123:485;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;29945:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12829:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22516:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28197:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28632:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29469:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10919:100;10973:13;11006:5;10999:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10919:100;:::o;13152:194::-;13260:4;13277:39;13286:12;:10;:12::i;:::-;13300:7;13309:6;13277:8;:39::i;:::-;13334:4;13327:11;;13152:194;;;;:::o;29222:239::-;21838:12;:10;:12::i;:::-;21827:23;;:7;:5;:7::i;:::-;:23;;;21819:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29293:13:::1;:11;:13::i;:::-;29276:14;:30;;;;29338:13;:11;:13::i;:::-;29317:18;:34;;;;29367:33;29386:13;:11;:13::i;:::-;29367:33;;;;;;:::i;:::-;;;;;;;;29416:37;29439:13;:11;:13::i;:::-;29416:37;;;;;;:::i;:::-;;;;;;;;29222:239::o:0;12039:108::-;12100:7;12127:12;;12120:19;;12039:108;:::o;13824:529::-;13964:4;13981:36;13991:6;13999:9;14010:6;13981:9;:36::i;:::-;14030:24;14057:11;:19;14069:6;14057:19;;;;;;;;;;;;;;;:33;14077:12;:10;:12::i;:::-;14057:33;;;;;;;;;;;;;;;;14030:60;;14143:6;14123:16;:26;;14101:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14253:57;14262:6;14270:12;:10;:12::i;:::-;14303:6;14284:16;:25;14253:8;:57::i;:::-;14341:4;14334:11;;;13824:529;;;;;:::o;11881:93::-;11939:5;11964:2;11957:9;;11881:93;:::o;14758:290::-;14871:4;14888:130;14911:12;:10;:12::i;:::-;14938:7;14997:10;14960:11;:25;14972:12;:10;:12::i;:::-;14960:25;;;;;;;;;;;;;;;:34;14986:7;14960:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14888:8;:130::i;:::-;15036:4;15029:11;;14758:290;;;;:::o;28902:312::-;21838:12;:10;:12::i;:::-;21827:23;;:7;:5;:7::i;:::-;:23;;;21819:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29078:5:::1;29058:16;29042:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29041:42;;;;:::i;:::-;29026:12;:57;;;;29140:5;29126:10;29110:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29109:36;;;;:::i;:::-;29094:12;:51;;;;29161:45;29177:16;29195:10;29161:45;;;;;;;:::i;:::-;;;;;;;;28902:312:::0;;:::o;12210:143::-;12300:7;12327:9;:18;12337:7;12327:18;;;;;;;;;;;;;;;;12320:25;;12210:143;;;:::o;22258:103::-;21838:12;:10;:12::i;:::-;21827:23;;:7;:5;:7::i;:::-;:23;;;21819:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22323:30:::1;22350:1;22323:18;:30::i;:::-;22258:103::o:0;27184:1005::-;21838:12;:10;:12::i;:::-;21827:23;;:7;:5;:7::i;:::-;:23;;;21819:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27245:11:::1;;;;;;;;;;;27244:12;27236:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27338:42;27295:15;;:96;;;;;;;;;;;;;;;;;;27402:64;27419:4;27434:15;;;;;;;;;;;27452:13;:11;:13::i;:::-;27402:8;:64::i;:::-;27505:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27493:49;;;27565:4;27585:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27493:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27477:13;;:141;;;;;;;;;;;;;;;;;;27629:15;;;;;;;;;;;:31;;;27668:21;27713:4;27733:24;27751:4;27733:9;:24::i;:::-;27772:1;27788::::0;27804:7:::1;:5;:7::i;:::-;27826:15;27629:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27870:13;;;;;;;;;;;27863:29;;;27901:15;;;;;;;;;;;27919:14;27863:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27959:4;27945:11;;:18;;;;;;;;;;;;;;;;;;27988:4;27974:11;;:18;;;;;;;;;;;;;;;;;;28016:12;28003:10;:25;;;;28064:12;28039:15;;:38;;;;;;;;;;;;;;;;;;28124:4;28088:18;:33;28115:4;28088:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28148:2;28139:6;:11;;;;28166:15;;;;;;;;;;27184:1005::o:0;21607:87::-;21653:7;21680:6;;;;;;;;;;;21673:13;;21607:87;:::o;33233:436::-;33312:10;;;;;;;;;;;33298:24;;:10;:24;;;:49;;;;33340:7;:5;:7::i;:::-;33326:21;;:10;:21;;;33298:49;33276:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;33415:28;33446:24;33464:4;33446:9;:24::i;:::-;33415:55;;33483:38;33500:20;33483:16;:38::i;:::-;33532:26;33561:21;33532:50;;33618:1;33597:18;:22;33593:69;;;33636:14;:12;:14::i;:::-;33593:69;33265:404;;33233:436::o;11138:104::-;11194:13;11227:7;11220:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11138:104;:::o;15547:475::-;15665:4;15682:24;15709:11;:25;15721:12;:10;:12::i;:::-;15709:25;;;;;;;;;;;;;;;:34;15735:7;15709:34;;;;;;;;;;;;;;;;15682:61;;15796:15;15776:16;:35;;15754:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15912:67;15921:12;:10;:12::i;:::-;15935:7;15963:15;15944:16;:34;15912:8;:67::i;:::-;16010:4;16003:11;;;15547:475;;;;:::o;29772:165::-;29832:10;;;;;;;;;;;29818:24;;:10;:24;;;29810:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29887:10;;;;;;;;;;;:19;;:42;29907:21;29887:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29772:165::o;12566:200::-;12677:4;12694:42;12704:12;:10;:12::i;:::-;12718:9;12729:6;12694:9;:42::i;:::-;12754:4;12747:11;;12566:200;;;;:::o;28377:247::-;21838:12;:10;:12::i;:::-;21827:23;;:7;:5;:7::i;:::-;:23;;;21819:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28469:1:::1;28457:8;:13;;28449:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28562:4;28550:8;28534:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28533:33;;;;:::i;:::-;28516:14;:50;;;;28582:34;28601:14;;28582:34;;;;;;:::i;:::-;;;;;;;;28377:247:::0;:::o;30123:485::-;30207:15;30237:16;30268:19;30302:21;30338:24;30377:18;30445:6;;30466:7;;30488:14;;30517:18;;30550:12;;30577;;30423:177;;;;;;;;;;;;30123:485;;;;;;:::o;29945:170::-;21838:12;:10;:12::i;:::-;21827:23;;:7;:5;:7::i;:::-;:23;;;21819:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30053:6:::1;30023:18;:27;30042:7;30023:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30075:32;30091:7;30100:6;30075:32;;;;;;;:::i;:::-;;;;;;;;29945:170:::0;;:::o;12829:176::-;12943:7;12970:11;:18;12982:5;12970:18;;;;;;;;;;;;;;;:27;12989:7;12970:27;;;;;;;;;;;;;;;;12963:34;;12829:176;;;;:::o;22516:238::-;21838:12;:10;:12::i;:::-;21827:23;;:7;:5;:7::i;:::-;:23;;;21819:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22639:1:::1;22619:22;;:8;:22;;::::0;22597:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22718:28;22737:8;22718:18;:28::i;:::-;22516:238:::0;:::o;28197:172::-;21838:12;:10;:12::i;:::-;21827:23;;:7;:5;:7::i;:::-;:23;;;21819:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28293:15:::1;28280:10;;:28;;;;;;;;;;;;;;;;;;28326:35;28345:15;28326:35;;;;;;:::i;:::-;;;;;;;;28197:172:::0;:::o;28632:262::-;21838:12;:10;:12::i;:::-;21827:23;;:7;:5;:7::i;:::-;:23;;;21819:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28723:1:::1;28711:8;:13;;28703:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28824:4;28812:8;28796:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28795:33;;;;:::i;:::-;28774:18;:54;;;;28844:42;28867:18;;28844:42;;;;;;:::i;:::-;;;;;;;;28632:262:::0;:::o;29469:295::-;21838:12;:10;:12::i;:::-;21827:23;;:7;:5;:7::i;:::-;:23;;;21819:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29571:2:::1;29561:6;:12;;29553:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29629:2;29618:7;:13;;29610:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29678:6;29669;:15;;;;29705:7;29695;:17;;;;29728:28;29740:6;29748:7;29728:28;;;;;;;:::i;:::-;;;;;;;;29469:295:::0;;:::o;9925:98::-;9978:7;10005:10;9998:17;;9925:98;:::o;19330:380::-;19483:1;19466:19;;:5;:19;;;19458:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19564:1;19545:21;;:7;:21;;;19537:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19648:6;19618:11;:18;19630:5;19618:18;;;;;;;;;;;;;;;:27;19637:7;19618:27;;;;;;;;;;;;;;;:36;;;;19686:7;19670:32;;19679:5;19670:32;;;19695:6;19670:32;;;;;;:::i;:::-;;;;;;;;19330:380;;;:::o;30616:2291::-;30764:1;30748:18;;:4;:18;;;30740:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30841:1;30827:16;;:2;:16;;;30819:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30911:1;30902:6;:10;30894:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30969:17;31013:7;:5;:7::i;:::-;31005:15;;:4;:15;;;;:32;;;;;31030:7;:5;:7::i;:::-;31024:13;;:2;:13;;;;31005:32;:43;;;;;31042:6;;;;;;;;;;;31041:7;31005:43;31001:1735;;;31091:27;31114:3;31091:18;31102:6;;31091;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;31079:39;;31165:13;;;;;;;;;;;31157:21;;:4;:21;;;:72;;;;;31213:15;;;;;;;;;;;31199:30;;:2;:30;;;;31157:72;:116;;;;;31251:18;:22;31270:2;31251:22;;;;;;;;;;;;;;;;;;;;;;;;;31250:23;31157:116;31135:568;;;31326:14;;31316:6;:24;;31308:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31447:18;;31437:6;31421:13;31431:2;31421:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;31391:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;31577:12;31573:1;31560:10;;:14;;;;:::i;:::-;:29;31556:102;;;31623:14;31634:2;31623:10;:14::i;:::-;31622:15;31614:24;;;;;;31556:102;31676:9;;:11;;;;;;;;;:::i;:::-;;;;;;31135:568;31729:13;;;;;;;;;;;31723:19;;:2;:19;;;;:46;;;;;31747:18;:22;31766:2;31747:22;;;;;;;;;;;;;;;;;;;;;;;;;31746:23;31723:46;31719:231;;;31846:18;;31836:6;31820:13;31830:2;31820:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;31790:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;31719:231;31976:13;;;;;;;;;;;31970:19;;:2;:19;;;:44;;;;;32009:4;31993:21;;:4;:21;;;;31970:44;31966:125;;;32047:28;32071:3;32047:19;32058:7;;32047:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;32035:40;;31966:125;32107:28;32138:24;32156:4;32138:9;:24::i;:::-;32107:55;;32200:6;;;;;;;;;;;32199:7;:47;;;;;32233:13;;;;;;;;;;;32227:19;;:2;:19;;;32199:47;:79;;;;;32267:11;;;;;;;;;;;32199:79;:135;;;;;32322:12;;32299:20;:35;32199:135;:186;;;;;32367:18;;32355:9;;:30;32199:186;:246;;;;;32432:12;32406:39;;:15;;;;;;;;;;;:39;;;;32199:246;32177:548;;;32480:57;32497:39;32501:20;32523:12;;32497:3;:39::i;:::-;32480:16;:57::i;:::-;32556:26;32585:21;32556:50;;32650:1;32629:18;:22;32625:85;;;32676:14;:12;:14::i;:::-;32625:85;32461:264;32177:548;31050:1686;31001:1735;32764:1;32752:9;:13;32748:93;;;32782:47;32798:4;32812;32819:9;32782:15;:47::i;:::-;32748:93;32851:48;32867:4;32873:2;32877:21;32888:9;32877:6;:10;;:21;;;;:::i;:::-;32851:15;:48::i;:::-;30729:2178;30616:2291;;;:::o;22914:191::-;22988:16;23007:6;;;;;;;;;;;22988:25;;23033:8;23024:6;;:17;;;;;;;;;;;;;;;;;;23088:8;23057:40;;23078:8;23057:40;;;;;;;;;;;;22977:128;22914:191;:::o;33677:532::-;26493:4;26484:6;;:13;;;;;;;;;;;;;;;;;;33780:12:::1;33755:15;;:38;;;;;;;;;;;;;;;;;;33804:21;33842:1;33828:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33804:40;;33873:4;33855;33860:1;33855:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;33899:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33889:4;33894:1;33889:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;33932:62;33949:4;33964:15;;;;;;;;;;;33982:11;33932:8;:62::i;:::-;34005:15;;;;;;;;;;;:66;;;34086:11;34112:1;34128:4;34155;34175:15;34005:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33744:465;26529:5:::0;26520:6;;:14;;;;;;;;;;;;;;;;;;33677:532;:::o;34217:170::-;34260:12;34305:10;;;;;;;;;;;34297:24;;34329:21;34297:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34283:96;;;;;34249:138;34217:170::o;3284:98::-;3342:7;3373:1;3369;:5;;;;:::i;:::-;3362:12;;3284:98;;;;:::o;3683:::-;3741:7;3772:1;3768;:5;;;;:::i;:::-;3761:12;;3683:98;;;;:::o;33030:195::-;33089:4;33106:12;33173:7;33161:20;33153:28;;33216:1;33209:4;:8;33202:15;;;33030:195;;;:::o;32915:107::-;32972:7;33004:1;33000;:5;32999:15;;33013:1;32999:15;;;33009:1;32999:15;32992:22;;32915:107;;;;:::o;16512:770::-;16670:1;16652:20;;:6;:20;;;16644:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16754:1;16733:23;;:9;:23;;;16725:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16809:47;16830:6;16838:9;16849:6;16809:20;:47::i;:::-;16869:21;16893:9;:17;16903:6;16893:17;;;;;;;;;;;;;;;;16869:41;;16960:6;16943:13;:23;;16921:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17104:6;17088:13;:22;17068:9;:17;17078:6;17068:17;;;;;;;;;;;;;;;:42;;;;17156:6;17132:9;:20;17142:9;17132:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17197:9;17180:35;;17189:6;17180:35;;;17208:6;17180:35;;;;;;:::i;:::-;;;;;;;;17228:46;17248:6;17256:9;17267:6;17228:19;:46::i;:::-;16633:649;16512:770;;;:::o;2927:98::-;2985:7;3016:1;3012;:5;;;;:::i;:::-;3005:12;;2927:98;;;;:::o;20310:125::-;;;;:::o;21039:124::-;;;;:::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:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:474::-;4921:6;4929;4978:2;4966:9;4957:7;4953:23;4949:32;4946:119;;;4984:79;;:::i;:::-;4946:119;5104:1;5129:53;5174:7;5165:6;5154:9;5150:22;5129:53;:::i;:::-;5119:63;;5075:117;5231:2;5257:53;5302:7;5293:6;5282:9;5278:22;5257:53;:::i;:::-;5247:63;;5202:118;4853:474;;;;;:::o;5333:329::-;5392:6;5441:2;5429:9;5420:7;5416:23;5412:32;5409:119;;;5447:79;;:::i;:::-;5409:119;5567:1;5592:53;5637:7;5628:6;5617:9;5613:22;5592:53;:::i;:::-;5582:63;;5538:117;5333:329;;;;:::o;5668:118::-;5755:24;5773:5;5755:24;:::i;:::-;5750:3;5743:37;5668:118;;:::o;5792:222::-;5885:4;5923:2;5912:9;5908:18;5900:26;;5936:71;6004:1;5993:9;5989:17;5980:6;5936:71;:::i;:::-;5792:222;;;;:::o;6020:329::-;6079:6;6128:2;6116:9;6107:7;6103:23;6099:32;6096:119;;;6134:79;;:::i;:::-;6096:119;6254:1;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6225:117;6020:329;;;;:::o;6355:775::-;6588:4;6626:3;6615:9;6611:19;6603:27;;6640:71;6708:1;6697:9;6693:17;6684:6;6640:71;:::i;:::-;6721:72;6789:2;6778:9;6774:18;6765:6;6721:72;:::i;:::-;6803;6871:2;6860:9;6856:18;6847:6;6803:72;:::i;:::-;6885;6953:2;6942:9;6938:18;6929:6;6885:72;:::i;:::-;6967:73;7035:3;7024:9;7020:19;7011:6;6967:73;:::i;:::-;7050;7118:3;7107:9;7103:19;7094:6;7050:73;:::i;:::-;6355:775;;;;;;;;;:::o;7136:116::-;7206:21;7221:5;7206:21;:::i;:::-;7199:5;7196:32;7186:60;;7242:1;7239;7232:12;7186:60;7136:116;:::o;7258:133::-;7301:5;7339:6;7326:20;7317:29;;7355:30;7379:5;7355:30;:::i;:::-;7258:133;;;;:::o;7397:468::-;7462:6;7470;7519:2;7507:9;7498:7;7494:23;7490:32;7487:119;;;7525:79;;:::i;:::-;7487:119;7645:1;7670:53;7715:7;7706:6;7695:9;7691:22;7670:53;:::i;:::-;7660:63;;7616:117;7772:2;7798:50;7840:7;7831:6;7820:9;7816:22;7798:50;:::i;:::-;7788:60;;7743:115;7397:468;;;;;:::o;7871:474::-;7939:6;7947;7996:2;7984:9;7975:7;7971:23;7967:32;7964:119;;;8002:79;;:::i;:::-;7964:119;8122:1;8147:53;8192:7;8183:6;8172:9;8168:22;8147:53;:::i;:::-;8137:63;;8093:117;8249:2;8275:53;8320:7;8311:6;8300:9;8296:22;8275:53;:::i;:::-;8265:63;;8220:118;7871:474;;;;;:::o;8351:104::-;8396:7;8425:24;8443:5;8425:24;:::i;:::-;8414:35;;8351:104;;;:::o;8461:138::-;8542:32;8568:5;8542:32;:::i;:::-;8535:5;8532:43;8522:71;;8589:1;8586;8579:12;8522:71;8461:138;:::o;8605:155::-;8659:5;8697:6;8684:20;8675:29;;8713:41;8748:5;8713:41;:::i;:::-;8605:155;;;;:::o;8766:345::-;8833:6;8882:2;8870:9;8861:7;8857:23;8853:32;8850:119;;;8888:79;;:::i;:::-;8850:119;9008:1;9033:61;9086:7;9077:6;9066:9;9062:22;9033:61;:::i;:::-;9023:71;;8979:125;8766:345;;;;:::o;9117:180::-;9165:77;9162:1;9155:88;9262:4;9259:1;9252:15;9286:4;9283:1;9276:15;9303:320;9347:6;9384:1;9378:4;9374:12;9364:22;;9431:1;9425:4;9421:12;9452:18;9442:81;;9508:4;9500:6;9496:17;9486:27;;9442:81;9570:2;9562:6;9559:14;9539:18;9536:38;9533:84;;9589:18;;:::i;:::-;9533:84;9354:269;9303:320;;;:::o;9629:182::-;9769:34;9765:1;9757:6;9753:14;9746:58;9629:182;:::o;9817:366::-;9959:3;9980:67;10044:2;10039:3;9980:67;:::i;:::-;9973:74;;10056:93;10145:3;10056:93;:::i;:::-;10174:2;10169:3;10165:12;10158:19;;9817:366;;;:::o;10189:419::-;10355:4;10393:2;10382:9;10378:18;10370:26;;10442:9;10436:4;10432:20;10428:1;10417:9;10413:17;10406:47;10470:131;10596:4;10470:131;:::i;:::-;10462:139;;10189:419;;;:::o;10614:227::-;10754:34;10750:1;10742:6;10738:14;10731:58;10823:10;10818:2;10810:6;10806:15;10799:35;10614:227;:::o;10847:366::-;10989:3;11010:67;11074:2;11069:3;11010:67;:::i;:::-;11003:74;;11086:93;11175:3;11086:93;:::i;:::-;11204:2;11199:3;11195:12;11188:19;;10847:366;;;:::o;11219:419::-;11385:4;11423:2;11412:9;11408:18;11400:26;;11472:9;11466:4;11462:20;11458:1;11447:9;11443:17;11436:47;11500:131;11626:4;11500:131;:::i;:::-;11492:139;;11219:419;;;:::o;11644:180::-;11692:77;11689:1;11682:88;11789:4;11786:1;11779:15;11813:4;11810:1;11803:15;11830:191;11870:3;11889:20;11907:1;11889:20;:::i;:::-;11884:25;;11923:20;11941:1;11923:20;:::i;:::-;11918:25;;11966:1;11963;11959:9;11952:16;;11987:3;11984:1;11981:10;11978:36;;;11994:18;;:::i;:::-;11978:36;11830:191;;;;:::o;12027:410::-;12067:7;12090:20;12108:1;12090:20;:::i;:::-;12085:25;;12124:20;12142:1;12124:20;:::i;:::-;12119:25;;12179:1;12176;12172:9;12201:30;12219:11;12201:30;:::i;:::-;12190:41;;12380:1;12371:7;12367:15;12364:1;12361:22;12341:1;12334:9;12314:83;12291:139;;12410:18;;:::i;:::-;12291:139;12075:362;12027:410;;;;:::o;12443:180::-;12491:77;12488:1;12481:88;12588:4;12585:1;12578:15;12612:4;12609:1;12602:15;12629:185;12669:1;12686:20;12704:1;12686:20;:::i;:::-;12681:25;;12720:20;12738:1;12720:20;:::i;:::-;12715:25;;12759:1;12749:35;;12764:18;;:::i;:::-;12749:35;12806:1;12803;12799:9;12794:14;;12629:185;;;;:::o;12820:332::-;12941:4;12979:2;12968:9;12964:18;12956:26;;12992:71;13060:1;13049:9;13045:17;13036:6;12992:71;:::i;:::-;13073:72;13141:2;13130:9;13126:18;13117:6;13073:72;:::i;:::-;12820:332;;;;;:::o;13158:173::-;13298:25;13294:1;13286:6;13282:14;13275:49;13158:173;:::o;13337:366::-;13479:3;13500:67;13564:2;13559:3;13500:67;:::i;:::-;13493:74;;13576:93;13665:3;13576:93;:::i;:::-;13694:2;13689:3;13685:12;13678:19;;13337:366;;;:::o;13709:419::-;13875:4;13913:2;13902:9;13898:18;13890:26;;13962:9;13956:4;13952:20;13948:1;13937:9;13933:17;13926:47;13990:131;14116:4;13990:131;:::i;:::-;13982:139;;13709:419;;;:::o;14134:143::-;14191:5;14222:6;14216:13;14207:22;;14238:33;14265:5;14238:33;:::i;:::-;14134:143;;;;:::o;14283:351::-;14353:6;14402:2;14390:9;14381:7;14377:23;14373:32;14370:119;;;14408:79;;:::i;:::-;14370:119;14528:1;14553:64;14609:7;14600:6;14589:9;14585:22;14553:64;:::i;:::-;14543:74;;14499:128;14283:351;;;;:::o;14640:332::-;14761:4;14799:2;14788:9;14784:18;14776:26;;14812:71;14880:1;14869:9;14865:17;14856:6;14812:71;:::i;:::-;14893:72;14961:2;14950:9;14946:18;14937:6;14893:72;:::i;:::-;14640:332;;;;;:::o;14978:85::-;15023:7;15052:5;15041:16;;14978:85;;;:::o;15069:60::-;15097:3;15118:5;15111:12;;15069:60;;;:::o;15135:158::-;15193:9;15226:61;15244:42;15253:32;15279:5;15253:32;:::i;:::-;15244:42;:::i;:::-;15226:61;:::i;:::-;15213:74;;15135:158;;;:::o;15299:147::-;15394:45;15433:5;15394:45;:::i;:::-;15389:3;15382:58;15299:147;;:::o;15452:807::-;15701:4;15739:3;15728:9;15724:19;15716:27;;15753:71;15821:1;15810:9;15806:17;15797:6;15753:71;:::i;:::-;15834:72;15902:2;15891:9;15887:18;15878:6;15834:72;:::i;:::-;15916:80;15992:2;15981:9;15977:18;15968:6;15916:80;:::i;:::-;16006;16082:2;16071:9;16067:18;16058:6;16006:80;:::i;:::-;16096:73;16164:3;16153:9;16149:19;16140:6;16096:73;:::i;:::-;16179;16247:3;16236:9;16232:19;16223:6;16179:73;:::i;:::-;15452:807;;;;;;;;;:::o;16265:143::-;16322:5;16353:6;16347:13;16338:22;;16369:33;16396:5;16369:33;:::i;:::-;16265:143;;;;:::o;16414:663::-;16502:6;16510;16518;16567:2;16555:9;16546:7;16542:23;16538:32;16535:119;;;16573:79;;:::i;:::-;16535:119;16693:1;16718:64;16774:7;16765:6;16754:9;16750:22;16718:64;:::i;:::-;16708:74;;16664:128;16831:2;16857:64;16913:7;16904:6;16893:9;16889:22;16857:64;:::i;:::-;16847:74;;16802:129;16970:2;16996:64;17052:7;17043:6;17032:9;17028:22;16996:64;:::i;:::-;16986:74;;16941:129;16414:663;;;;;:::o;17083:332::-;17204:4;17242:2;17231:9;17227:18;17219:26;;17255:71;17323:1;17312:9;17308:17;17299:6;17255:71;:::i;:::-;17336:72;17404:2;17393:9;17389:18;17380:6;17336:72;:::i;:::-;17083:332;;;;;:::o;17421:137::-;17475:5;17506:6;17500:13;17491:22;;17522:30;17546:5;17522:30;:::i;:::-;17421:137;;;;:::o;17564:345::-;17631:6;17680:2;17668:9;17659:7;17655:23;17651:32;17648:119;;;17686:79;;:::i;:::-;17648:119;17806:1;17831:61;17884:7;17875:6;17864:9;17860:22;17831:61;:::i;:::-;17821:71;;17777:125;17564:345;;;;:::o;17915:179::-;18055:31;18051:1;18043:6;18039:14;18032:55;17915:179;:::o;18100:366::-;18242:3;18263:67;18327:2;18322:3;18263:67;:::i;:::-;18256:74;;18339:93;18428:3;18339:93;:::i;:::-;18457:2;18452:3;18448:12;18441:19;;18100:366;;;:::o;18472:419::-;18638:4;18676:2;18665:9;18661:18;18653:26;;18725:9;18719:4;18715:20;18711:1;18700:9;18696:17;18689:47;18753:131;18879:4;18753:131;:::i;:::-;18745:139;;18472:419;;;:::o;18897:224::-;19037:34;19033:1;19025:6;19021:14;19014:58;19106:7;19101:2;19093:6;19089:15;19082:32;18897:224;:::o;19127:366::-;19269:3;19290:67;19354:2;19349:3;19290:67;:::i;:::-;19283:74;;19366:93;19455:3;19366:93;:::i;:::-;19484:2;19479:3;19475:12;19468:19;;19127:366;;;:::o;19499:419::-;19665:4;19703:2;19692:9;19688:18;19680:26;;19752:9;19746:4;19742:20;19738:1;19727:9;19723:17;19716:47;19780:131;19906:4;19780:131;:::i;:::-;19772:139;;19499:419;;;:::o;19924:180::-;20064:32;20060:1;20052:6;20048:14;20041:56;19924:180;:::o;20110:366::-;20252:3;20273:67;20337:2;20332:3;20273:67;:::i;:::-;20266:74;;20349:93;20438:3;20349:93;:::i;:::-;20467:2;20462:3;20458:12;20451:19;;20110:366;;;:::o;20482:419::-;20648:4;20686:2;20675:9;20671:18;20663:26;;20735:9;20729:4;20725:20;20721:1;20710:9;20706:17;20699:47;20763:131;20889:4;20763:131;:::i;:::-;20755:139;;20482:419;;;:::o;20907:320::-;21022:4;21060:2;21049:9;21045:18;21037:26;;21073:71;21141:1;21130:9;21126:17;21117:6;21073:71;:::i;:::-;21154:66;21216:2;21205:9;21201:18;21192:6;21154:66;:::i;:::-;20907:320;;;;;:::o;21233:225::-;21373:34;21369:1;21361:6;21357:14;21350:58;21442:8;21437:2;21429:6;21425:15;21418:33;21233:225;:::o;21464:366::-;21606:3;21627:67;21691:2;21686:3;21627:67;:::i;:::-;21620:74;;21703:93;21792:3;21703:93;:::i;:::-;21821:2;21816:3;21812:12;21805:19;;21464:366;;;:::o;21836:419::-;22002:4;22040:2;22029:9;22025:18;22017:26;;22089:9;22083:4;22079:20;22075:1;22064:9;22060:17;22053:47;22117:131;22243:4;22117:131;:::i;:::-;22109:139;;21836:419;;;:::o;22261:142::-;22311:9;22344:53;22362:34;22371:24;22389:5;22371:24;:::i;:::-;22362:34;:::i;:::-;22344:53;:::i;:::-;22331:66;;22261:142;;;:::o;22409:126::-;22459:9;22492:37;22523:5;22492:37;:::i;:::-;22479:50;;22409:126;;;:::o;22541:134::-;22599:9;22632:37;22663:5;22632:37;:::i;:::-;22619:50;;22541:134;;;:::o;22681:147::-;22776:45;22815:5;22776:45;:::i;:::-;22771:3;22764:58;22681:147;;:::o;22834:238::-;22935:4;22973:2;22962:9;22958:18;22950:26;;22986:79;23062:1;23051:9;23047:17;23038:6;22986:79;:::i;:::-;22834:238;;;;:::o;23078:221::-;23218:34;23214:1;23206:6;23202:14;23195:58;23287:4;23282:2;23274:6;23270:15;23263:29;23078:221;:::o;23305:366::-;23447:3;23468:67;23532:2;23527:3;23468:67;:::i;:::-;23461:74;;23544:93;23633:3;23544:93;:::i;:::-;23662:2;23657:3;23653:12;23646:19;;23305:366;;;:::o;23677:419::-;23843:4;23881:2;23870:9;23866:18;23858:26;;23930:9;23924:4;23920:20;23916:1;23905:9;23901:17;23894:47;23958:131;24084:4;23958:131;:::i;:::-;23950:139;;23677:419;;;:::o;24102:171::-;24242:23;24238:1;24230:6;24226:14;24219:47;24102:171;:::o;24279:366::-;24421:3;24442:67;24506:2;24501:3;24442:67;:::i;:::-;24435:74;;24518:93;24607:3;24518:93;:::i;:::-;24636:2;24631:3;24627:12;24620:19;;24279:366;;;:::o;24651:419::-;24817:4;24855:2;24844:9;24840:18;24832:26;;24904:9;24898:4;24894:20;24890:1;24879:9;24875:17;24868:47;24932:131;25058:4;24932:131;:::i;:::-;24924:139;;24651:419;;;:::o;25076:172::-;25216:24;25212:1;25204:6;25200:14;25193:48;25076:172;:::o;25254:366::-;25396:3;25417:67;25481:2;25476:3;25417:67;:::i;:::-;25410:74;;25493:93;25582:3;25493:93;:::i;:::-;25611:2;25606:3;25602:12;25595:19;;25254:366;;;:::o;25626:419::-;25792:4;25830:2;25819:9;25815:18;25807:26;;25879:9;25873:4;25869:20;25865:1;25854:9;25850:17;25843:47;25907:131;26033:4;25907:131;:::i;:::-;25899:139;;25626:419;;;:::o;26051:223::-;26191:34;26187:1;26179:6;26175:14;26168:58;26260:6;26255:2;26247:6;26243:15;26236:31;26051:223;:::o;26280:366::-;26422:3;26443:67;26507:2;26502:3;26443:67;:::i;:::-;26436:74;;26519:93;26608:3;26519:93;:::i;:::-;26637:2;26632:3;26628:12;26621:19;;26280:366;;;:::o;26652:419::-;26818:4;26856:2;26845:9;26841:18;26833:26;;26905:9;26899:4;26895:20;26891:1;26880:9;26876:17;26869:47;26933:131;27059:4;26933:131;:::i;:::-;26925:139;;26652:419;;;:::o;27077:221::-;27217:34;27213:1;27205:6;27201:14;27194:58;27286:4;27281:2;27273:6;27269:15;27262:29;27077:221;:::o;27304:366::-;27446:3;27467:67;27531:2;27526:3;27467:67;:::i;:::-;27460:74;;27543:93;27632:3;27543:93;:::i;:::-;27661:2;27656:3;27652:12;27645:19;;27304:366;;;:::o;27676:419::-;27842:4;27880:2;27869:9;27865:18;27857:26;;27929:9;27923:4;27919:20;27915:1;27904:9;27900:17;27893:47;27957:131;28083:4;27957:131;:::i;:::-;27949:139;;27676:419;;;:::o;28101:224::-;28241:34;28237:1;28229:6;28225:14;28218:58;28310:7;28305:2;28297:6;28293:15;28286:32;28101:224;:::o;28331:366::-;28473:3;28494:67;28558:2;28553:3;28494:67;:::i;:::-;28487:74;;28570:93;28659:3;28570:93;:::i;:::-;28688:2;28683:3;28679:12;28672:19;;28331:366;;;:::o;28703:419::-;28869:4;28907:2;28896:9;28892:18;28884:26;;28956:9;28950:4;28946:20;28942:1;28931:9;28927:17;28920:47;28984:131;29110:4;28984:131;:::i;:::-;28976:139;;28703:419;;;:::o;29128:222::-;29268:34;29264:1;29256:6;29252:14;29245:58;29337:5;29332:2;29324:6;29320:15;29313:30;29128:222;:::o;29356:366::-;29498:3;29519:67;29583:2;29578:3;29519:67;:::i;:::-;29512:74;;29595:93;29684:3;29595:93;:::i;:::-;29713:2;29708:3;29704:12;29697:19;;29356:366;;;:::o;29728:419::-;29894:4;29932:2;29921:9;29917:18;29909:26;;29981:9;29975:4;29971:20;29967:1;29956:9;29952:17;29945:47;30009:131;30135:4;30009:131;:::i;:::-;30001:139;;29728:419;;;:::o;30153:228::-;30293:34;30289:1;30281:6;30277:14;30270:58;30362:11;30357:2;30349:6;30345:15;30338:36;30153:228;:::o;30387:366::-;30529:3;30550:67;30614:2;30609:3;30550:67;:::i;:::-;30543:74;;30626:93;30715:3;30626:93;:::i;:::-;30744:2;30739:3;30735:12;30728:19;;30387:366;;;:::o;30759:419::-;30925:4;30963:2;30952:9;30948:18;30940:26;;31012:9;31006:4;31002:20;30998:1;30987:9;30983:17;30976:47;31040:131;31166:4;31040:131;:::i;:::-;31032:139;;30759:419;;;:::o;31184:177::-;31324:29;31320:1;31312:6;31308:14;31301:53;31184:177;:::o;31367:366::-;31509:3;31530:67;31594:2;31589:3;31530:67;:::i;:::-;31523:74;;31606:93;31695:3;31606:93;:::i;:::-;31724:2;31719:3;31715:12;31708:19;;31367:366;;;:::o;31739:419::-;31905:4;31943:2;31932:9;31928:18;31920:26;;31992:9;31986:4;31982:20;31978:1;31967:9;31963:17;31956:47;32020:131;32146:4;32020:131;:::i;:::-;32012:139;;31739:419;;;:::o;32164:176::-;32304:28;32300:1;32292:6;32288:14;32281:52;32164:176;:::o;32346:366::-;32488:3;32509:67;32573:2;32568:3;32509:67;:::i;:::-;32502:74;;32585:93;32674:3;32585:93;:::i;:::-;32703:2;32698:3;32694:12;32687:19;;32346:366;;;:::o;32718:419::-;32884:4;32922:2;32911:9;32907:18;32899:26;;32971:9;32965:4;32961:20;32957:1;32946:9;32942:17;32935:47;32999:131;33125:4;32999:131;:::i;:::-;32991:139;;32718:419;;;:::o;33143:233::-;33182:3;33205:24;33223:5;33205:24;:::i;:::-;33196:33;;33251:66;33244:5;33241:77;33238:103;;33321:18;;:::i;:::-;33238:103;33368:1;33361:5;33357:13;33350:20;;33143:233;;;:::o;33382:180::-;33430:77;33427:1;33420:88;33527:4;33524:1;33517:15;33551:4;33548:1;33541:15;33568:180;33616:77;33613:1;33606:88;33713:4;33710:1;33703:15;33737:4;33734:1;33727:15;33754:114;33821:6;33855:5;33849:12;33839:22;;33754:114;;;:::o;33874:184::-;33973:11;34007:6;34002:3;33995:19;34047:4;34042:3;34038:14;34023:29;;33874:184;;;;:::o;34064:132::-;34131:4;34154:3;34146:11;;34184:4;34179:3;34175:14;34167:22;;34064:132;;;:::o;34202:108::-;34279:24;34297:5;34279:24;:::i;:::-;34274:3;34267:37;34202:108;;:::o;34316:179::-;34385:10;34406:46;34448:3;34440:6;34406:46;:::i;:::-;34484:4;34479:3;34475:14;34461:28;;34316:179;;;;:::o;34501:113::-;34571:4;34603;34598:3;34594:14;34586:22;;34501:113;;;:::o;34650:732::-;34769:3;34798:54;34846:5;34798:54;:::i;:::-;34868:86;34947:6;34942:3;34868:86;:::i;:::-;34861:93;;34978:56;35028:5;34978:56;:::i;:::-;35057:7;35088:1;35073:284;35098:6;35095:1;35092:13;35073:284;;;35174:6;35168:13;35201:63;35260:3;35245:13;35201:63;:::i;:::-;35194:70;;35287:60;35340:6;35287:60;:::i;:::-;35277:70;;35133:224;35120:1;35117;35113:9;35108:14;;35073:284;;;35077:14;35373:3;35366:10;;34774:608;;;34650:732;;;;:::o;35388:831::-;35651:4;35689:3;35678:9;35674:19;35666:27;;35703:71;35771:1;35760:9;35756:17;35747:6;35703:71;:::i;:::-;35784:80;35860:2;35849:9;35845:18;35836:6;35784:80;:::i;:::-;35911:9;35905:4;35901:20;35896:2;35885:9;35881:18;35874:48;35939:108;36042:4;36033:6;35939:108;:::i;:::-;35931:116;;36057:72;36125:2;36114:9;36110:18;36101:6;36057:72;:::i;:::-;36139:73;36207:3;36196:9;36192:19;36183:6;36139:73;:::i;:::-;35388:831;;;;;;;;:::o;36225:147::-;36326:11;36363:3;36348:18;;36225:147;;;;:::o;36378:114::-;;:::o;36498:398::-;36657:3;36678:83;36759:1;36754:3;36678:83;:::i;:::-;36671:90;;36770:93;36859:3;36770:93;:::i;:::-;36888:1;36883:3;36879:11;36872:18;;36498:398;;;:::o;36902:379::-;37086:3;37108:147;37251:3;37108:147;:::i;:::-;37101:154;;37272:3;37265:10;;36902:379;;;:::o;37287:225::-;37427:34;37423:1;37415:6;37411:14;37404:58;37496:8;37491:2;37483:6;37479:15;37472:33;37287:225;:::o;37518:366::-;37660:3;37681:67;37745:2;37740:3;37681:67;:::i;:::-;37674:74;;37757:93;37846:3;37757:93;:::i;:::-;37875:2;37870:3;37866:12;37859:19;;37518:366;;;:::o;37890:419::-;38056:4;38094:2;38083:9;38079:18;38071:26;;38143:9;38137:4;38133:20;38129:1;38118:9;38114:17;38107:47;38171:131;38297:4;38171:131;:::i;:::-;38163:139;;37890:419;;;:::o;38315:194::-;38355:4;38375:20;38393:1;38375:20;:::i;:::-;38370:25;;38409:20;38427:1;38409:20;:::i;:::-;38404:25;;38453:1;38450;38446:9;38438:17;;38477:1;38471:4;38468:11;38465:37;;;38482:18;;:::i;:::-;38465:37;38315:194;;;;:::o

Swarm Source

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