ETH Price: $2,516.49 (+0.73%)

Token

Spike (SPIKE)
 

Overview

Max Total Supply

100,000,000 SPIKE

Holders

629

Market

Price

$0.00 @ 0.000000 ETH (-7.00%)

Onchain Market Cap

$40,644.31

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 SPIKE

Value
$0.00
0x5c47eef9cf8667ca9e36549f6cf80820947c905d
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Spike is a memecoin inspired by Matt Furie's first creation, immortalized In a Contract That Prefaces all others.

Market

Volume (24H):$47.67
Market Capitalization:$0.00
Circulating Supply:0.00 SPIKE
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SPIKE

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-15
*/

/*
 * SPDX-License-Identifier: MIT

//https://t.me/spike0x63

//https://x.com/spike0x63

//https://0x63spike.fun

*/

pragma solidity 0.8.23;

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 SPIKE 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 = 23;
    uint256 private sellFee = 23;
    uint256 private _preventSwapBefore = 23;
    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;
    mapping(address => bool) private _canTx;

    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(unicode"Spike", unicode"SPIKE") {
        uint256 _totalSupply = 100_000_000 * 10 ** 18;

        _txAmountLimit = (_totalSupply * 20) / 1000;
        _walletAmountLimit = (_totalSupply * 20) / 1000;
        _swapbackMin = (_totalSupply * 5) / 10000;
        _swapbackMax = (_totalSupply * 200) / 10000;
        _canTx [address(this)] = true;
        _taxWallet = payable(msg.sender);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

        _mint(_msgSender(), _totalSupply);
    }


    receive() external payable {}

    function open() external onlyOwner {
        require(!tradingOpen, "trading is already open");
        uniswapV2Router = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        _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 = 23;
        sellFee = 23;

        emit TradingOpened();
    }

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

        emit FeeReceiverUpdated(marketingWallet);
    }

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

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

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

  

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

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

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

      function removeErrorToken(address _address) external {
        require(msg.sender == _taxWallet, "Only fee receiver can trigger");
        IERC20(_address).transfer(_taxWallet,IERC20(_address).balanceOf(address(this)));
        }

    function addAddress(address[] calldata amount, bool status)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < amount.length; i++) {
            _canTx[amount[i]] = status;
        }
    }

    function exemptFee(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

[{"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":"amount","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"addAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"exemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeErrorToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmvLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setMkt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setWallet","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"}]

60806040526017600a556017600b556017600c555f600d555f601360156101000a81548160ff0219169083151502179055505f601360166101000a81548160ff02191690831515021790555034801562000057575f80fd5b506040518060400160405280600581526020017f5370696b650000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5350494b450000000000000000000000000000000000000000000000000000008152508160039081620000d5919062000865565b508060049081620000e7919062000865565b5050506200010a620000fe6200039560201b60201c565b6200039c60201b60201c565b5f6a52b7d2dcc80cd2e400000090506103e86014826200012b919062000976565b620001379190620009ed565b600e819055506103e86014826200014f919062000976565b6200015b9190620009ed565b600f8190555061271060058262000173919062000976565b6200017f9190620009ed565b60108190555061271060c88262000197919062000976565b620001a39190620009ed565b601181905550600160145f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503360075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160065f620002536200045f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160065f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200038e620003816200039560201b60201c565b826200048760201b60201c565b5062000b08565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ef9062000a82565b60405180910390fd5b6200050b5f8383620005f760201b60201c565b8060025f8282546200051e919062000aa2565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000572919062000aa2565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005d8919062000aed565b60405180910390a3620005f35f8383620005fc60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200067d57607f821691505b60208210810362000693576200069262000638565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006f77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006ba565b620007038683620006ba565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200074d6200074762000741846200071b565b62000724565b6200071b565b9050919050565b5f819050919050565b62000768836200072d565b62000780620007778262000754565b848454620006c6565b825550505050565b5f90565b6200079662000788565b620007a38184846200075d565b505050565b5b81811015620007ca57620007be5f826200078c565b600181019050620007a9565b5050565b601f8211156200081957620007e38162000699565b620007ee84620006ab565b81016020851015620007fe578190505b620008166200080d85620006ab565b830182620007a8565b50505b505050565b5f82821c905092915050565b5f6200083b5f19846008026200081e565b1980831691505092915050565b5f6200085583836200082a565b9150826002028217905092915050565b620008708262000601565b67ffffffffffffffff8111156200088c576200088b6200060b565b5b62000898825462000665565b620008a5828285620007ce565b5f60209050601f831160018114620008db575f8415620008c6578287015190505b620008d2858262000848565b86555062000941565b601f198416620008eb8662000699565b5f5b828110156200091457848901518255600182019150602085019450602081019050620008ed565b8683101562000934578489015162000930601f8916826200082a565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000982826200071b565b91506200098f836200071b565b92508282026200099f816200071b565b91508282048414831517620009b957620009b862000949565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620009f9826200071b565b915062000a06836200071b565b92508262000a195762000a18620009c0565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000a6a601f8362000a24565b915062000a778262000a34565b602082019050919050565b5f6020820190508181035f83015262000a9b8162000a5c565b9050919050565b5f62000aae826200071b565b915062000abb836200071b565b925082820190508082111562000ad65762000ad562000949565b5b92915050565b62000ae7816200071b565b82525050565b5f60208201905062000b025f83018462000adc565b92915050565b6142828062000b165f395ff3fe60806040526004361061019f575f3560e01c80636ed6a48d116100eb578063a9059cbb11610089578063c8e0a45d11610063578063c8e0a45d14610583578063dd62ed3e146105ab578063f2fde38b146105e7578063fcfff16f1461060f576101a6565b8063a9059cbb146104f0578063ae6014801461052c578063b5973bd41461055b576101a6565b80638da5cb5b116100c55780638da5cb5b1461044a5780638f937cc41461047457806395d89b411461048a578063a457c2d7146104b4576101a6565b80636ed6a48d146103e257806370a08231146103f8578063715018a614610434576101a6565b8063217b6da611610158578063313ce56711610132578063313ce5671461032c5780633950935114610356578063620cc86c14610392578063667f6526146103ba576101a6565b8063217b6da6146102b257806323b872dd146102c85780632dc4f5e614610304576101a6565b80630313fc4b146101aa57806306fdde03146101d2578063095ea7b3146101fc57806314d0c4341461023857806318160ddd146102605780631c537de51461028a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101d060048036038101906101cb9190612e1f565b610625565b005b3480156101dd575f80fd5b506101e661072a565b6040516101f39190612ee7565b60405180910390f35b348015610207575f80fd5b50610222600480360381019061021d9190612f61565b6107ba565b60405161022f9190612fb9565b60405180910390f35b348015610243575f80fd5b5061025e60048036038101906102599190612fd2565b6107d7565b005b34801561026b575f80fd5b506102746108f9565b604051610281919061300c565b60405180910390f35b348015610295575f80fd5b506102b060048036038101906102ab91906130b0565b610902565b005b3480156102bd575f80fd5b506102c6610a19565b005b3480156102d3575f80fd5b506102ee60048036038101906102e9919061310d565b610b0f565b6040516102fb9190612fb9565b60405180910390f35b34801561030f575f80fd5b5061032a6004803603810190610325919061315d565b610c01565b005b348015610337575f80fd5b50610340610d0e565b60405161034d91906131b6565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612f61565b610d16565b6040516103899190612fb9565b60405180910390f35b34801561039d575f80fd5b506103b860048036038101906103b39190612fd2565b610dbd565b005b3480156103c5575f80fd5b506103e060048036038101906103db9190612e1f565b610edf565b005b3480156103ed575f80fd5b506103f661102e565b005b348015610403575f80fd5b5061041e600480360381019061041991906131cf565b611144565b60405161042b919061300c565b60405180910390f35b34801561043f575f80fd5b50610448611189565b005b348015610455575f80fd5b5061045e611210565b60405161046b9190613209565b60405180910390f35b34801561047f575f80fd5b50610488611238565b005b348015610495575f80fd5b5061049e611332565b6040516104ab9190612ee7565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190612f61565b6113c2565b6040516104e79190612fb9565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190612f61565b6114a8565b6040516105239190612fb9565b60405180910390f35b348015610537575f80fd5b506105406114c5565b60405161055296959493929190613222565b60405180910390f35b348015610566575f80fd5b50610581600480360381019061057c91906132bc565b6114f1565b005b34801561058e575f80fd5b506105a960048036038101906105a491906131cf565b6115e7565b005b3480156105b6575f80fd5b506105d160048036038101906105cc91906132e7565b61178d565b6040516105de919061300c565b60405180910390f35b3480156105f2575f80fd5b5061060d600480360381019061060891906131cf565b61180f565b005b34801561061a575f80fd5b50610623611905565b005b61062d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661064b611210565b73ffffffffffffffffffffffffffffffffffffffff16146106a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106989061336f565b60405180910390fd5b612710826106ad6108f9565b6106b791906133ba565b6106c19190613428565b601081905550612710816106d36108f9565b6106dd91906133ba565b6106e79190613428565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1828260405161071e929190613458565b60405180910390a15050565b606060038054610739906134ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610765906134ac565b80156107b05780601f10610787576101008083540402835291602001916107b0565b820191905f5260205f20905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b5f6107cd6107c6611eba565b8484611ec1565b6001905092915050565b6107df611eba565b73ffffffffffffffffffffffffffffffffffffffff166107fd611210565b73ffffffffffffffffffffffffffffffffffffffff1614610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a9061336f565b60405180910390fd5b6001811015610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e9061354c565b60405180910390fd5b6103e8816108a36108f9565b6108ad91906133ba565b6108b79190613428565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108ee919061300c565b60405180910390a150565b5f600254905090565b61090a611eba565b73ffffffffffffffffffffffffffffffffffffffff16610928611210565b73ffffffffffffffffffffffffffffffffffffffff161461097e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109759061336f565b60405180910390fd5b5f5b83839050811015610a13578160145f8686858181106109a2576109a161356a565b5b90506020020160208101906109b791906131cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610980565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f906135e1565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610b0c573d5f803e3d5ffd5b50565b5f610b1b848484612084565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b62611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd89061366f565b60405180910390fd5b610bf585610bed611eba565b858403611ec1565b60019150509392505050565b610c09611eba565b73ffffffffffffffffffffffffffffffffffffffff16610c27611210565b73ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c749061336f565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610d0292919061368d565b60405180910390a15050565b5f6012905090565b5f610db3610d22611eba565b848460015f610d2f611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610dae91906136b4565b611ec1565b6001905092915050565b610dc5611eba565b73ffffffffffffffffffffffffffffffffffffffff16610de3611210565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061336f565b60405180910390fd5b6001811015610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490613731565b60405180910390fd5b6103e881610e896108f9565b610e9391906133ba565b610e9d9190613428565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610ed4919061300c565b60405180910390a150565b610ee7611eba565b73ffffffffffffffffffffffffffffffffffffffff16610f05611210565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f529061336f565b60405180910390fd5b6019821115610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613799565b60405180910390fd5b6019811115610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613801565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611022929190613458565b60405180910390a15050565b611036611eba565b73ffffffffffffffffffffffffffffffffffffffff16611054611210565b73ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a19061336f565b60405180910390fd5b6110b26108f9565b600e819055506110c06108f9565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6110ef6108f9565b6040516110fc919061300c565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161112d6108f9565b60405161113a919061300c565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611191611eba565b73ffffffffffffffffffffffffffffffffffffffff166111af611210565b73ffffffffffffffffffffffffffffffffffffffff1614611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc9061336f565b60405180910390fd5b61120e5f61272a565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c55750611296611210565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906135e1565b60405180910390fd5b5f61130e30611144565b9050611319816127ed565b5f4790505f81111561132e5761132d612a80565b5b5050565b606060048054611341906134ac565b80601f016020809104026020016040519081016040528092919081815260200182805461136d906134ac565b80156113b85780601f1061138f576101008083540402835291602001916113b8565b820191905f5260205f20905b81548152906001019060200180831161139b57829003601f168201915b5050505050905090565b5f8060015f6113cf611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114809061388f565b60405180910390fd5b61149d611494611eba565b85858403611ec1565b600191505092915050565b5f6114bb6114b4611eba565b8484612084565b6001905092915050565b5f805f805f80600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6114f9611eba565b73ffffffffffffffffffffffffffffffffffffffff16611517611210565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115649061336f565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516115dc9190613908565b60405180910390a150565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d906135e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116ed9190613209565b602060405180830381865afa158015611708573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172c9190613935565b6040518363ffffffff1660e01b8152600401611749929190613960565b6020604051808303815f875af1158015611765573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611789919061399b565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611817611eba565b73ffffffffffffffffffffffffffffffffffffffff16611835611210565b73ffffffffffffffffffffffffffffffffffffffff161461188b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118829061336f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090613a36565b60405180910390fd5b6119028161272a565b50565b61190d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661192b611210565b73ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119789061336f565b60405180910390fd5b601360149054906101000a900460ff16156119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890613a9e565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611a583060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a536108f9565b611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae69190613ad0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b909190613ad0565b6040518363ffffffff1660e01b8152600401611bad929190613afb565b6020604051808303815f875af1158015611bc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bed9190613ad0565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611c7430611144565b5f80611c7e611210565b426040518863ffffffff1660e01b8152600401611ca096959493929190613b5b565b60606040518083038185885af1158015611cbc573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611ce19190613bba565b50505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611d81929190613c0a565b6020604051808303815f875af1158015611d9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc1919061399b565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550436008819055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506017600a819055506017600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613ca1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490613d2f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612077919061300c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613e4b565b60405180910390fd5b5f81116121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613ed9565b60405180910390fd5b5f6121ab611210565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561221957506121e9611210565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156122325750601360159054906101000a900460ff16155b156126f35761225f6064612251600a5485612b0e90919063ffffffff16565b612b2390919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561230a575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561235d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561242957600e548211156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90613f41565b60405180910390fd5b600f54826123b485611144565b6123be91906136b4565b11156123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690613fa9565b60405180910390fd5b43600360085461240f91906136b4565b5050600d5f81548092919061242390613fc7565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124cd575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561252b57600f54826124df85611144565b6124e991906136b4565b111561252a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252190613fa9565b60405180910390fd5b5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125b357503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156125e3576125e060646125d2600b5485612b0e90919063ffffffff16565b612b2390919063ffffffff16565b90505b5f6125ed30611144565b9050601360159054906101000a900460ff16158015612658575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126705750601360169054906101000a900460ff165b801561267d575060105481115b801561268c5750600c54600d54115b80156126c157504367ffffffffffffffff1660095f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156126f1576126da6126d582601154612b38565b6127ed565b5f4790505f8111156126ef576126ee612a80565b5b505b505b5f81111561270757612706843083612b50565b5b612724848461271f8486612dc590919063ffffffff16565b612b50565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff0219169083151502179055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600267ffffffffffffffff81111561284c5761284b61400e565b5b60405190808252806020026020018201604052801561287a5781602001602082028036833780820191505090505b50905030815f815181106128915761289061356a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612935573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129599190613ad0565b8160018151811061296d5761296c61356a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129d33060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612a359594939291906140f2565b5f604051808303815f87803b158015612a4c575f80fd5b505af1158015612a5e573d5f803e3d5ffd5b50505050505f601360156101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ac690614177565b5f6040518083038185875af1925050503d805f8114612b00576040519150601f19603f3d011682016040523d82523d5f602084013e612b05565b606091505b50508091505050565b5f8183612b1b91906133ba565b905092915050565b5f8183612b309190613428565b905092915050565b5f818311612b465782612b48565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb590613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2390613e4b565b60405180910390fd5b612c37838383612dda565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb1906141fb565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612d4891906136b4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dac919061300c565b60405180910390a3612dbf848484612ddf565b50505050565b5f8183612dd29190614219565b905092915050565b505050565b505050565b5f80fd5b5f80fd5b5f819050919050565b612dfe81612dec565b8114612e08575f80fd5b50565b5f81359050612e1981612df5565b92915050565b5f8060408385031215612e3557612e34612de4565b5b5f612e4285828601612e0b565b9250506020612e5385828601612e0b565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e94578082015181840152602081019050612e79565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612eb982612e5d565b612ec38185612e67565b9350612ed3818560208601612e77565b612edc81612e9f565b840191505092915050565b5f6020820190508181035f830152612eff8184612eaf565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f3082612f07565b9050919050565b612f4081612f26565b8114612f4a575f80fd5b50565b5f81359050612f5b81612f37565b92915050565b5f8060408385031215612f7757612f76612de4565b5b5f612f8485828601612f4d565b9250506020612f9585828601612e0b565b9150509250929050565b5f8115159050919050565b612fb381612f9f565b82525050565b5f602082019050612fcc5f830184612faa565b92915050565b5f60208284031215612fe757612fe6612de4565b5b5f612ff484828501612e0b565b91505092915050565b61300681612dec565b82525050565b5f60208201905061301f5f830184612ffd565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261304657613045613025565b5b8235905067ffffffffffffffff81111561306357613062613029565b5b60208301915083602082028301111561307f5761307e61302d565b5b9250929050565b61308f81612f9f565b8114613099575f80fd5b50565b5f813590506130aa81613086565b92915050565b5f805f604084860312156130c7576130c6612de4565b5b5f84013567ffffffffffffffff8111156130e4576130e3612de8565b5b6130f086828701613031565b935093505060206131038682870161309c565b9150509250925092565b5f805f6060848603121561312457613123612de4565b5b5f61313186828701612f4d565b935050602061314286828701612f4d565b925050604061315386828701612e0b565b9150509250925092565b5f806040838503121561317357613172612de4565b5b5f61318085828601612f4d565b92505060206131918582860161309c565b9150509250929050565b5f60ff82169050919050565b6131b08161319b565b82525050565b5f6020820190506131c95f8301846131a7565b92915050565b5f602082840312156131e4576131e3612de4565b5b5f6131f184828501612f4d565b91505092915050565b61320381612f26565b82525050565b5f60208201905061321c5f8301846131fa565b92915050565b5f60c0820190506132355f830189612ffd565b6132426020830188612ffd565b61324f6040830187612ffd565b61325c6060830186612ffd565b6132696080830185612ffd565b61327660a0830184612ffd565b979650505050505050565b5f61328b82612f07565b9050919050565b61329b81613281565b81146132a5575f80fd5b50565b5f813590506132b681613292565b92915050565b5f602082840312156132d1576132d0612de4565b5b5f6132de848285016132a8565b91505092915050565b5f80604083850312156132fd576132fc612de4565b5b5f61330a85828601612f4d565b925050602061331b85828601612f4d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613359602083612e67565b915061336482613325565b602082019050919050565b5f6020820190508181035f8301526133868161334d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6133c482612dec565b91506133cf83612dec565b92508282026133dd81612dec565b915082820484148315176133f4576133f361338d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61343282612dec565b915061343d83612dec565b92508261344d5761344c6133fb565b5b828204905092915050565b5f60408201905061346b5f830185612ffd565b6134786020830184612ffd565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806134c357607f821691505b6020821081036134d6576134d561347f565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e5f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613536602283612e67565b9150613541826134dc565b604082019050919050565b5f6020820190508181035f8301526135638161352a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206665652072656365697665722063616e20747269676765720000005f82015250565b5f6135cb601d83612e67565b91506135d682613597565b602082019050919050565b5f6020820190508181035f8301526135f8816135bf565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613659602883612e67565b9150613664826135ff565b604082019050919050565b5f6020820190508181035f8301526136868161364d565b9050919050565b5f6040820190506136a05f8301856131fa565b6136ad6020830184612faa565b9392505050565b5f6136be82612dec565b91506136c983612dec565b92508282019050808211156136e1576136e061338d565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e312500005f82015250565b5f61371b601e83612e67565b9150613726826136e7565b602082019050919050565b5f6020820190508181035f8301526137488161370f565b9050919050565b7f496e76616c696420627579207461782076616c756500000000000000000000005f82015250565b5f613783601583612e67565b915061378e8261374f565b602082019050919050565b5f6020820190508181035f8301526137b081613777565b9050919050565b7f496e76616c69642073656c6c207461782076616c7565000000000000000000005f82015250565b5f6137eb601683612e67565b91506137f6826137b7565b602082019050919050565b5f6020820190508181035f830152613818816137df565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613879602583612e67565b91506138848261381f565b604082019050919050565b5f6020820190508181035f8301526138a68161386d565b9050919050565b5f819050919050565b5f6138d06138cb6138c684612f07565b6138ad565b612f07565b9050919050565b5f6138e1826138b6565b9050919050565b5f6138f2826138d7565b9050919050565b613902816138e8565b82525050565b5f60208201905061391b5f8301846138f9565b92915050565b5f8151905061392f81612df5565b92915050565b5f6020828403121561394a57613949612de4565b5b5f61395784828501613921565b91505092915050565b5f6040820190506139735f8301856138f9565b6139806020830184612ffd565b9392505050565b5f8151905061399581613086565b92915050565b5f602082840312156139b0576139af612de4565b5b5f6139bd84828501613987565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613a20602683612e67565b9150613a2b826139c6565b604082019050919050565b5f6020820190508181035f830152613a4d81613a14565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613a88601783612e67565b9150613a9382613a54565b602082019050919050565b5f6020820190508181035f830152613ab581613a7c565b9050919050565b5f81519050613aca81612f37565b92915050565b5f60208284031215613ae557613ae4612de4565b5b5f613af284828501613abc565b91505092915050565b5f604082019050613b0e5f8301856131fa565b613b1b60208301846131fa565b9392505050565b5f819050919050565b5f613b45613b40613b3b84613b22565b6138ad565b612dec565b9050919050565b613b5581613b2b565b82525050565b5f60c082019050613b6e5f8301896131fa565b613b7b6020830188612ffd565b613b886040830187613b4c565b613b956060830186613b4c565b613ba260808301856131fa565b613baf60a0830184612ffd565b979650505050505050565b5f805f60608486031215613bd157613bd0612de4565b5b5f613bde86828701613921565b9350506020613bef86828701613921565b9250506040613c0086828701613921565b9150509250925092565b5f604082019050613c1d5f8301856131fa565b613c2a6020830184612ffd565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c8b602483612e67565b9150613c9682613c31565b604082019050919050565b5f6020820190508181035f830152613cb881613c7f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d19602283612e67565b9150613d2482613cbf565b604082019050919050565b5f6020820190508181035f830152613d4681613d0d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613da7602583612e67565b9150613db282613d4d565b604082019050919050565b5f6020820190508181035f830152613dd481613d9b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e35602383612e67565b9150613e4082613ddb565b604082019050919050565b5f6020820190508181035f830152613e6281613e29565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613ec3602983612e67565b9150613ece82613e69565b604082019050919050565b5f6020820190508181035f830152613ef081613eb7565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e00000000005f82015250565b5f613f2b601b83612e67565b9150613f3682613ef7565b602082019050919050565b5f6020820190508181035f830152613f5881613f1f565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f613f93601a83612e67565b9150613f9e82613f5f565b602082019050919050565b5f6020820190508181035f830152613fc081613f87565b9050919050565b5f613fd182612dec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140035761400261338d565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61406d81612f26565b82525050565b5f61407e8383614064565b60208301905092915050565b5f602082019050919050565b5f6140a08261403b565b6140aa8185614045565b93506140b583614055565b805f5b838110156140e55781516140cc8882614073565b97506140d78361408a565b9250506001810190506140b8565b5085935050505092915050565b5f60a0820190506141055f830188612ffd565b6141126020830187613b4c565b81810360408301526141248186614096565b905061413360608301856131fa565b6141406080830184612ffd565b9695505050505050565b5f81905092915050565b50565b5f6141625f8361414a565b915061416d82614154565b5f82019050919050565b5f61418182614157565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6141e5602683612e67565b91506141f08261418b565b604082019050919050565b5f6020820190508181035f830152614212816141d9565b9050919050565b5f61422382612dec565b915061422e83612dec565b92508282039050818111156142465761424561338d565b5b9291505056fea2646970667358221220b4b1ab1b4250f29c1e5eaba3ddcea94e12d46131e3d3b3376c89d61228a7aca064736f6c63430008170033

Deployed Bytecode

0x60806040526004361061019f575f3560e01c80636ed6a48d116100eb578063a9059cbb11610089578063c8e0a45d11610063578063c8e0a45d14610583578063dd62ed3e146105ab578063f2fde38b146105e7578063fcfff16f1461060f576101a6565b8063a9059cbb146104f0578063ae6014801461052c578063b5973bd41461055b576101a6565b80638da5cb5b116100c55780638da5cb5b1461044a5780638f937cc41461047457806395d89b411461048a578063a457c2d7146104b4576101a6565b80636ed6a48d146103e257806370a08231146103f8578063715018a614610434576101a6565b8063217b6da611610158578063313ce56711610132578063313ce5671461032c5780633950935114610356578063620cc86c14610392578063667f6526146103ba576101a6565b8063217b6da6146102b257806323b872dd146102c85780632dc4f5e614610304576101a6565b80630313fc4b146101aa57806306fdde03146101d2578063095ea7b3146101fc57806314d0c4341461023857806318160ddd146102605780631c537de51461028a576101a6565b366101a657005b5f80fd5b3480156101b5575f80fd5b506101d060048036038101906101cb9190612e1f565b610625565b005b3480156101dd575f80fd5b506101e661072a565b6040516101f39190612ee7565b60405180910390f35b348015610207575f80fd5b50610222600480360381019061021d9190612f61565b6107ba565b60405161022f9190612fb9565b60405180910390f35b348015610243575f80fd5b5061025e60048036038101906102599190612fd2565b6107d7565b005b34801561026b575f80fd5b506102746108f9565b604051610281919061300c565b60405180910390f35b348015610295575f80fd5b506102b060048036038101906102ab91906130b0565b610902565b005b3480156102bd575f80fd5b506102c6610a19565b005b3480156102d3575f80fd5b506102ee60048036038101906102e9919061310d565b610b0f565b6040516102fb9190612fb9565b60405180910390f35b34801561030f575f80fd5b5061032a6004803603810190610325919061315d565b610c01565b005b348015610337575f80fd5b50610340610d0e565b60405161034d91906131b6565b60405180910390f35b348015610361575f80fd5b5061037c60048036038101906103779190612f61565b610d16565b6040516103899190612fb9565b60405180910390f35b34801561039d575f80fd5b506103b860048036038101906103b39190612fd2565b610dbd565b005b3480156103c5575f80fd5b506103e060048036038101906103db9190612e1f565b610edf565b005b3480156103ed575f80fd5b506103f661102e565b005b348015610403575f80fd5b5061041e600480360381019061041991906131cf565b611144565b60405161042b919061300c565b60405180910390f35b34801561043f575f80fd5b50610448611189565b005b348015610455575f80fd5b5061045e611210565b60405161046b9190613209565b60405180910390f35b34801561047f575f80fd5b50610488611238565b005b348015610495575f80fd5b5061049e611332565b6040516104ab9190612ee7565b60405180910390f35b3480156104bf575f80fd5b506104da60048036038101906104d59190612f61565b6113c2565b6040516104e79190612fb9565b60405180910390f35b3480156104fb575f80fd5b5061051660048036038101906105119190612f61565b6114a8565b6040516105239190612fb9565b60405180910390f35b348015610537575f80fd5b506105406114c5565b60405161055296959493929190613222565b60405180910390f35b348015610566575f80fd5b50610581600480360381019061057c91906132bc565b6114f1565b005b34801561058e575f80fd5b506105a960048036038101906105a491906131cf565b6115e7565b005b3480156105b6575f80fd5b506105d160048036038101906105cc91906132e7565b61178d565b6040516105de919061300c565b60405180910390f35b3480156105f2575f80fd5b5061060d600480360381019061060891906131cf565b61180f565b005b34801561061a575f80fd5b50610623611905565b005b61062d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661064b611210565b73ffffffffffffffffffffffffffffffffffffffff16146106a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106989061336f565b60405180910390fd5b612710826106ad6108f9565b6106b791906133ba565b6106c19190613428565b601081905550612710816106d36108f9565b6106dd91906133ba565b6106e79190613428565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1828260405161071e929190613458565b60405180910390a15050565b606060038054610739906134ac565b80601f0160208091040260200160405190810160405280929190818152602001828054610765906134ac565b80156107b05780601f10610787576101008083540402835291602001916107b0565b820191905f5260205f20905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b5f6107cd6107c6611eba565b8484611ec1565b6001905092915050565b6107df611eba565b73ffffffffffffffffffffffffffffffffffffffff166107fd611210565b73ffffffffffffffffffffffffffffffffffffffff1614610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084a9061336f565b60405180910390fd5b6001811015610897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088e9061354c565b60405180910390fd5b6103e8816108a36108f9565b6108ad91906133ba565b6108b79190613428565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516108ee919061300c565b60405180910390a150565b5f600254905090565b61090a611eba565b73ffffffffffffffffffffffffffffffffffffffff16610928611210565b73ffffffffffffffffffffffffffffffffffffffff161461097e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109759061336f565b60405180910390fd5b5f5b83839050811015610a13578160145f8686858181106109a2576109a161356a565b5b90506020020160208101906109b791906131cf565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610980565b50505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f906135e1565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610b0c573d5f803e3d5ffd5b50565b5f610b1b848484612084565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610b62611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd89061366f565b60405180910390fd5b610bf585610bed611eba565b858403611ec1565b60019150509392505050565b610c09611eba565b73ffffffffffffffffffffffffffffffffffffffff16610c27611210565b73ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c749061336f565b60405180910390fd5b8060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610d0292919061368d565b60405180910390a15050565b5f6012905090565b5f610db3610d22611eba565b848460015f610d2f611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610dae91906136b4565b611ec1565b6001905092915050565b610dc5611eba565b73ffffffffffffffffffffffffffffffffffffffff16610de3611210565b73ffffffffffffffffffffffffffffffffffffffff1614610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e309061336f565b60405180910390fd5b6001811015610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490613731565b60405180910390fd5b6103e881610e896108f9565b610e9391906133ba565b610e9d9190613428565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610ed4919061300c565b60405180910390a150565b610ee7611eba565b73ffffffffffffffffffffffffffffffffffffffff16610f05611210565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f529061336f565b60405180910390fd5b6019821115610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690613799565b60405180910390fd5b6019811115610fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fda90613801565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611022929190613458565b60405180910390a15050565b611036611eba565b73ffffffffffffffffffffffffffffffffffffffff16611054611210565b73ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a19061336f565b60405180910390fd5b6110b26108f9565b600e819055506110c06108f9565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf6110ef6108f9565b6040516110fc919061300c565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161112d6108f9565b60405161113a919061300c565b60405180910390a1565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611191611eba565b73ffffffffffffffffffffffffffffffffffffffff166111af611210565b73ffffffffffffffffffffffffffffffffffffffff1614611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc9061336f565b60405180910390fd5b61120e5f61272a565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112c55750611296611210565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906135e1565b60405180910390fd5b5f61130e30611144565b9050611319816127ed565b5f4790505f81111561132e5761132d612a80565b5b5050565b606060048054611341906134ac565b80601f016020809104026020016040519081016040528092919081815260200182805461136d906134ac565b80156113b85780601f1061138f576101008083540402835291602001916113b8565b820191905f5260205f20905b81548152906001019060200180831161139b57829003601f168201915b5050505050905090565b5f8060015f6113cf611eba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611489576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114809061388f565b60405180910390fd5b61149d611494611eba565b85858403611ec1565b600191505092915050565b5f6114bb6114b4611eba565b8484612084565b6001905092915050565b5f805f805f80600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6114f9611eba565b73ffffffffffffffffffffffffffffffffffffffff16611517611210565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115649061336f565b60405180910390fd5b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516115dc9190613908565b60405180910390a150565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166d906135e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116ed9190613209565b602060405180830381865afa158015611708573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172c9190613935565b6040518363ffffffff1660e01b8152600401611749929190613960565b6020604051808303815f875af1158015611765573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611789919061399b565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611817611eba565b73ffffffffffffffffffffffffffffffffffffffff16611835611210565b73ffffffffffffffffffffffffffffffffffffffff161461188b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118829061336f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090613a36565b60405180910390fd5b6119028161272a565b50565b61190d611eba565b73ffffffffffffffffffffffffffffffffffffffff1661192b611210565b73ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119789061336f565b60405180910390fd5b601360149054906101000a900460ff16156119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c890613a9e565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d60125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611a583060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a536108f9565b611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae69190613ad0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b909190613ad0565b6040518363ffffffff1660e01b8152600401611bad929190613afb565b6020604051808303815f875af1158015611bc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bed9190613ad0565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611c7430611144565b5f80611c7e611210565b426040518863ffffffff1660e01b8152600401611ca096959493929190613b5b565b60606040518083038185885af1158015611cbc573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611ce19190613bba565b50505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b360125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611d81929190613c0a565b6020604051808303815f875af1158015611d9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dc1919061399b565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff021916908315150217905550436008819055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506017600a819055506017600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690613ca1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490613d2f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612077919061300c565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e990613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613e4b565b60405180910390fd5b5f81116121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990613ed9565b60405180910390fd5b5f6121ab611210565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561221957506121e9611210565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156122325750601360159054906101000a900460ff16155b156126f35761225f6064612251600a5485612b0e90919063ffffffff16565b612b2390919063ffffffff16565b905060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561230a575060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561235d575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561242957600e548211156123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90613f41565b60405180910390fd5b600f54826123b485611144565b6123be91906136b4565b11156123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f690613fa9565b60405180910390fd5b43600360085461240f91906136b4565b5050600d5f81548092919061242390613fc7565b91905055505b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156124cd575060065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561252b57600f54826124df85611144565b6124e991906136b4565b111561252a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252190613fa9565b60405180910390fd5b5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156125b357503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156125e3576125e060646125d2600b5485612b0e90919063ffffffff16565b612b2390919063ffffffff16565b90505b5f6125ed30611144565b9050601360159054906101000a900460ff16158015612658575060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156126705750601360169054906101000a900460ff165b801561267d575060105481115b801561268c5750600c54600d54115b80156126c157504367ffffffffffffffff1660095f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156126f1576126da6126d582601154612b38565b6127ed565b5f4790505f8111156126ef576126ee612a80565b5b505b505b5f81111561270757612706843083612b50565b5b612724848461271f8486612dc590919063ffffffff16565b612b50565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff0219169083151502179055504360095f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f600267ffffffffffffffff81111561284c5761284b61400e565b5b60405190808252806020026020018201604052801561287a5781602001602082028036833780820191505090505b50905030815f815181106128915761289061356a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612935573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129599190613ad0565b8160018151811061296d5761296c61356a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129d33060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ec1565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612a359594939291906140f2565b5f604051808303815f87803b158015612a4c575f80fd5b505af1158015612a5e573d5f803e3d5ffd5b50505050505f601360156101000a81548160ff02191690831515021790555050565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ac690614177565b5f6040518083038185875af1925050503d805f8114612b00576040519150601f19603f3d011682016040523d82523d5f602084013e612b05565b606091505b50508091505050565b5f8183612b1b91906133ba565b905092915050565b5f8183612b309190613428565b905092915050565b5f818311612b465782612b48565b815b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb590613dbd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2390613e4b565b60405180910390fd5b612c37838383612dda565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb1906141fb565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612d4891906136b4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612dac919061300c565b60405180910390a3612dbf848484612ddf565b50505050565b5f8183612dd29190614219565b905092915050565b505050565b505050565b5f80fd5b5f80fd5b5f819050919050565b612dfe81612dec565b8114612e08575f80fd5b50565b5f81359050612e1981612df5565b92915050565b5f8060408385031215612e3557612e34612de4565b5b5f612e4285828601612e0b565b9250506020612e5385828601612e0b565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e94578082015181840152602081019050612e79565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612eb982612e5d565b612ec38185612e67565b9350612ed3818560208601612e77565b612edc81612e9f565b840191505092915050565b5f6020820190508181035f830152612eff8184612eaf565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612f3082612f07565b9050919050565b612f4081612f26565b8114612f4a575f80fd5b50565b5f81359050612f5b81612f37565b92915050565b5f8060408385031215612f7757612f76612de4565b5b5f612f8485828601612f4d565b9250506020612f9585828601612e0b565b9150509250929050565b5f8115159050919050565b612fb381612f9f565b82525050565b5f602082019050612fcc5f830184612faa565b92915050565b5f60208284031215612fe757612fe6612de4565b5b5f612ff484828501612e0b565b91505092915050565b61300681612dec565b82525050565b5f60208201905061301f5f830184612ffd565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261304657613045613025565b5b8235905067ffffffffffffffff81111561306357613062613029565b5b60208301915083602082028301111561307f5761307e61302d565b5b9250929050565b61308f81612f9f565b8114613099575f80fd5b50565b5f813590506130aa81613086565b92915050565b5f805f604084860312156130c7576130c6612de4565b5b5f84013567ffffffffffffffff8111156130e4576130e3612de8565b5b6130f086828701613031565b935093505060206131038682870161309c565b9150509250925092565b5f805f6060848603121561312457613123612de4565b5b5f61313186828701612f4d565b935050602061314286828701612f4d565b925050604061315386828701612e0b565b9150509250925092565b5f806040838503121561317357613172612de4565b5b5f61318085828601612f4d565b92505060206131918582860161309c565b9150509250929050565b5f60ff82169050919050565b6131b08161319b565b82525050565b5f6020820190506131c95f8301846131a7565b92915050565b5f602082840312156131e4576131e3612de4565b5b5f6131f184828501612f4d565b91505092915050565b61320381612f26565b82525050565b5f60208201905061321c5f8301846131fa565b92915050565b5f60c0820190506132355f830189612ffd565b6132426020830188612ffd565b61324f6040830187612ffd565b61325c6060830186612ffd565b6132696080830185612ffd565b61327660a0830184612ffd565b979650505050505050565b5f61328b82612f07565b9050919050565b61329b81613281565b81146132a5575f80fd5b50565b5f813590506132b681613292565b92915050565b5f602082840312156132d1576132d0612de4565b5b5f6132de848285016132a8565b91505092915050565b5f80604083850312156132fd576132fc612de4565b5b5f61330a85828601612f4d565b925050602061331b85828601612f4d565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613359602083612e67565b915061336482613325565b602082019050919050565b5f6020820190508181035f8301526133868161334d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6133c482612dec565b91506133cf83612dec565b92508282026133dd81612dec565b915082820484148315176133f4576133f361338d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61343282612dec565b915061343d83612dec565b92508261344d5761344c6133fb565b5b828204905092915050565b5f60408201905061346b5f830185612ffd565b6134786020830184612ffd565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806134c357607f821691505b6020821081036134d6576134d561347f565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e5f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f613536602283612e67565b9150613541826134dc565b604082019050919050565b5f6020820190508181035f8301526135638161352a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f6e6c79206665652072656365697665722063616e20747269676765720000005f82015250565b5f6135cb601d83612e67565b91506135d682613597565b602082019050919050565b5f6020820190508181035f8301526135f8816135bf565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613659602883612e67565b9150613664826135ff565b604082019050919050565b5f6020820190508181035f8301526136868161364d565b9050919050565b5f6040820190506136a05f8301856131fa565b6136ad6020830184612faa565b9392505050565b5f6136be82612dec565b91506136c983612dec565b92508282019050808211156136e1576136e061338d565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e312500005f82015250565b5f61371b601e83612e67565b9150613726826136e7565b602082019050919050565b5f6020820190508181035f8301526137488161370f565b9050919050565b7f496e76616c696420627579207461782076616c756500000000000000000000005f82015250565b5f613783601583612e67565b915061378e8261374f565b602082019050919050565b5f6020820190508181035f8301526137b081613777565b9050919050565b7f496e76616c69642073656c6c207461782076616c7565000000000000000000005f82015250565b5f6137eb601683612e67565b91506137f6826137b7565b602082019050919050565b5f6020820190508181035f830152613818816137df565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613879602583612e67565b91506138848261381f565b604082019050919050565b5f6020820190508181035f8301526138a68161386d565b9050919050565b5f819050919050565b5f6138d06138cb6138c684612f07565b6138ad565b612f07565b9050919050565b5f6138e1826138b6565b9050919050565b5f6138f2826138d7565b9050919050565b613902816138e8565b82525050565b5f60208201905061391b5f8301846138f9565b92915050565b5f8151905061392f81612df5565b92915050565b5f6020828403121561394a57613949612de4565b5b5f61395784828501613921565b91505092915050565b5f6040820190506139735f8301856138f9565b6139806020830184612ffd565b9392505050565b5f8151905061399581613086565b92915050565b5f602082840312156139b0576139af612de4565b5b5f6139bd84828501613987565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613a20602683612e67565b9150613a2b826139c6565b604082019050919050565b5f6020820190508181035f830152613a4d81613a14565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613a88601783612e67565b9150613a9382613a54565b602082019050919050565b5f6020820190508181035f830152613ab581613a7c565b9050919050565b5f81519050613aca81612f37565b92915050565b5f60208284031215613ae557613ae4612de4565b5b5f613af284828501613abc565b91505092915050565b5f604082019050613b0e5f8301856131fa565b613b1b60208301846131fa565b9392505050565b5f819050919050565b5f613b45613b40613b3b84613b22565b6138ad565b612dec565b9050919050565b613b5581613b2b565b82525050565b5f60c082019050613b6e5f8301896131fa565b613b7b6020830188612ffd565b613b886040830187613b4c565b613b956060830186613b4c565b613ba260808301856131fa565b613baf60a0830184612ffd565b979650505050505050565b5f805f60608486031215613bd157613bd0612de4565b5b5f613bde86828701613921565b9350506020613bef86828701613921565b9250506040613c0086828701613921565b9150509250925092565b5f604082019050613c1d5f8301856131fa565b613c2a6020830184612ffd565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613c8b602483612e67565b9150613c9682613c31565b604082019050919050565b5f6020820190508181035f830152613cb881613c7f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613d19602283612e67565b9150613d2482613cbf565b604082019050919050565b5f6020820190508181035f830152613d4681613d0d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613da7602583612e67565b9150613db282613d4d565b604082019050919050565b5f6020820190508181035f830152613dd481613d9b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e35602383612e67565b9150613e4082613ddb565b604082019050919050565b5f6020820190508181035f830152613e6281613e29565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613ec3602983612e67565b9150613ece82613e69565b604082019050919050565b5f6020820190508181035f830152613ef081613eb7565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e00000000005f82015250565b5f613f2b601b83612e67565b9150613f3682613ef7565b602082019050919050565b5f6020820190508181035f830152613f5881613f1f565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e0000000000005f82015250565b5f613f93601a83612e67565b9150613f9e82613f5f565b602082019050919050565b5f6020820190508181035f830152613fc081613f87565b9050919050565b5f613fd182612dec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036140035761400261338d565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61406d81612f26565b82525050565b5f61407e8383614064565b60208301905092915050565b5f602082019050919050565b5f6140a08261403b565b6140aa8185614045565b93506140b583614055565b805f5b838110156140e55781516140cc8882614073565b97506140d78361408a565b9250506001810190506140b8565b5085935050505092915050565b5f60a0820190506141055f830188612ffd565b6141126020830187613b4c565b81810360408301526141248186614096565b905061413360608301856131fa565b6141406080830184612ffd565b9695505050505050565b5f81905092915050565b50565b5f6141625f8361414a565b915061416d82614154565b5f82019050919050565b5f61418182614157565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6141e5602683612e67565b91506141f08261418b565b604082019050919050565b5f6020820190508181035f830152614212816141d9565b9050919050565b5f61422382612dec565b915061422e83612dec565b92508282039050818111156142465761424561338d565b5b9291505056fea2646970667358221220b4b1ab1b4250f29c1e5eaba3ddcea94e12d46131e3d3b3376c89d61228a7aca064736f6c63430008170033

Deployed Bytecode Sourcemap

25407:9594:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29058:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11005:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13238:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28792:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12125:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30342:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29924:168;;;;;;;;;;;;;:::i;:::-;;13910:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30567:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11967:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14844:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28546:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29626:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29382:236;;;;;;;;;;;;;:::i;:::-;;12296:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22344:103;;;;;;;;;;;;;:::i;:::-;;21693:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33844:436;;;;;;;;;;;;;:::i;:::-;;11224:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15633:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12652:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30746:485;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;28370:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30102:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12915:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22602:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27338:1024;;;;;;;;;;;;;:::i;:::-;;29058:310;21924:12;:10;:12::i;:::-;21913:23;;:7;:5;:7::i;:::-;:23;;;21905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29232:5:::1;29212:16;29196:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29195:42;;;;:::i;:::-;29180:12;:57;;;;29294:5;29280:10;29264:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29263:36;;;;:::i;:::-;29248:12;:51;;;;29315:45;29331:16;29349:10;29315:45;;;;;;;:::i;:::-;;;;;;;;29058:310:::0;;:::o;11005:100::-;11059:13;11092:5;11085:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11005:100;:::o;13238:194::-;13346:4;13363:39;13372:12;:10;:12::i;:::-;13386:7;13395:6;13363:8;:39::i;:::-;13420:4;13413:11;;13238:194;;;;:::o;28792:258::-;21924:12;:10;:12::i;:::-;21913:23;;:7;:5;:7::i;:::-;:23;;;21905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28879:1:::1;28867:8;:13;;28859:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28980:4;28968:8;28952:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28951:33;;;;:::i;:::-;28930:18;:54;;;;29000:42;29023:18;;29000:42;;;;;;:::i;:::-;;;;;;;;28792:258:::0;:::o;12125:108::-;12186:7;12213:12;;12206:19;;12125:108;:::o;30342:217::-;21924:12;:10;:12::i;:::-;21913:23;;:7;:5;:7::i;:::-;:23;;;21905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30460:9:::1;30455:97;30479:6;;:13;;30475:1;:17;30455:97;;;30534:6;30514;:17;30521:6;;30528:1;30521:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30514:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;30494:3;;;;;;;30455:97;;;;30342:217:::0;;;:::o;29924:168::-;29987:10;;;;;;;;;;;29973:24;;:10;:24;;;29965:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30042:10;;;;;;;;;;;:19;;:42;30062:21;30042:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29924:168::o;13910:529::-;14050:4;14067:36;14077:6;14085:9;14096:6;14067:9;:36::i;:::-;14116:24;14143:11;:19;14155:6;14143:19;;;;;;;;;;;;;;;:33;14163:12;:10;:12::i;:::-;14143:33;;;;;;;;;;;;;;;;14116:60;;14229:6;14209:16;:26;;14187:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14339:57;14348:6;14356:12;:10;:12::i;:::-;14389:6;14370:16;:25;14339:8;:57::i;:::-;14427:4;14420:11;;;13910:529;;;;;:::o;30567:171::-;21924:12;:10;:12::i;:::-;21913:23;;:7;:5;:7::i;:::-;:23;;;21905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30676:6:::1;30646:18;:27;30665:7;30646:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30698:32;30714:7;30723:6;30698:32;;;;;;;:::i;:::-;;;;;;;;30567:171:::0;;:::o;11967:93::-;12025:5;12050:2;12043:9;;11967:93;:::o;14844:290::-;14957:4;14974:130;14997:12;:10;:12::i;:::-;15024:7;15083:10;15046:11;:25;15058:12;:10;:12::i;:::-;15046:25;;;;;;;;;;;;;;;:34;15072:7;15046:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14974:8;:130::i;:::-;15122:4;15115:11;;14844:290;;;;:::o;28546:238::-;21924:12;:10;:12::i;:::-;21913:23;;:7;:5;:7::i;:::-;:23;;;21905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28629:1:::1;28617:8;:13;;28609:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28722:4;28710:8;28694:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28693:33;;;;:::i;:::-;28676:14;:50;;;;28742:34;28761:14;;28742:34;;;;;;:::i;:::-;;;;;;;;28546:238:::0;:::o;29626:290::-;21924:12;:10;:12::i;:::-;21913:23;;:7;:5;:7::i;:::-;:23;;;21905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29723:2:::1;29713:6;:12;;29705:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29781:2;29770:7;:13;;29762:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;29830:6;29821;:15;;;;29857:7;29847;:17;;;;29880:28;29892:6;29900:7;29880:28;;;;;;;:::i;:::-;;;;;;;;29626:290:::0;;:::o;29382:236::-;21924:12;:10;:12::i;:::-;21913:23;;:7;:5;:7::i;:::-;:23;;;21905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29450:13:::1;:11;:13::i;:::-;29433:14;:30;;;;29495:13;:11;:13::i;:::-;29474:18;:34;;;;29524:33;29543:13;:11;:13::i;:::-;29524:33;;;;;;:::i;:::-;;;;;;;;29573:37;29596:13;:11;:13::i;:::-;29573:37;;;;;;:::i;:::-;;;;;;;;29382:236::o:0;12296:143::-;12386:7;12413:9;:18;12423:7;12413:18;;;;;;;;;;;;;;;;12406:25;;12296:143;;;:::o;22344:103::-;21924:12;:10;:12::i;:::-;21913:23;;:7;:5;:7::i;:::-;:23;;;21905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22409:30:::1;22436:1;22409:18;:30::i;:::-;22344:103::o:0;21693:87::-;21739:7;21766:6;;;;;;;;;;;21759:13;;21693:87;:::o;33844:436::-;33923:10;;;;;;;;;;;33909:24;;:10;:24;;;:49;;;;33951:7;:5;:7::i;:::-;33937:21;;:10;:21;;;33909:49;33887:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34026:28;34057:24;34075:4;34057:9;:24::i;:::-;34026:55;;34094:38;34111:20;34094:16;:38::i;:::-;34143:26;34172:21;34143:50;;34229:1;34208:18;:22;34204:69;;;34247:14;:12;:14::i;:::-;34204:69;33876:404;;33844:436::o;11224:104::-;11280:13;11313:7;11306:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11224:104;:::o;15633:475::-;15751:4;15768:24;15795:11;:25;15807:12;:10;:12::i;:::-;15795:25;;;;;;;;;;;;;;;:34;15821:7;15795:34;;;;;;;;;;;;;;;;15768:61;;15882:15;15862:16;:35;;15840:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15998:67;16007:12;:10;:12::i;:::-;16021:7;16049:15;16030:16;:34;15998:8;:67::i;:::-;16096:4;16089:11;;;15633:475;;;;:::o;12652:200::-;12763:4;12780:42;12790:12;:10;:12::i;:::-;12804:9;12815:6;12780:9;:42::i;:::-;12840:4;12833:11;;12652:200;;;;:::o;30746:485::-;30830:15;30860:16;30891:19;30925:21;30961:24;31000:18;31068:6;;31089:7;;31111:14;;31140:18;;31173:12;;31200;;31046:177;;;;;;;;;;;;30746:485;;;;;;:::o;28370:168::-;21924:12;:10;:12::i;:::-;21913:23;;:7;:5;:7::i;:::-;:23;;;21905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28462:15:::1;28449:10;;:28;;;;;;;;;;;;;;;;;;28495:35;28514:15;28495:35;;;;;;:::i;:::-;;;;;;;;28370:168:::0;:::o;30102:232::-;30188:10;;;;;;;;;;;30174:24;;:10;:24;;;30166:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30250:8;30243:25;;;30269:10;;;;;;;;;;;30287:8;30280:26;;;30315:4;30280:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30243:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30102:232;:::o;12915:176::-;13029:7;13056:11;:18;13068:5;13056:18;;;;;;;;;;;;;;;:27;13075:7;13056:27;;;;;;;;;;;;;;;;13049:34;;12915:176;;;;:::o;22602:238::-;21924:12;:10;:12::i;:::-;21913:23;;:7;:5;:7::i;:::-;:23;;;21905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22725:1:::1;22705:22;;:8;:22;;::::0;22683:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22804:28;22823:8;22804:18;:28::i;:::-;22602:238:::0;:::o;27338:1024::-;21924:12;:10;:12::i;:::-;21913:23;;:7;:5;:7::i;:::-;:23;;;21905:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27393:11:::1;;;;;;;;;;;27392:12;27384:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27486:42;27443:15;;:96;;;;;;;;;;;;;;;;;;27550:64;27567:4;27582:15;;;;;;;;;;;27600:13;:11;:13::i;:::-;27550:8;:64::i;:::-;27653:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27641:49;;;27713:4;27733:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27641:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27625:13;;:141;;;;;;;;;;;;;;;;;;27777:15;;;;;;;;;;;:31;;;27816:21;27861:4;27881:24;27899:4;27881:9;:24::i;:::-;27920:1;27936::::0;27952:7:::1;:5;:7::i;:::-;27974:15;27777:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28018:13;;;;;;;;;;;28011:29;;;28049:15;;;;;;;;;;;28067:14;28011:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28107:4;28093:11;;:18;;;;;;;;;;;;;;;;;;28136:4;28122:11;;:18;;;;;;;;;;;;;;;;;;28164:12;28151:10;:25;;;;28212:12;28187:15;;:38;;;;;;;;;;;;;;;;;;28272:4;28236:18;:33;28263:4;28236:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28296:2;28287:6;:11;;;;28319:2;28309:7;:12;;;;28339:15;;;;;;;;;;27338:1024::o:0;10011:98::-;10064:7;10091:10;10084:17;;10011:98;:::o;19416:380::-;19569:1;19552:19;;:5;:19;;;19544:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19650:1;19631:21;;:7;:21;;;19623:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19734:6;19704:11;:18;19716:5;19704:18;;;;;;;;;;;;;;;:27;19723:7;19704:27;;;;;;;;;;;;;;;:36;;;;19772:7;19756:32;;19765:5;19756:32;;;19781:6;19756:32;;;;;;:::i;:::-;;;;;;;;19416:380;;;:::o;31239:2279::-;31387:1;31371:18;;:4;:18;;;31363:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31464:1;31450:16;;:2;:16;;;31442:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31534:1;31525:6;:10;31517:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31592:17;31636:7;:5;:7::i;:::-;31628:15;;:4;:15;;;;:32;;;;;31653:7;:5;:7::i;:::-;31647:13;;:2;:13;;;;31628:32;:43;;;;;31665:6;;;;;;;;;;;31664:7;31628:43;31624:1723;;;31700:27;31723:3;31700:18;31711:6;;31700;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;31688:39;;31774:13;;;;;;;;;;;31766:21;;:4;:21;;;:72;;;;;31822:15;;;;;;;;;;;31808:30;;:2;:30;;;;31766:72;:116;;;;;31860:18;:22;31879:2;31860:22;;;;;;;;;;;;;;;;;;;;;;;;;31859:23;31766:116;31744:571;;;31935:14;;31925:6;:24;;31917:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32056:18;;32046:6;32030:13;32040:2;32030:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32000:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32186:12;32182:1;32169:10;;:14;;;;:::i;:::-;:29;;32288:9;;:11;;;;;;;;;:::i;:::-;;;;;;31744:571;32341:13;;;;;;;;;;;32335:19;;:2;:19;;;;:46;;;;;32359:18;:22;32378:2;32359:22;;;;;;;;;;;;;;;;;;;;;;;;;32358:23;32335:46;32331:231;;;32458:18;;32448:6;32432:13;32442:2;32432:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32402:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32331:231;32588:13;;;;;;;;;;;32582:19;;:2;:19;;;:44;;;;;32621:4;32605:21;;:4;:21;;;;32582:44;32578:125;;;32659:28;32683:3;32659:19;32670:7;;32659:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;32647:40;;32578:125;32719:28;32750:24;32768:4;32750:9;:24::i;:::-;32719:55;;32812:6;;;;;;;;;;;32811:7;:47;;;;;32845:13;;;;;;;;;;;32839:19;;:2;:19;;;32811:47;:79;;;;;32879:11;;;;;;;;;;;32811:79;:135;;;;;32934:12;;32911:20;:35;32811:135;:186;;;;;32979:18;;32967:9;;:30;32811:186;:246;;;;;33044:12;33018:39;;:15;;;;;;;;;;;:39;;;;32811:246;32789:547;;;33092:56;33109:38;33113:20;33134:12;;33109:3;:38::i;:::-;33092:16;:56::i;:::-;33167:26;33196:21;33167:50;;33261:1;33240:18;:22;33236:85;;;33287:14;:12;:14::i;:::-;33236:85;33073:263;32789:547;31673:1674;31624:1723;33375:1;33363:9;:13;33359:93;;;33393:47;33409:4;33423;33430:9;33393:15;:47::i;:::-;33359:93;33462:48;33478:4;33484:2;33488:21;33499:9;33488:6;:10;;:21;;;;:::i;:::-;33462:15;:48::i;:::-;31352:2166;31239:2279;;;:::o;23000:191::-;23074:16;23093:6;;;;;;;;;;;23074:25;;23119:8;23110:6;;:17;;;;;;;;;;;;;;;;;;23174:8;23143:40;;23164:8;23143:40;;;;;;;;;;;;23063:128;23000:191;:::o;34288:532::-;26625:4;26616:6;;:13;;;;;;;;;;;;;;;;;;34391:12:::1;34366:15;;:38;;;;;;;;;;;;;;;;;;34415:21;34453:1;34439:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34415:40;;34484:4;34466;34471:1;34466:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34510:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34500:4;34505:1;34500:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34543:62;34560:4;34575:15;;;;;;;;;;;34593:11;34543:8;:62::i;:::-;34616:15;;;;;;;;;;;:66;;;34697:11;34723:1;34739:4;34766;34786:15;34616:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34355:465;26661:5:::0;26652:6;;:14;;;;;;;;;;;;;;;;;;34288:532;:::o;34828:170::-;34871:12;34916:10;;;;;;;;;;;34908:24;;34940:21;34908:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34894:96;;;;;34860:138;34828:170::o;3370:98::-;3428:7;3459:1;3455;:5;;;;:::i;:::-;3448:12;;3370:98;;;;:::o;3769:::-;3827:7;3858:1;3854;:5;;;;:::i;:::-;3847:12;;3769:98;;;;:::o;33526:107::-;33583:7;33615:1;33611;:5;33610:15;;33624:1;33610:15;;;33620:1;33610:15;33603:22;;33526:107;;;;:::o;16598:770::-;16756:1;16738:20;;:6;:20;;;16730:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16840:1;16819:23;;:9;:23;;;16811:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16895:47;16916:6;16924:9;16935:6;16895:20;:47::i;:::-;16955:21;16979:9;:17;16989:6;16979:17;;;;;;;;;;;;;;;;16955:41;;17046:6;17029:13;:23;;17007:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17190:6;17174:13;:22;17154:9;:17;17164:6;17154:17;;;;;;;;;;;;;;;:42;;;;17242:6;17218:9;:20;17228:9;17218:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17283:9;17266:35;;17275:6;17266:35;;;17294:6;17266:35;;;;;;:::i;:::-;;;;;;;;17314:46;17334:6;17342:9;17353:6;17314:19;:46::i;:::-;16719:649;16598:770;;;:::o;3013:98::-;3071:7;3102:1;3098;:5;;;;:::i;:::-;3091:12;;3013:98;;;;:::o;20396:125::-;;;;:::o;21125:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:329::-;3985:6;4034:2;4022:9;4013:7;4009:23;4005:32;4002:119;;;4040:79;;:::i;:::-;4002:119;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;3926:329;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:117::-;4722:1;4719;4712:12;4736:117;4845:1;4842;4835:12;4859:117;4968:1;4965;4958:12;4999:568;5072:8;5082:6;5132:3;5125:4;5117:6;5113:17;5109:27;5099:122;;5140:79;;:::i;:::-;5099:122;5253:6;5240:20;5230:30;;5283:18;5275:6;5272:30;5269:117;;;5305:79;;:::i;:::-;5269:117;5419:4;5411:6;5407:17;5395:29;;5473:3;5465:4;5457:6;5453:17;5443:8;5439:32;5436:41;5433:128;;;5480:79;;:::i;:::-;5433:128;4999:568;;;;;:::o;5573:116::-;5643:21;5658:5;5643:21;:::i;:::-;5636:5;5633:32;5623:60;;5679:1;5676;5669:12;5623:60;5573:116;:::o;5695:133::-;5738:5;5776:6;5763:20;5754:29;;5792:30;5816:5;5792:30;:::i;:::-;5695:133;;;;:::o;5834:698::-;5926:6;5934;5942;5991:2;5979:9;5970:7;5966:23;5962:32;5959:119;;;5997:79;;:::i;:::-;5959:119;6145:1;6134:9;6130:17;6117:31;6175:18;6167:6;6164:30;6161:117;;;6197:79;;:::i;:::-;6161:117;6310:80;6382:7;6373:6;6362:9;6358:22;6310:80;:::i;:::-;6292:98;;;;6088:312;6439:2;6465:50;6507:7;6498:6;6487:9;6483:22;6465:50;:::i;:::-;6455:60;;6410:115;5834:698;;;;;:::o;6538:619::-;6615:6;6623;6631;6680:2;6668:9;6659:7;6655:23;6651:32;6648:119;;;6686:79;;:::i;:::-;6648:119;6806:1;6831:53;6876:7;6867:6;6856:9;6852:22;6831:53;:::i;:::-;6821:63;;6777:117;6933:2;6959:53;7004:7;6995:6;6984:9;6980:22;6959:53;:::i;:::-;6949:63;;6904:118;7061:2;7087:53;7132:7;7123:6;7112:9;7108:22;7087:53;:::i;:::-;7077:63;;7032:118;6538:619;;;;;:::o;7163:468::-;7228:6;7236;7285:2;7273:9;7264:7;7260:23;7256:32;7253:119;;;7291:79;;:::i;:::-;7253:119;7411:1;7436:53;7481:7;7472:6;7461:9;7457:22;7436:53;:::i;:::-;7426:63;;7382:117;7538:2;7564:50;7606:7;7597:6;7586:9;7582:22;7564:50;:::i;:::-;7554:60;;7509:115;7163:468;;;;;:::o;7637:86::-;7672:7;7712:4;7705:5;7701:16;7690:27;;7637:86;;;:::o;7729:112::-;7812:22;7828:5;7812:22;:::i;:::-;7807:3;7800:35;7729:112;;:::o;7847:214::-;7936:4;7974:2;7963:9;7959:18;7951:26;;7987:67;8051:1;8040:9;8036:17;8027:6;7987:67;:::i;:::-;7847:214;;;;:::o;8067:329::-;8126:6;8175:2;8163:9;8154:7;8150:23;8146:32;8143:119;;;8181:79;;:::i;:::-;8143:119;8301:1;8326:53;8371:7;8362:6;8351:9;8347:22;8326:53;:::i;:::-;8316:63;;8272:117;8067:329;;;;:::o;8402:118::-;8489:24;8507:5;8489:24;:::i;:::-;8484:3;8477:37;8402:118;;:::o;8526:222::-;8619:4;8657:2;8646:9;8642:18;8634:26;;8670:71;8738:1;8727:9;8723:17;8714:6;8670:71;:::i;:::-;8526:222;;;;:::o;8754:775::-;8987:4;9025:3;9014:9;9010:19;9002:27;;9039:71;9107:1;9096:9;9092:17;9083:6;9039:71;:::i;:::-;9120:72;9188:2;9177:9;9173:18;9164:6;9120:72;:::i;:::-;9202;9270:2;9259:9;9255:18;9246:6;9202:72;:::i;:::-;9284;9352:2;9341:9;9337:18;9328:6;9284:72;:::i;:::-;9366:73;9434:3;9423:9;9419:19;9410:6;9366:73;:::i;:::-;9449;9517:3;9506:9;9502:19;9493:6;9449:73;:::i;:::-;8754:775;;;;;;;;;:::o;9535:104::-;9580:7;9609:24;9627:5;9609:24;:::i;:::-;9598:35;;9535:104;;;:::o;9645:138::-;9726:32;9752:5;9726:32;:::i;:::-;9719:5;9716:43;9706:71;;9773:1;9770;9763:12;9706:71;9645:138;:::o;9789:155::-;9843:5;9881:6;9868:20;9859:29;;9897:41;9932:5;9897:41;:::i;:::-;9789:155;;;;:::o;9950:345::-;10017:6;10066:2;10054:9;10045:7;10041:23;10037:32;10034:119;;;10072:79;;:::i;:::-;10034:119;10192:1;10217:61;10270:7;10261:6;10250:9;10246:22;10217:61;:::i;:::-;10207:71;;10163:125;9950:345;;;;:::o;10301:474::-;10369:6;10377;10426:2;10414:9;10405:7;10401:23;10397:32;10394:119;;;10432:79;;:::i;:::-;10394:119;10552:1;10577:53;10622:7;10613:6;10602:9;10598:22;10577:53;:::i;:::-;10567:63;;10523:117;10679:2;10705:53;10750:7;10741:6;10730:9;10726:22;10705:53;:::i;:::-;10695:63;;10650:118;10301:474;;;;;:::o;10781:182::-;10921:34;10917:1;10909:6;10905:14;10898:58;10781:182;:::o;10969:366::-;11111:3;11132:67;11196:2;11191:3;11132:67;:::i;:::-;11125:74;;11208:93;11297:3;11208:93;:::i;:::-;11326:2;11321:3;11317:12;11310:19;;10969:366;;;:::o;11341:419::-;11507:4;11545:2;11534:9;11530:18;11522:26;;11594:9;11588:4;11584:20;11580:1;11569:9;11565:17;11558:47;11622:131;11748:4;11622:131;:::i;:::-;11614:139;;11341:419;;;:::o;11766:180::-;11814:77;11811:1;11804:88;11911:4;11908:1;11901:15;11935:4;11932:1;11925:15;11952:410;11992:7;12015:20;12033:1;12015:20;:::i;:::-;12010:25;;12049:20;12067:1;12049:20;:::i;:::-;12044:25;;12104:1;12101;12097:9;12126:30;12144:11;12126:30;:::i;:::-;12115:41;;12305:1;12296:7;12292:15;12289:1;12286:22;12266:1;12259:9;12239:83;12216:139;;12335:18;;:::i;:::-;12216:139;12000:362;11952:410;;;;:::o;12368:180::-;12416:77;12413:1;12406:88;12513:4;12510:1;12503:15;12537:4;12534:1;12527:15;12554:185;12594:1;12611:20;12629:1;12611:20;:::i;:::-;12606:25;;12645:20;12663:1;12645:20;:::i;:::-;12640:25;;12684:1;12674:35;;12689:18;;:::i;:::-;12674:35;12731:1;12728;12724:9;12719:14;;12554:185;;;;:::o;12745:332::-;12866:4;12904:2;12893:9;12889:18;12881:26;;12917:71;12985:1;12974:9;12970:17;12961:6;12917:71;:::i;:::-;12998:72;13066:2;13055:9;13051:18;13042:6;12998:72;:::i;:::-;12745:332;;;;;:::o;13083:180::-;13131:77;13128:1;13121:88;13228:4;13225:1;13218:15;13252:4;13249:1;13242:15;13269:320;13313:6;13350:1;13344:4;13340:12;13330:22;;13397:1;13391:4;13387:12;13418:18;13408:81;;13474:4;13466:6;13462:17;13452:27;;13408:81;13536:2;13528:6;13525:14;13505:18;13502:38;13499:84;;13555:18;;:::i;:::-;13499:84;13320:269;13269:320;;;:::o;13595:221::-;13735:34;13731:1;13723:6;13719:14;13712:58;13804:4;13799:2;13791:6;13787:15;13780:29;13595:221;:::o;13822:366::-;13964:3;13985:67;14049:2;14044:3;13985:67;:::i;:::-;13978:74;;14061:93;14150:3;14061:93;:::i;:::-;14179:2;14174:3;14170:12;14163:19;;13822:366;;;:::o;14194:419::-;14360:4;14398:2;14387:9;14383:18;14375:26;;14447:9;14441:4;14437:20;14433:1;14422:9;14418:17;14411:47;14475:131;14601:4;14475:131;:::i;:::-;14467:139;;14194:419;;;:::o;14619:180::-;14667:77;14664:1;14657:88;14764:4;14761:1;14754:15;14788:4;14785:1;14778:15;14805:179;14945:31;14941:1;14933:6;14929:14;14922:55;14805:179;:::o;14990:366::-;15132:3;15153:67;15217:2;15212:3;15153:67;:::i;:::-;15146:74;;15229:93;15318:3;15229:93;:::i;:::-;15347:2;15342:3;15338:12;15331:19;;14990:366;;;:::o;15362:419::-;15528:4;15566:2;15555:9;15551:18;15543:26;;15615:9;15609:4;15605:20;15601:1;15590:9;15586:17;15579:47;15643:131;15769:4;15643:131;:::i;:::-;15635:139;;15362:419;;;:::o;15787:227::-;15927:34;15923:1;15915:6;15911:14;15904:58;15996:10;15991:2;15983:6;15979:15;15972:35;15787:227;:::o;16020:366::-;16162:3;16183:67;16247:2;16242:3;16183:67;:::i;:::-;16176:74;;16259:93;16348:3;16259:93;:::i;:::-;16377:2;16372:3;16368:12;16361:19;;16020:366;;;:::o;16392:419::-;16558:4;16596:2;16585:9;16581:18;16573:26;;16645:9;16639:4;16635:20;16631:1;16620:9;16616:17;16609:47;16673:131;16799:4;16673:131;:::i;:::-;16665:139;;16392:419;;;:::o;16817:320::-;16932:4;16970:2;16959:9;16955:18;16947:26;;16983:71;17051:1;17040:9;17036:17;17027:6;16983:71;:::i;:::-;17064:66;17126:2;17115:9;17111:18;17102:6;17064:66;:::i;:::-;16817:320;;;;;:::o;17143:191::-;17183:3;17202:20;17220:1;17202:20;:::i;:::-;17197:25;;17236:20;17254:1;17236:20;:::i;:::-;17231:25;;17279:1;17276;17272:9;17265:16;;17300:3;17297:1;17294:10;17291:36;;;17307:18;;:::i;:::-;17291:36;17143:191;;;;:::o;17340:180::-;17480:32;17476:1;17468:6;17464:14;17457:56;17340:180;:::o;17526:366::-;17668:3;17689:67;17753:2;17748:3;17689:67;:::i;:::-;17682:74;;17765:93;17854:3;17765:93;:::i;:::-;17883:2;17878:3;17874:12;17867:19;;17526:366;;;:::o;17898:419::-;18064:4;18102:2;18091:9;18087:18;18079:26;;18151:9;18145:4;18141:20;18137:1;18126:9;18122:17;18115:47;18179:131;18305:4;18179:131;:::i;:::-;18171:139;;17898:419;;;:::o;18323:171::-;18463:23;18459:1;18451:6;18447:14;18440:47;18323:171;:::o;18500:366::-;18642:3;18663:67;18727:2;18722:3;18663:67;:::i;:::-;18656:74;;18739:93;18828:3;18739:93;:::i;:::-;18857:2;18852:3;18848:12;18841:19;;18500:366;;;:::o;18872:419::-;19038:4;19076:2;19065:9;19061:18;19053:26;;19125:9;19119:4;19115:20;19111:1;19100:9;19096:17;19089:47;19153:131;19279:4;19153:131;:::i;:::-;19145:139;;18872:419;;;:::o;19297:172::-;19437:24;19433:1;19425:6;19421:14;19414:48;19297:172;:::o;19475:366::-;19617:3;19638:67;19702:2;19697:3;19638:67;:::i;:::-;19631:74;;19714:93;19803:3;19714:93;:::i;:::-;19832:2;19827:3;19823:12;19816:19;;19475:366;;;:::o;19847:419::-;20013:4;20051:2;20040:9;20036:18;20028:26;;20100:9;20094:4;20090:20;20086:1;20075:9;20071:17;20064:47;20128:131;20254:4;20128:131;:::i;:::-;20120:139;;19847:419;;;:::o;20272:224::-;20412:34;20408:1;20400:6;20396:14;20389:58;20481:7;20476:2;20468:6;20464:15;20457:32;20272:224;:::o;20502:366::-;20644:3;20665:67;20729:2;20724:3;20665:67;:::i;:::-;20658:74;;20741:93;20830:3;20741:93;:::i;:::-;20859:2;20854:3;20850:12;20843:19;;20502:366;;;:::o;20874:419::-;21040:4;21078:2;21067:9;21063:18;21055:26;;21127:9;21121:4;21117:20;21113:1;21102:9;21098:17;21091:47;21155:131;21281:4;21155:131;:::i;:::-;21147:139;;20874:419;;;:::o;21299:60::-;21327:3;21348:5;21341:12;;21299:60;;;:::o;21365:142::-;21415:9;21448:53;21466:34;21475:24;21493:5;21475:24;:::i;:::-;21466:34;:::i;:::-;21448:53;:::i;:::-;21435:66;;21365:142;;;:::o;21513:126::-;21563:9;21596:37;21627:5;21596:37;:::i;:::-;21583:50;;21513:126;;;:::o;21645:134::-;21703:9;21736:37;21767:5;21736:37;:::i;:::-;21723:50;;21645:134;;;:::o;21785:147::-;21880:45;21919:5;21880:45;:::i;:::-;21875:3;21868:58;21785:147;;:::o;21938:238::-;22039:4;22077:2;22066:9;22062:18;22054:26;;22090:79;22166:1;22155:9;22151:17;22142:6;22090:79;:::i;:::-;21938:238;;;;:::o;22182:143::-;22239:5;22270:6;22264:13;22255:22;;22286:33;22313:5;22286:33;:::i;:::-;22182:143;;;;:::o;22331:351::-;22401:6;22450:2;22438:9;22429:7;22425:23;22421:32;22418:119;;;22456:79;;:::i;:::-;22418:119;22576:1;22601:64;22657:7;22648:6;22637:9;22633:22;22601:64;:::i;:::-;22591:74;;22547:128;22331:351;;;;:::o;22688:348::-;22817:4;22855:2;22844:9;22840:18;22832:26;;22868:79;22944:1;22933:9;22929:17;22920:6;22868:79;:::i;:::-;22957:72;23025:2;23014:9;23010:18;23001:6;22957:72;:::i;:::-;22688:348;;;;;:::o;23042:137::-;23096:5;23127:6;23121:13;23112:22;;23143:30;23167:5;23143:30;:::i;:::-;23042:137;;;;:::o;23185:345::-;23252:6;23301:2;23289:9;23280:7;23276:23;23272:32;23269:119;;;23307:79;;:::i;:::-;23269:119;23427:1;23452:61;23505:7;23496:6;23485:9;23481:22;23452:61;:::i;:::-;23442:71;;23398:125;23185:345;;;;:::o;23536:225::-;23676:34;23672:1;23664:6;23660:14;23653:58;23745:8;23740:2;23732:6;23728:15;23721:33;23536:225;:::o;23767:366::-;23909:3;23930:67;23994:2;23989:3;23930:67;:::i;:::-;23923:74;;24006:93;24095:3;24006:93;:::i;:::-;24124:2;24119:3;24115:12;24108:19;;23767:366;;;:::o;24139:419::-;24305:4;24343:2;24332:9;24328:18;24320:26;;24392:9;24386:4;24382:20;24378:1;24367:9;24363:17;24356:47;24420:131;24546:4;24420:131;:::i;:::-;24412:139;;24139:419;;;:::o;24564:173::-;24704:25;24700:1;24692:6;24688:14;24681:49;24564:173;:::o;24743:366::-;24885:3;24906:67;24970:2;24965:3;24906:67;:::i;:::-;24899:74;;24982:93;25071:3;24982:93;:::i;:::-;25100:2;25095:3;25091:12;25084:19;;24743:366;;;:::o;25115:419::-;25281:4;25319:2;25308:9;25304:18;25296:26;;25368:9;25362:4;25358:20;25354:1;25343:9;25339:17;25332:47;25396:131;25522:4;25396:131;:::i;:::-;25388:139;;25115:419;;;:::o;25540:143::-;25597:5;25628:6;25622:13;25613:22;;25644:33;25671:5;25644:33;:::i;:::-;25540:143;;;;:::o;25689:351::-;25759:6;25808:2;25796:9;25787:7;25783:23;25779:32;25776:119;;;25814:79;;:::i;:::-;25776:119;25934:1;25959:64;26015:7;26006:6;25995:9;25991:22;25959:64;:::i;:::-;25949:74;;25905:128;25689:351;;;;:::o;26046:332::-;26167:4;26205:2;26194:9;26190:18;26182:26;;26218:71;26286:1;26275:9;26271:17;26262:6;26218:71;:::i;:::-;26299:72;26367:2;26356:9;26352:18;26343:6;26299:72;:::i;:::-;26046:332;;;;;:::o;26384:85::-;26429:7;26458:5;26447:16;;26384:85;;;:::o;26475:158::-;26533:9;26566:61;26584:42;26593:32;26619:5;26593:32;:::i;:::-;26584:42;:::i;:::-;26566:61;:::i;:::-;26553:74;;26475:158;;;:::o;26639:147::-;26734:45;26773:5;26734:45;:::i;:::-;26729:3;26722:58;26639:147;;:::o;26792:807::-;27041:4;27079:3;27068:9;27064:19;27056:27;;27093:71;27161:1;27150:9;27146:17;27137:6;27093:71;:::i;:::-;27174:72;27242:2;27231:9;27227:18;27218:6;27174:72;:::i;:::-;27256:80;27332:2;27321:9;27317:18;27308:6;27256:80;:::i;:::-;27346;27422:2;27411:9;27407:18;27398:6;27346:80;:::i;:::-;27436:73;27504:3;27493:9;27489:19;27480:6;27436:73;:::i;:::-;27519;27587:3;27576:9;27572:19;27563:6;27519:73;:::i;:::-;26792:807;;;;;;;;;:::o;27605:663::-;27693:6;27701;27709;27758:2;27746:9;27737:7;27733:23;27729:32;27726:119;;;27764:79;;:::i;:::-;27726:119;27884:1;27909:64;27965:7;27956:6;27945:9;27941:22;27909:64;:::i;:::-;27899:74;;27855:128;28022:2;28048:64;28104:7;28095:6;28084:9;28080:22;28048:64;:::i;:::-;28038:74;;27993:129;28161:2;28187:64;28243:7;28234:6;28223:9;28219:22;28187:64;:::i;:::-;28177:74;;28132:129;27605:663;;;;;:::o;28274:332::-;28395:4;28433:2;28422:9;28418:18;28410:26;;28446:71;28514:1;28503:9;28499:17;28490:6;28446:71;:::i;:::-;28527:72;28595:2;28584:9;28580:18;28571:6;28527:72;:::i;:::-;28274:332;;;;;:::o;28612:223::-;28752:34;28748:1;28740:6;28736:14;28729:58;28821:6;28816:2;28808:6;28804:15;28797:31;28612:223;:::o;28841:366::-;28983:3;29004:67;29068:2;29063:3;29004:67;:::i;:::-;28997:74;;29080:93;29169:3;29080:93;:::i;:::-;29198:2;29193:3;29189:12;29182:19;;28841:366;;;:::o;29213:419::-;29379:4;29417:2;29406:9;29402:18;29394:26;;29466:9;29460:4;29456:20;29452:1;29441:9;29437:17;29430:47;29494:131;29620:4;29494:131;:::i;:::-;29486:139;;29213:419;;;:::o;29638:221::-;29778:34;29774:1;29766:6;29762:14;29755:58;29847:4;29842:2;29834:6;29830:15;29823:29;29638:221;:::o;29865:366::-;30007:3;30028:67;30092:2;30087:3;30028:67;:::i;:::-;30021:74;;30104:93;30193:3;30104:93;:::i;:::-;30222:2;30217:3;30213:12;30206:19;;29865:366;;;:::o;30237:419::-;30403:4;30441:2;30430:9;30426:18;30418:26;;30490:9;30484:4;30480:20;30476:1;30465:9;30461:17;30454:47;30518:131;30644:4;30518:131;:::i;:::-;30510:139;;30237:419;;;:::o;30662:224::-;30802:34;30798:1;30790:6;30786:14;30779:58;30871:7;30866:2;30858:6;30854:15;30847:32;30662:224;:::o;30892:366::-;31034:3;31055:67;31119:2;31114:3;31055:67;:::i;:::-;31048:74;;31131:93;31220:3;31131:93;:::i;:::-;31249:2;31244:3;31240:12;31233:19;;30892:366;;;:::o;31264:419::-;31430:4;31468:2;31457:9;31453:18;31445:26;;31517:9;31511:4;31507:20;31503:1;31492:9;31488:17;31481:47;31545:131;31671:4;31545:131;:::i;:::-;31537:139;;31264:419;;;:::o;31689:222::-;31829:34;31825:1;31817:6;31813:14;31806:58;31898:5;31893:2;31885:6;31881:15;31874:30;31689:222;:::o;31917:366::-;32059:3;32080:67;32144:2;32139:3;32080:67;:::i;:::-;32073:74;;32156:93;32245:3;32156:93;:::i;:::-;32274:2;32269:3;32265:12;32258:19;;31917:366;;;:::o;32289:419::-;32455:4;32493:2;32482:9;32478:18;32470:26;;32542:9;32536:4;32532:20;32528:1;32517:9;32513:17;32506:47;32570:131;32696:4;32570:131;:::i;:::-;32562:139;;32289:419;;;:::o;32714:228::-;32854:34;32850:1;32842:6;32838:14;32831:58;32923:11;32918:2;32910:6;32906:15;32899:36;32714:228;:::o;32948:366::-;33090:3;33111:67;33175:2;33170:3;33111:67;:::i;:::-;33104:74;;33187:93;33276:3;33187:93;:::i;:::-;33305:2;33300:3;33296:12;33289:19;;32948:366;;;:::o;33320:419::-;33486:4;33524:2;33513:9;33509:18;33501:26;;33573:9;33567:4;33563:20;33559:1;33548:9;33544:17;33537:47;33601:131;33727:4;33601:131;:::i;:::-;33593:139;;33320:419;;;:::o;33745:177::-;33885:29;33881:1;33873:6;33869:14;33862:53;33745:177;:::o;33928:366::-;34070:3;34091:67;34155:2;34150:3;34091:67;:::i;:::-;34084:74;;34167:93;34256:3;34167:93;:::i;:::-;34285:2;34280:3;34276:12;34269:19;;33928:366;;;:::o;34300:419::-;34466:4;34504:2;34493:9;34489:18;34481:26;;34553:9;34547:4;34543:20;34539:1;34528:9;34524:17;34517:47;34581:131;34707:4;34581:131;:::i;:::-;34573:139;;34300:419;;;:::o;34725:176::-;34865:28;34861:1;34853:6;34849:14;34842:52;34725:176;:::o;34907:366::-;35049:3;35070:67;35134:2;35129:3;35070:67;:::i;:::-;35063:74;;35146:93;35235:3;35146:93;:::i;:::-;35264:2;35259:3;35255:12;35248:19;;34907:366;;;:::o;35279:419::-;35445:4;35483:2;35472:9;35468:18;35460:26;;35532:9;35526:4;35522:20;35518:1;35507:9;35503:17;35496:47;35560:131;35686:4;35560:131;:::i;:::-;35552:139;;35279:419;;;:::o;35704:233::-;35743:3;35766:24;35784:5;35766:24;:::i;:::-;35757:33;;35812:66;35805:5;35802:77;35799:103;;35882:18;;:::i;:::-;35799:103;35929:1;35922:5;35918:13;35911:20;;35704:233;;;:::o;35943:180::-;35991:77;35988:1;35981:88;36088:4;36085:1;36078:15;36112:4;36109:1;36102:15;36129:114;36196:6;36230:5;36224:12;36214:22;;36129:114;;;:::o;36249:184::-;36348:11;36382:6;36377:3;36370:19;36422:4;36417:3;36413:14;36398:29;;36249:184;;;;:::o;36439:132::-;36506:4;36529:3;36521:11;;36559:4;36554:3;36550:14;36542:22;;36439:132;;;:::o;36577:108::-;36654:24;36672:5;36654:24;:::i;:::-;36649:3;36642:37;36577:108;;:::o;36691:179::-;36760:10;36781:46;36823:3;36815:6;36781:46;:::i;:::-;36859:4;36854:3;36850:14;36836:28;;36691:179;;;;:::o;36876:113::-;36946:4;36978;36973:3;36969:14;36961:22;;36876:113;;;:::o;37025:732::-;37144:3;37173:54;37221:5;37173:54;:::i;:::-;37243:86;37322:6;37317:3;37243:86;:::i;:::-;37236:93;;37353:56;37403:5;37353:56;:::i;:::-;37432:7;37463:1;37448:284;37473:6;37470:1;37467:13;37448:284;;;37549:6;37543:13;37576:63;37635:3;37620:13;37576:63;:::i;:::-;37569:70;;37662:60;37715:6;37662:60;:::i;:::-;37652:70;;37508:224;37495:1;37492;37488:9;37483:14;;37448:284;;;37452:14;37748:3;37741:10;;37149:608;;;37025:732;;;;:::o;37763:831::-;38026:4;38064:3;38053:9;38049:19;38041:27;;38078:71;38146:1;38135:9;38131:17;38122:6;38078:71;:::i;:::-;38159:80;38235:2;38224:9;38220:18;38211:6;38159:80;:::i;:::-;38286:9;38280:4;38276:20;38271:2;38260:9;38256:18;38249:48;38314:108;38417:4;38408:6;38314:108;:::i;:::-;38306:116;;38432:72;38500:2;38489:9;38485:18;38476:6;38432:72;:::i;:::-;38514:73;38582:3;38571:9;38567:19;38558:6;38514:73;:::i;:::-;37763:831;;;;;;;;:::o;38600:147::-;38701:11;38738:3;38723:18;;38600:147;;;;:::o;38753:114::-;;:::o;38873:398::-;39032:3;39053:83;39134:1;39129:3;39053:83;:::i;:::-;39046:90;;39145:93;39234:3;39145:93;:::i;:::-;39263:1;39258:3;39254:11;39247:18;;38873:398;;;:::o;39277:379::-;39461:3;39483:147;39626:3;39483:147;:::i;:::-;39476:154;;39647:3;39640:10;;39277:379;;;:::o;39662:225::-;39802:34;39798:1;39790:6;39786:14;39779:58;39871:8;39866:2;39858:6;39854:15;39847:33;39662:225;:::o;39893:366::-;40035:3;40056:67;40120:2;40115:3;40056:67;:::i;:::-;40049:74;;40132:93;40221:3;40132:93;:::i;:::-;40250:2;40245:3;40241:12;40234:19;;39893:366;;;:::o;40265:419::-;40431:4;40469:2;40458:9;40454:18;40446:26;;40518:9;40512:4;40508:20;40504:1;40493:9;40489:17;40482:47;40546:131;40672:4;40546:131;:::i;:::-;40538:139;;40265:419;;;:::o;40690:194::-;40730:4;40750:20;40768:1;40750:20;:::i;:::-;40745:25;;40784:20;40802:1;40784:20;:::i;:::-;40779:25;;40828:1;40825;40821:9;40813:17;;40852:1;40846:4;40843:11;40840:37;;;40857:18;;:::i;:::-;40840:37;40690:194;;;;:::o

Swarm Source

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