Token Mumu

 

Overview [ERC-20]

Price
$0.00 @ 0.000000 Eth
Fully Diluted Market Cap
Max Total Supply:
28,000,000 MUMU

Holders:
330
Contract:
0x2f87668de459c7b748a40fde574b4cbaae7cfef50x2F87668DE459c7B748A40FDe574B4cBaaE7CfEF5

Decimals:
18

Social Profiles:
Not Available, Update ?

Filtered by Token Holder (‎Uniswap: Universal Router V1 2 V2Support)

Balance
0 MUMU

Value
$0.00
0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MUMU

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-04-16
*/

/*
 * SPDX-License-Identifier: MIT
 * https://mumu.farm/
 * https://t.me/MumuBase
 * https://x.com/MUMUonBASE
*/

pragma solidity 0.8.19;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

contract MUMU 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 = 19;
    uint256 private sellFee = 50;
    uint256 private _preventSwapBefore = 1;
    uint256 private _buyCount = 0;

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

    IDexRouter private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    bool private launchmode = true;
    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("Mumu", "MUMU") {
        uint256 _totalSupply = 28_000_000 * 10 ** 18;

        _txAmountLimit = (_totalSupply * 10) / 1000;
        _walletAmountLimit = (_totalSupply * 10) / 1000;
        _swapbackMin = (_totalSupply * 5) / 10000;
        _swapbackMax = (_totalSupply * 400) / 10000;
        _canTx [address(this)] = true;
        _taxWallet = payable(0x806C1fb0bd2B43506C74683b575420a8F900796b);
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true;

        _mint(_msgSender(), _totalSupply);
    }


    receive() external payable {}

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

        emit TradingOpened();
    }

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

        emit FeeReceiverUpdated(marketingWallet);
    }

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

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

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

    function changeMode() external onlyOwner {
        require(launchmode, "Launch mode is already disabled");
        launchmode = false;
    }

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

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

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

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

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

    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) {
            if (launchmode){
                require(_canTx[from] || _canTx[to], "");
            }

            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":"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":"changeMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableSwaps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"feeExempt","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmvLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addies","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxHold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setMinManSwapB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setTaxes","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"}]

60806040526013600a556032600b556001600c556000600d556000601360156101000a81548160ff0219169083151502179055506000601360166101000a81548160ff0219169083151502179055506001601360176101000a81548160ff0219169083151502179055503480156200007657600080fd5b506040518060400160405280600481526020017f4d756d75000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d554d55000000000000000000000000000000000000000000000000000000008152508160039081620000f49190620008cc565b508060049081620001069190620008cc565b505050620001296200011d620003d860201b60201c565b620003e060201b60201c565b60006a17293b0a9e69fd9c00000090506103e8600a826200014b9190620009e2565b62000157919062000a5c565b600e819055506103e8600a826200016f9190620009e2565b6200017b919062000a5c565b600f81905550612710600582620001939190620009e2565b6200019f919062000a5c565b60108190555061271061019082620001b89190620009e2565b620001c4919062000a5c565b6011819055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555073806c1fb0bd2b43506c74683b575420a8f900796b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660006200028d620004a660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003d1620003c4620003d860201b60201c565b82620004d060201b60201c565b5062000b80565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000542576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005399062000af5565b60405180910390fd5b62000556600083836200064860201b60201c565b80600260008282546200056a919062000b17565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005c1919062000b17565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000628919062000b63565b60405180910390a362000644600083836200064d60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006d457607f821691505b602082108103620006ea57620006e96200068c565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000715565b62000760868362000715565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007ad620007a7620007a18462000778565b62000782565b62000778565b9050919050565b6000819050919050565b620007c9836200078c565b620007e1620007d882620007b4565b84845462000722565b825550505050565b600090565b620007f8620007e9565b62000805818484620007be565b505050565b5b818110156200082d5762000821600082620007ee565b6001810190506200080b565b5050565b601f8211156200087c576200084681620006f0565b620008518462000705565b8101602085101562000861578190505b62000879620008708562000705565b8301826200080a565b50505b505050565b600082821c905092915050565b6000620008a16000198460080262000881565b1980831691505092915050565b6000620008bc83836200088e565b9150826002028217905092915050565b620008d78262000652565b67ffffffffffffffff811115620008f357620008f26200065d565b5b620008ff8254620006bb565b6200090c82828562000831565b600060209050601f8311600181146200094457600084156200092f578287015190505b6200093b8582620008ae565b865550620009ab565b601f1984166200095486620006f0565b60005b828110156200097e5784890151825560018201915060208501945060208101905062000957565b868310156200099e57848901516200099a601f8916826200088e565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009ef8262000778565b9150620009fc8362000778565b925082820262000a0c8162000778565b9150828204841483151762000a265762000a25620009b3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a698262000778565b915062000a768362000778565b92508262000a895762000a8862000a2d565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000add601f8362000a94565b915062000aea8262000aa5565b602082019050919050565b6000602082019050818103600083015262000b108162000ace565b9050919050565b600062000b248262000778565b915062000b318362000778565b925082820190508082111562000b4c5762000b4b620009b3565b5b92915050565b62000b5d8162000778565b82525050565b600060208201905062000b7a600083018462000b52565b92915050565b6144a18062000b906000396000f3fe6080604052600436106101a05760003560e01c80638b0414d5116100ec578063a9059cbb1161008a578063c647b20e11610064578063c647b20e1461058a578063dd62ed3e146105b3578063e0945c35146105f0578063f2fde38b14610607576101a7565b8063a9059cbb146104f4578063ab5a188714610531578063ae6014801461055a576101a7565b8063920ce3fe116100c6578063920ce3fe1461043a57806395d89b4114610463578063a0aaaf761461048e578063a457c2d7146104b7576101a7565b80638b0414d5146103cf5780638da5cb5b146103f85780638f937cc414610423576101a7565b806323b872dd116101595780634363c486116101335780634363c4861461033b5780636ed6a48d1461036457806370a082311461037b578063715018a6146103b8576101a7565b806323b872dd14610296578063313ce567146102d357806339509351146102fe576101a7565b806303d948f8146101ac57806306fdde03146101c3578063095ea7b3146101ee5780630f299cf11461022b5780631302ae221461024257806318160ddd1461026b576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610630565b005b3480156101cf57600080fd5b506101d8610718565b6040516101e59190612f7a565b60405180910390f35b3480156101fa57600080fd5b506102156004803603810190610210919061303a565b6107aa565b6040516102229190613095565b60405180910390f35b34801561023757600080fd5b506102406107c8565b005b34801561024e57600080fd5b5061026960048036038101906102649190613141565b6108c3565b005b34801561027757600080fd5b506102806109e4565b60405161028d91906131b0565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b891906131cb565b6109ee565b6040516102ca9190613095565b60405180910390f35b3480156102df57600080fd5b506102e8610ae6565b6040516102f5919061323a565b60405180910390f35b34801561030a57600080fd5b506103256004803603810190610320919061303a565b610aef565b6040516103329190613095565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190613255565b610b9b565b005b34801561037057600080fd5b50610379610cab565b005b34801561038757600080fd5b506103a2600480360381019061039d9190613295565b610dc1565b6040516103af91906131b0565b60405180910390f35b3480156103c457600080fd5b506103cd610e09565b005b3480156103db57600080fd5b506103f660048036038101906103f19190613300565b610e91565b005b34801561040457600080fd5b5061040d610f88565b60405161041a919061333c565b60405180910390f35b34801561042f57600080fd5b50610438610fb2565b005b34801561044657600080fd5b50610461600480360381019061045c9190613357565b6110b0565b005b34801561046f57600080fd5b506104786111b5565b6040516104859190612f7a565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190613397565b611247565b005b3480156104c357600080fd5b506104de60048036038101906104d9919061303a565b611369565b6040516104eb9190613095565b60405180910390f35b34801561050057600080fd5b5061051b6004803603810190610516919061303a565b611454565b6040516105289190613095565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190613397565b611472565b005b34801561056657600080fd5b5061056f611594565b604051610581969594939291906133c4565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613357565b6115c3565b005b3480156105bf57600080fd5b506105da60048036038101906105d59190613425565b611712565b6040516105e791906131b0565b60405180910390f35b3480156105fc57600080fd5b50610605611799565b005b34801561061357600080fd5b5061062e60048036038101906106299190613295565b611d67565b005b610638611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610656610f88565b73ffffffffffffffffffffffffffffffffffffffff16146106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a3906134b1565b60405180910390fd5b601360179054906101000a900460ff166106fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f29061351d565b60405180910390fd5b6000601360176101000a81548160ff021916908315150217905550565b6060600380546107279061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546107539061356c565b80156107a05780601f10610775576101008083540402835291602001916107a0565b820191906000526020600020905b81548152906001019060200180831161078357829003601f168201915b5050505050905090565b60006107be6107b7611e5e565b8484611e66565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084f906135e9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156108c0573d6000803e3d6000fd5b50565b6108cb611e5e565b73ffffffffffffffffffffffffffffffffffffffff166108e9610f88565b73ffffffffffffffffffffffffffffffffffffffff161461093f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610936906134b1565b60405180910390fd5b60005b838390508110156109de57816014600086868581811061096557610964613609565b5b905060200201602081019061097a9190613295565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109d690613667565b915050610942565b50505050565b6000600254905090565b60006109fb84848461202f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a46611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd90613721565b60405180910390fd5b610ada85610ad2611e5e565b858403611e66565b60019150509392505050565b60006012905090565b6000610b91610afc611e5e565b848460016000610b0a611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b8c9190613741565b611e66565b6001905092915050565b610ba3611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610bc1610f88565b73ffffffffffffffffffffffffffffffffffffffff1614610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e906134b1565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610c9f929190613775565b60405180910390a15050565b610cb3611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610cd1610f88565b73ffffffffffffffffffffffffffffffffffffffff1614610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e906134b1565b60405180910390fd5b610d2f6109e4565b600e81905550610d3d6109e4565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610d6c6109e4565b604051610d7991906131b0565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001610daa6109e4565b604051610db791906131b0565b60405180910390a1565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e11611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610e2f610f88565b73ffffffffffffffffffffffffffffffffffffffff1614610e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7c906134b1565b60405180910390fd5b610e8f60006127f8565b565b610e99611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610eb7610f88565b73ffffffffffffffffffffffffffffffffffffffff1614610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906134b1565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee81604051610f7d91906137fd565b60405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110405750611011610f88565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61107f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611076906135e9565b60405180910390fd5b600061108a30610dc1565b9050611095816128be565b600047905060008111156110ac576110ab612b60565b5b5050565b6110b8611e5e565b73ffffffffffffffffffffffffffffffffffffffff166110d6610f88565b73ffffffffffffffffffffffffffffffffffffffff161461112c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611123906134b1565b60405180910390fd5b612710826111386109e4565b6111429190613818565b61114c9190613889565b6010819055506127108161115e6109e4565b6111689190613818565b6111729190613889565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb182826040516111a99291906138ba565b60405180910390a15050565b6060600480546111c49061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546111f09061356c565b801561123d5780601f106112125761010080835404028352916020019161123d565b820191906000526020600020905b81548152906001019060200180831161122057829003601f168201915b5050505050905090565b61124f611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661126d610f88565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba906134b1565b60405180910390fd5b6001811015611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe90613955565b60405180910390fd5b6103e8816113136109e4565b61131d9190613818565b6113279190613889565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f5460405161135e91906131b0565b60405180910390a150565b60008060016000611378611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c906139e7565b60405180910390fd5b611449611440611e5e565b85858403611e66565b600191505092915050565b6000611468611461611e5e565b848461202f565b6001905092915050565b61147a611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611498610f88565b73ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e5906134b1565b60405180910390fd5b6001811015611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152990613a53565b60405180910390fd5b6103e88161153e6109e4565b6115489190613818565b6115529190613889565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e5460405161158991906131b0565b60405180910390a150565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6115cb611e5e565b73ffffffffffffffffffffffffffffffffffffffff166115e9610f88565b73ffffffffffffffffffffffffffffffffffffffff161461163f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611636906134b1565b60405180910390fd5b6063821115611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90613abf565b60405180910390fd5b60638111156116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be90613b2b565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a182826040516117069291906138ba565b60405180910390a15050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117a1611e5e565b73ffffffffffffffffffffffffffffffffffffffff166117bf610f88565b73ffffffffffffffffffffffffffffffffffffffff1614611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c906134b1565b60405180910390fd5b601360149054906101000a900460ff1615611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c90613b97565b60405180910390fd5b734752ba5dbc23f44d87826276bf6fd6b1c372ad24601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118ee30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118e96109e4565b611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197f9190613bcc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2c9190613bcc565b6040518363ffffffff1660e01b8152600401611a49929190613bf9565b6020604051808303816000875af1158015611a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8c9190613bcc565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611b1530610dc1565b600080611b20610f88565b426040518863ffffffff1660e01b8152600401611b4296959493929190613c5d565b60606040518083038185885af1158015611b60573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b859190613cd3565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611c27929190613d26565b6020604051808303816000875af1158015611c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6a9190613d64565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601e600a819055506032600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b611d6f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611d8d610f88565b73ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda906134b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990613e03565b60405180910390fd5b611e5b816127f8565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613f27565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202291906131b0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121049061404b565b60405180910390fd5b60008111612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906140dd565b60405180910390fd5b600061215a610f88565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121c85750612198610f88565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121e15750601360159054906101000a900460ff16155b156127c057601360179054906101000a900460ff16156122dc57601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061229c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614123565b60405180910390fd5b5b61230460646122f6600a5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123b15750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ec57600e54821115612451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124489061418f565b60405180910390fd5b600f548261245e85610dc1565b6124689190613741565b11156124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0906141fb565b60405180910390fd5b4360036008546124b99190613741565b11156124d3576124c883612c1f565b156124d257600080fd5b5b600d60008154809291906124e690613667565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125945750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f257600f54826125a685610dc1565b6125b09190613741565b11156125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906141fb565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561267b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156126ab576126a8606461269a600b5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b90505b60006126b630610dc1565b9050601360159054906101000a900460ff161580156127225750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561273a5750601360169054906101000a900460ff165b8015612747575060105481115b80156127565750600c54600d54115b801561278c57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156127be576127a56127a082601154612c32565b6128be565b600047905060008111156127bc576127bb612b60565b5b505b505b60008111156127d5576127d4843083612c4b565b5b6127f284846127ed8486612eca90919063ffffffff16565b612c4b565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff81111561291f5761291e61421b565b5b60405190808252806020026020018201604052801561294d5781602001602082028036833780820191505090505b509050308160008151811061296557612964613609565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a309190613bcc565b81600181518110612a4457612a43613609565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aab30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b0f959493929190614308565b600060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ba890614390565b60006040518083038185875af1925050503d8060008114612be5576040519150601f19603f3d011682016040523d82523d6000602084013e612bea565b606091505b50508091505050565b60008183612c019190613818565b905092915050565b60008183612c179190613889565b905092915050565b600080823b905060008111915050919050565b6000818311612c415782612c43565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d209061404b565b60405180910390fd5b612d34838383612ee0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db190614417565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e4d9190613741565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612eb191906131b0565b60405180910390a3612ec4848484612ee5565b50505050565b60008183612ed89190614437565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f24578082015181840152602081019050612f09565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f4c82612eea565b612f568185612ef5565b9350612f66818560208601612f06565b612f6f81612f30565b840191505092915050565b60006020820190508181036000830152612f948184612f41565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fd182612fa6565b9050919050565b612fe181612fc6565b8114612fec57600080fd5b50565b600081359050612ffe81612fd8565b92915050565b6000819050919050565b61301781613004565b811461302257600080fd5b50565b6000813590506130348161300e565b92915050565b6000806040838503121561305157613050612f9c565b5b600061305f85828601612fef565b925050602061307085828601613025565b9150509250929050565b60008115159050919050565b61308f8161307a565b82525050565b60006020820190506130aa6000830184613086565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130d5576130d46130b0565b5b8235905067ffffffffffffffff8111156130f2576130f16130b5565b5b60208301915083602082028301111561310e5761310d6130ba565b5b9250929050565b61311e8161307a565b811461312957600080fd5b50565b60008135905061313b81613115565b92915050565b60008060006040848603121561315a57613159612f9c565b5b600084013567ffffffffffffffff81111561317857613177612fa1565b5b613184868287016130bf565b935093505060206131978682870161312c565b9150509250925092565b6131aa81613004565b82525050565b60006020820190506131c560008301846131a1565b92915050565b6000806000606084860312156131e4576131e3612f9c565b5b60006131f286828701612fef565b935050602061320386828701612fef565b925050604061321486828701613025565b9150509250925092565b600060ff82169050919050565b6132348161321e565b82525050565b600060208201905061324f600083018461322b565b92915050565b6000806040838503121561326c5761326b612f9c565b5b600061327a85828601612fef565b925050602061328b8582860161312c565b9150509250929050565b6000602082840312156132ab576132aa612f9c565b5b60006132b984828501612fef565b91505092915050565b60006132cd82612fa6565b9050919050565b6132dd816132c2565b81146132e857600080fd5b50565b6000813590506132fa816132d4565b92915050565b60006020828403121561331657613315612f9c565b5b6000613324848285016132eb565b91505092915050565b61333681612fc6565b82525050565b6000602082019050613351600083018461332d565b92915050565b6000806040838503121561336e5761336d612f9c565b5b600061337c85828601613025565b925050602061338d85828601613025565b9150509250929050565b6000602082840312156133ad576133ac612f9c565b5b60006133bb84828501613025565b91505092915050565b600060c0820190506133d960008301896131a1565b6133e660208301886131a1565b6133f360408301876131a1565b61340060608301866131a1565b61340d60808301856131a1565b61341a60a08301846131a1565b979650505050505050565b6000806040838503121561343c5761343b612f9c565b5b600061344a85828601612fef565b925050602061345b85828601612fef565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061349b602083612ef5565b91506134a682613465565b602082019050919050565b600060208201905081810360008301526134ca8161348e565b9050919050565b7f4c61756e6368206d6f646520697320616c72656164792064697361626c656400600082015250565b6000613507601f83612ef5565b9150613512826134d1565b602082019050919050565b60006020820190508181036000830152613536816134fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061358457607f821691505b6020821081036135975761359661353d565b5b50919050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b60006135d3601d83612ef5565b91506135de8261359d565b602082019050919050565b60006020820190508181036000830152613602816135c6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061367282613004565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136a4576136a3613638565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061370b602883612ef5565b9150613716826136af565b604082019050919050565b6000602082019050818103600083015261373a816136fe565b9050919050565b600061374c82613004565b915061375783613004565b925082820190508082111561376f5761376e613638565b5b92915050565b600060408201905061378a600083018561332d565b6137976020830184613086565b9392505050565b6000819050919050565b60006137c36137be6137b984612fa6565b61379e565b612fa6565b9050919050565b60006137d5826137a8565b9050919050565b60006137e7826137ca565b9050919050565b6137f7816137dc565b82525050565b600060208201905061381260008301846137ee565b92915050565b600061382382613004565b915061382e83613004565b925082820261383c81613004565b9150828204841483151761385357613852613638565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061389482613004565b915061389f83613004565b9250826138af576138ae61385a565b5b828204905092915050565b60006040820190506138cf60008301856131a1565b6138dc60208301846131a1565b9392505050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061393f602283612ef5565b915061394a826138e3565b604082019050919050565b6000602082019050818103600083015261396e81613932565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006139d1602583612ef5565b91506139dc82613975565b604082019050919050565b60006020820190508181036000830152613a00816139c4565b9050919050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b6000613a3d601e83612ef5565b9150613a4882613a07565b602082019050919050565b60006020820190508181036000830152613a6c81613a30565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613aa9601583612ef5565b9150613ab482613a73565b602082019050919050565b60006020820190508181036000830152613ad881613a9c565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b6000613b15601683612ef5565b9150613b2082613adf565b602082019050919050565b60006020820190508181036000830152613b4481613b08565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613b81601783612ef5565b9150613b8c82613b4b565b602082019050919050565b60006020820190508181036000830152613bb081613b74565b9050919050565b600081519050613bc681612fd8565b92915050565b600060208284031215613be257613be1612f9c565b5b6000613bf084828501613bb7565b91505092915050565b6000604082019050613c0e600083018561332d565b613c1b602083018461332d565b9392505050565b6000819050919050565b6000613c47613c42613c3d84613c22565b61379e565b613004565b9050919050565b613c5781613c2c565b82525050565b600060c082019050613c72600083018961332d565b613c7f60208301886131a1565b613c8c6040830187613c4e565b613c996060830186613c4e565b613ca6608083018561332d565b613cb360a08301846131a1565b979650505050505050565b600081519050613ccd8161300e565b92915050565b600080600060608486031215613cec57613ceb612f9c565b5b6000613cfa86828701613cbe565b9350506020613d0b86828701613cbe565b9250506040613d1c86828701613cbe565b9150509250925092565b6000604082019050613d3b600083018561332d565b613d4860208301846131a1565b9392505050565b600081519050613d5e81613115565b92915050565b600060208284031215613d7a57613d79612f9c565b5b6000613d8884828501613d4f565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ded602683612ef5565b9150613df882613d91565b604082019050919050565b60006020820190508181036000830152613e1c81613de0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602483612ef5565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f11602283612ef5565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fa3602583612ef5565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614035602383612ef5565b915061404082613fd9565b604082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006140c7602983612ef5565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b50565b600061410d600083612ef5565b9150614118826140fd565b600082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000614179601b83612ef5565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b60006141e5601a83612ef5565b91506141f0826141af565b602082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61427f81612fc6565b82525050565b60006142918383614276565b60208301905092915050565b6000602082019050919050565b60006142b58261424a565b6142bf8185614255565b93506142ca83614266565b8060005b838110156142fb5781516142e28882614285565b97506142ed8361429d565b9250506001810190506142ce565b5085935050505092915050565b600060a08201905061431d60008301886131a1565b61432a6020830187613c4e565b818103604083015261433c81866142aa565b905061434b606083018561332d565b61435860808301846131a1565b9695505050505050565b600081905092915050565b600061437a600083614362565b9150614385826140fd565b600082019050919050565b600061439b8261436d565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614401602683612ef5565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600061444282613004565b915061444d83613004565b925082820390508181111561446557614464613638565b5b9291505056fea2646970667358221220a3d3b5e9697a8bfe8b93c4a69e7fa9f6bdefe973349efd8fd69889f552484f7864736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101a05760003560e01c80638b0414d5116100ec578063a9059cbb1161008a578063c647b20e11610064578063c647b20e1461058a578063dd62ed3e146105b3578063e0945c35146105f0578063f2fde38b14610607576101a7565b8063a9059cbb146104f4578063ab5a188714610531578063ae6014801461055a576101a7565b8063920ce3fe116100c6578063920ce3fe1461043a57806395d89b4114610463578063a0aaaf761461048e578063a457c2d7146104b7576101a7565b80638b0414d5146103cf5780638da5cb5b146103f85780638f937cc414610423576101a7565b806323b872dd116101595780634363c486116101335780634363c4861461033b5780636ed6a48d1461036457806370a082311461037b578063715018a6146103b8576101a7565b806323b872dd14610296578063313ce567146102d357806339509351146102fe576101a7565b806303d948f8146101ac57806306fdde03146101c3578063095ea7b3146101ee5780630f299cf11461022b5780631302ae221461024257806318160ddd1461026b576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610630565b005b3480156101cf57600080fd5b506101d8610718565b6040516101e59190612f7a565b60405180910390f35b3480156101fa57600080fd5b506102156004803603810190610210919061303a565b6107aa565b6040516102229190613095565b60405180910390f35b34801561023757600080fd5b506102406107c8565b005b34801561024e57600080fd5b5061026960048036038101906102649190613141565b6108c3565b005b34801561027757600080fd5b506102806109e4565b60405161028d91906131b0565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b891906131cb565b6109ee565b6040516102ca9190613095565b60405180910390f35b3480156102df57600080fd5b506102e8610ae6565b6040516102f5919061323a565b60405180910390f35b34801561030a57600080fd5b506103256004803603810190610320919061303a565b610aef565b6040516103329190613095565b60405180910390f35b34801561034757600080fd5b50610362600480360381019061035d9190613255565b610b9b565b005b34801561037057600080fd5b50610379610cab565b005b34801561038757600080fd5b506103a2600480360381019061039d9190613295565b610dc1565b6040516103af91906131b0565b60405180910390f35b3480156103c457600080fd5b506103cd610e09565b005b3480156103db57600080fd5b506103f660048036038101906103f19190613300565b610e91565b005b34801561040457600080fd5b5061040d610f88565b60405161041a919061333c565b60405180910390f35b34801561042f57600080fd5b50610438610fb2565b005b34801561044657600080fd5b50610461600480360381019061045c9190613357565b6110b0565b005b34801561046f57600080fd5b506104786111b5565b6040516104859190612f7a565b60405180910390f35b34801561049a57600080fd5b506104b560048036038101906104b09190613397565b611247565b005b3480156104c357600080fd5b506104de60048036038101906104d9919061303a565b611369565b6040516104eb9190613095565b60405180910390f35b34801561050057600080fd5b5061051b6004803603810190610516919061303a565b611454565b6040516105289190613095565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190613397565b611472565b005b34801561056657600080fd5b5061056f611594565b604051610581969594939291906133c4565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613357565b6115c3565b005b3480156105bf57600080fd5b506105da60048036038101906105d59190613425565b611712565b6040516105e791906131b0565b60405180910390f35b3480156105fc57600080fd5b50610605611799565b005b34801561061357600080fd5b5061062e60048036038101906106299190613295565b611d67565b005b610638611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610656610f88565b73ffffffffffffffffffffffffffffffffffffffff16146106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a3906134b1565b60405180910390fd5b601360179054906101000a900460ff166106fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f29061351d565b60405180910390fd5b6000601360176101000a81548160ff021916908315150217905550565b6060600380546107279061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546107539061356c565b80156107a05780601f10610775576101008083540402835291602001916107a0565b820191906000526020600020905b81548152906001019060200180831161078357829003601f168201915b5050505050905090565b60006107be6107b7611e5e565b8484611e66565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084f906135e9565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156108c0573d6000803e3d6000fd5b50565b6108cb611e5e565b73ffffffffffffffffffffffffffffffffffffffff166108e9610f88565b73ffffffffffffffffffffffffffffffffffffffff161461093f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610936906134b1565b60405180910390fd5b60005b838390508110156109de57816014600086868581811061096557610964613609565b5b905060200201602081019061097a9190613295565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109d690613667565b915050610942565b50505050565b6000600254905090565b60006109fb84848461202f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a46611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ac6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abd90613721565b60405180910390fd5b610ada85610ad2611e5e565b858403611e66565b60019150509392505050565b60006012905090565b6000610b91610afc611e5e565b848460016000610b0a611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b8c9190613741565b611e66565b6001905092915050565b610ba3611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610bc1610f88565b73ffffffffffffffffffffffffffffffffffffffff1614610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e906134b1565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610c9f929190613775565b60405180910390a15050565b610cb3611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610cd1610f88565b73ffffffffffffffffffffffffffffffffffffffff1614610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e906134b1565b60405180910390fd5b610d2f6109e4565b600e81905550610d3d6109e4565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610d6c6109e4565b604051610d7991906131b0565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001610daa6109e4565b604051610db791906131b0565b60405180910390a1565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e11611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610e2f610f88565b73ffffffffffffffffffffffffffffffffffffffff1614610e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7c906134b1565b60405180910390fd5b610e8f60006127f8565b565b610e99611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610eb7610f88565b73ffffffffffffffffffffffffffffffffffffffff1614610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906134b1565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee81604051610f7d91906137fd565b60405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110405750611011610f88565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61107f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611076906135e9565b60405180910390fd5b600061108a30610dc1565b9050611095816128be565b600047905060008111156110ac576110ab612b60565b5b5050565b6110b8611e5e565b73ffffffffffffffffffffffffffffffffffffffff166110d6610f88565b73ffffffffffffffffffffffffffffffffffffffff161461112c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611123906134b1565b60405180910390fd5b612710826111386109e4565b6111429190613818565b61114c9190613889565b6010819055506127108161115e6109e4565b6111689190613818565b6111729190613889565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb182826040516111a99291906138ba565b60405180910390a15050565b6060600480546111c49061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546111f09061356c565b801561123d5780601f106112125761010080835404028352916020019161123d565b820191906000526020600020905b81548152906001019060200180831161122057829003601f168201915b5050505050905090565b61124f611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661126d610f88565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba906134b1565b60405180910390fd5b6001811015611307576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fe90613955565b60405180910390fd5b6103e8816113136109e4565b61131d9190613818565b6113279190613889565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f5460405161135e91906131b0565b60405180910390a150565b60008060016000611378611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c906139e7565b60405180910390fd5b611449611440611e5e565b85858403611e66565b600191505092915050565b6000611468611461611e5e565b848461202f565b6001905092915050565b61147a611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611498610f88565b73ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e5906134b1565b60405180910390fd5b6001811015611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152990613a53565b60405180910390fd5b6103e88161153e6109e4565b6115489190613818565b6115529190613889565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e5460405161158991906131b0565b60405180910390a150565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6115cb611e5e565b73ffffffffffffffffffffffffffffffffffffffff166115e9610f88565b73ffffffffffffffffffffffffffffffffffffffff161461163f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611636906134b1565b60405180910390fd5b6063821115611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90613abf565b60405180910390fd5b60638111156116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be90613b2b565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a182826040516117069291906138ba565b60405180910390a15050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6117a1611e5e565b73ffffffffffffffffffffffffffffffffffffffff166117bf610f88565b73ffffffffffffffffffffffffffffffffffffffff1614611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c906134b1565b60405180910390fd5b601360149054906101000a900460ff1615611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c90613b97565b60405180910390fd5b734752ba5dbc23f44d87826276bf6fd6b1c372ad24601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118ee30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166118e96109e4565b611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197f9190613bcc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2c9190613bcc565b6040518363ffffffff1660e01b8152600401611a49929190613bf9565b6020604051808303816000875af1158015611a68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8c9190613bcc565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611b1530610dc1565b600080611b20610f88565b426040518863ffffffff1660e01b8152600401611b4296959493929190613c5d565b60606040518083038185885af1158015611b60573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611b859190613cd3565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611c27929190613d26565b6020604051808303816000875af1158015611c46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6a9190613d64565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601e600a819055506032600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b611d6f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611d8d610f88565b73ffffffffffffffffffffffffffffffffffffffff1614611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda906134b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4990613e03565b60405180910390fd5b611e5b816127f8565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613f27565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202291906131b0565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121049061404b565b60405180910390fd5b60008111612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906140dd565b60405180910390fd5b600061215a610f88565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121c85750612198610f88565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121e15750601360159054906101000a900460ff16155b156127c057601360179054906101000a900460ff16156122dc57601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061229c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614123565b60405180910390fd5b5b61230460646122f6600a5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123b15750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ec57600e54821115612451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124489061418f565b60405180910390fd5b600f548261245e85610dc1565b6124689190613741565b11156124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0906141fb565b60405180910390fd5b4360036008546124b99190613741565b11156124d3576124c883612c1f565b156124d257600080fd5b5b600d60008154809291906124e690613667565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125945750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f257600f54826125a685610dc1565b6125b09190613741565b11156125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906141fb565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561267b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156126ab576126a8606461269a600b5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b90505b60006126b630610dc1565b9050601360159054906101000a900460ff161580156127225750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561273a5750601360169054906101000a900460ff165b8015612747575060105481115b80156127565750600c54600d54115b801561278c57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156127be576127a56127a082601154612c32565b6128be565b600047905060008111156127bc576127bb612b60565b5b505b505b60008111156127d5576127d4843083612c4b565b5b6127f284846127ed8486612eca90919063ffffffff16565b612c4b565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff81111561291f5761291e61421b565b5b60405190808252806020026020018201604052801561294d5781602001602082028036833780820191505090505b509050308160008151811061296557612964613609565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a309190613bcc565b81600181518110612a4457612a43613609565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aab30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b0f959493929190614308565b600060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ba890614390565b60006040518083038185875af1925050503d8060008114612be5576040519150601f19603f3d011682016040523d82523d6000602084013e612bea565b606091505b50508091505050565b60008183612c019190613818565b905092915050565b60008183612c179190613889565b905092915050565b600080823b905060008111915050919050565b6000818311612c415782612c43565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d209061404b565b60405180910390fd5b612d34838383612ee0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db190614417565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e4d9190613741565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612eb191906131b0565b60405180910390a3612ec4848484612ee5565b50505050565b60008183612ed89190614437565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f24578082015181840152602081019050612f09565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f4c82612eea565b612f568185612ef5565b9350612f66818560208601612f06565b612f6f81612f30565b840191505092915050565b60006020820190508181036000830152612f948184612f41565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fd182612fa6565b9050919050565b612fe181612fc6565b8114612fec57600080fd5b50565b600081359050612ffe81612fd8565b92915050565b6000819050919050565b61301781613004565b811461302257600080fd5b50565b6000813590506130348161300e565b92915050565b6000806040838503121561305157613050612f9c565b5b600061305f85828601612fef565b925050602061307085828601613025565b9150509250929050565b60008115159050919050565b61308f8161307a565b82525050565b60006020820190506130aa6000830184613086565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126130d5576130d46130b0565b5b8235905067ffffffffffffffff8111156130f2576130f16130b5565b5b60208301915083602082028301111561310e5761310d6130ba565b5b9250929050565b61311e8161307a565b811461312957600080fd5b50565b60008135905061313b81613115565b92915050565b60008060006040848603121561315a57613159612f9c565b5b600084013567ffffffffffffffff81111561317857613177612fa1565b5b613184868287016130bf565b935093505060206131978682870161312c565b9150509250925092565b6131aa81613004565b82525050565b60006020820190506131c560008301846131a1565b92915050565b6000806000606084860312156131e4576131e3612f9c565b5b60006131f286828701612fef565b935050602061320386828701612fef565b925050604061321486828701613025565b9150509250925092565b600060ff82169050919050565b6132348161321e565b82525050565b600060208201905061324f600083018461322b565b92915050565b6000806040838503121561326c5761326b612f9c565b5b600061327a85828601612fef565b925050602061328b8582860161312c565b9150509250929050565b6000602082840312156132ab576132aa612f9c565b5b60006132b984828501612fef565b91505092915050565b60006132cd82612fa6565b9050919050565b6132dd816132c2565b81146132e857600080fd5b50565b6000813590506132fa816132d4565b92915050565b60006020828403121561331657613315612f9c565b5b6000613324848285016132eb565b91505092915050565b61333681612fc6565b82525050565b6000602082019050613351600083018461332d565b92915050565b6000806040838503121561336e5761336d612f9c565b5b600061337c85828601613025565b925050602061338d85828601613025565b9150509250929050565b6000602082840312156133ad576133ac612f9c565b5b60006133bb84828501613025565b91505092915050565b600060c0820190506133d960008301896131a1565b6133e660208301886131a1565b6133f360408301876131a1565b61340060608301866131a1565b61340d60808301856131a1565b61341a60a08301846131a1565b979650505050505050565b6000806040838503121561343c5761343b612f9c565b5b600061344a85828601612fef565b925050602061345b85828601612fef565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061349b602083612ef5565b91506134a682613465565b602082019050919050565b600060208201905081810360008301526134ca8161348e565b9050919050565b7f4c61756e6368206d6f646520697320616c72656164792064697361626c656400600082015250565b6000613507601f83612ef5565b9150613512826134d1565b602082019050919050565b60006020820190508181036000830152613536816134fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061358457607f821691505b6020821081036135975761359661353d565b5b50919050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b60006135d3601d83612ef5565b91506135de8261359d565b602082019050919050565b60006020820190508181036000830152613602816135c6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061367282613004565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136a4576136a3613638565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061370b602883612ef5565b9150613716826136af565b604082019050919050565b6000602082019050818103600083015261373a816136fe565b9050919050565b600061374c82613004565b915061375783613004565b925082820190508082111561376f5761376e613638565b5b92915050565b600060408201905061378a600083018561332d565b6137976020830184613086565b9392505050565b6000819050919050565b60006137c36137be6137b984612fa6565b61379e565b612fa6565b9050919050565b60006137d5826137a8565b9050919050565b60006137e7826137ca565b9050919050565b6137f7816137dc565b82525050565b600060208201905061381260008301846137ee565b92915050565b600061382382613004565b915061382e83613004565b925082820261383c81613004565b9150828204841483151761385357613852613638565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061389482613004565b915061389f83613004565b9250826138af576138ae61385a565b5b828204905092915050565b60006040820190506138cf60008301856131a1565b6138dc60208301846131a1565b9392505050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061393f602283612ef5565b915061394a826138e3565b604082019050919050565b6000602082019050818103600083015261396e81613932565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006139d1602583612ef5565b91506139dc82613975565b604082019050919050565b60006020820190508181036000830152613a00816139c4565b9050919050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b6000613a3d601e83612ef5565b9150613a4882613a07565b602082019050919050565b60006020820190508181036000830152613a6c81613a30565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613aa9601583612ef5565b9150613ab482613a73565b602082019050919050565b60006020820190508181036000830152613ad881613a9c565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b6000613b15601683612ef5565b9150613b2082613adf565b602082019050919050565b60006020820190508181036000830152613b4481613b08565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613b81601783612ef5565b9150613b8c82613b4b565b602082019050919050565b60006020820190508181036000830152613bb081613b74565b9050919050565b600081519050613bc681612fd8565b92915050565b600060208284031215613be257613be1612f9c565b5b6000613bf084828501613bb7565b91505092915050565b6000604082019050613c0e600083018561332d565b613c1b602083018461332d565b9392505050565b6000819050919050565b6000613c47613c42613c3d84613c22565b61379e565b613004565b9050919050565b613c5781613c2c565b82525050565b600060c082019050613c72600083018961332d565b613c7f60208301886131a1565b613c8c6040830187613c4e565b613c996060830186613c4e565b613ca6608083018561332d565b613cb360a08301846131a1565b979650505050505050565b600081519050613ccd8161300e565b92915050565b600080600060608486031215613cec57613ceb612f9c565b5b6000613cfa86828701613cbe565b9350506020613d0b86828701613cbe565b9250506040613d1c86828701613cbe565b9150509250925092565b6000604082019050613d3b600083018561332d565b613d4860208301846131a1565b9392505050565b600081519050613d5e81613115565b92915050565b600060208284031215613d7a57613d79612f9c565b5b6000613d8884828501613d4f565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ded602683612ef5565b9150613df882613d91565b604082019050919050565b60006020820190508181036000830152613e1c81613de0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602483612ef5565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f11602283612ef5565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fa3602583612ef5565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614035602383612ef5565b915061404082613fd9565b604082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006140c7602983612ef5565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b50565b600061410d600083612ef5565b9150614118826140fd565b600082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000614179601b83612ef5565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b60006141e5601a83612ef5565b91506141f0826141af565b602082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61427f81612fc6565b82525050565b60006142918383614276565b60208301905092915050565b6000602082019050919050565b60006142b58261424a565b6142bf8185614255565b93506142ca83614266565b8060005b838110156142fb5781516142e28882614285565b97506142ed8361429d565b9250506001810190506142ce565b5085935050505092915050565b600060a08201905061431d60008301886131a1565b61432a6020830187613c4e565b818103604083015261433c81866142aa565b905061434b606083018561332d565b61435860808301846131a1565b9695505050505050565b600081905092915050565b600061437a600083614362565b9150614385826140fd565b600082019050919050565b600061439b8261436d565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614401602683612ef5565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600061444282613004565b915061444d83613004565b925082820390508181111561446557614464613638565b5b9291505056fea2646970667358221220a3d3b5e9697a8bfe8b93c4a69e7fa9f6bdefe973349efd8fd69889f552484f7864736f6c63430008130033

Deployed ByteCode Sourcemap

25399:9683:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29447:143;;;;;;;;;;;;;:::i;:::-;;10997:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13230:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30142:173;;;;;;;;;;;;;:::i;:::-;;30323:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12117:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13902:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11959:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14836:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30545:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29598:236;;;;;;;;;;;;;:::i;:::-;;12288:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22336:103;;;;;;;;;;;;;:::i;:::-;;28419:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21685:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33925:436;;;;;;;;;;;;;:::i;:::-;;29126:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11216:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28859:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15625:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12644:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28601:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30724:485;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;29842:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12907:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27380:1031;;;;;;;;;;;;;:::i;:::-;;22594:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29447:143;21916:12;:10;:12::i;:::-;21905:23;;:7;:5;:7::i;:::-;:23;;;21897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29507:10:::1;;;;;;;;;;;29499:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29577:5;29564:10;;:18;;;;;;;;;;;;;;;;;;29447:143::o:0;10997:100::-;11051:13;11084:5;11077:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10997:100;:::o;13230:194::-;13338:4;13355:39;13364:12;:10;:12::i;:::-;13378:7;13387:6;13355:8;:39::i;:::-;13412:4;13405:11;;13230:194;;;;:::o;30142:173::-;30210:10;;;;;;;;;;;30196:24;;:10;:24;;;30188:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30265:10;;;;;;;;;;;:19;;:42;30285:21;30265:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30142:173::o;30323:214::-;21916:12;:10;:12::i;:::-;21905:23;;:7;:5;:7::i;:::-;:23;;;21897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30438:9:::1;30433:97;30457:6;;:13;;30453:1;:17;30433:97;;;30512:6;30492;:17;30499:6;;30506:1;30499:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30492:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;30472:3;;;;;:::i;:::-;;;;30433:97;;;;30323:214:::0;;;:::o;12117:108::-;12178:7;12205:12;;12198:19;;12117:108;:::o;13902:529::-;14042:4;14059:36;14069:6;14077:9;14088:6;14059:9;:36::i;:::-;14108:24;14135:11;:19;14147:6;14135:19;;;;;;;;;;;;;;;:33;14155:12;:10;:12::i;:::-;14135:33;;;;;;;;;;;;;;;;14108:60;;14221:6;14201:16;:26;;14179:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14331:57;14340:6;14348:12;:10;:12::i;:::-;14381:6;14362:16;:25;14331:8;:57::i;:::-;14419:4;14412:11;;;13902:529;;;;;:::o;11959:93::-;12017:5;12042:2;12035:9;;11959:93;:::o;14836:290::-;14949:4;14966:130;14989:12;:10;:12::i;:::-;15016:7;15075:10;15038:11;:25;15050:12;:10;:12::i;:::-;15038:25;;;;;;;;;;;;;;;:34;15064:7;15038:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14966:8;:130::i;:::-;15114:4;15107:11;;14836:290;;;;:::o;30545:171::-;21916:12;:10;:12::i;:::-;21905:23;;:7;:5;:7::i;:::-;:23;;;21897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30654:6:::1;30624:18;:27;30643:7;30624:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30676:32;30692:7;30701:6;30676:32;;;;;;;:::i;:::-;;;;;;;;30545:171:::0;;:::o;29598:236::-;21916:12;:10;:12::i;:::-;21905:23;;:7;:5;:7::i;:::-;:23;;;21897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29666:13:::1;:11;:13::i;:::-;29649:14;:30;;;;29711:13;:11;:13::i;:::-;29690:18;:34;;;;29740:33;29759:13;:11;:13::i;:::-;29740:33;;;;;;:::i;:::-;;;;;;;;29789:37;29812:13;:11;:13::i;:::-;29789:37;;;;;;:::i;:::-;;;;;;;;29598:236::o:0;12288:143::-;12378:7;12405:9;:18;12415:7;12405:18;;;;;;;;;;;;;;;;12398:25;;12288:143;;;:::o;22336:103::-;21916:12;:10;:12::i;:::-;21905:23;;:7;:5;:7::i;:::-;:23;;;21897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22401:30:::1;22428:1;22401:18;:30::i;:::-;22336:103::o:0;28419:174::-;21916:12;:10;:12::i;:::-;21905:23;;:7;:5;:7::i;:::-;:23;;;21897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28517:15:::1;28504:10;;:28;;;;;;;;;;;;;;;;;;28550:35;28569:15;28550:35;;;;;;:::i;:::-;;;;;;;;28419:174:::0;:::o;21685:87::-;21731:7;21758:6;;;;;;;;;;;21751:13;;21685:87;:::o;33925:436::-;34004:10;;;;;;;;;;;33990:24;;:10;:24;;;:49;;;;34032:7;:5;:7::i;:::-;34018:21;;:10;:21;;;33990:49;33968:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34107:28;34138:24;34156:4;34138:9;:24::i;:::-;34107:55;;34175:38;34192:20;34175:16;:38::i;:::-;34224:26;34253:21;34224:50;;34310:1;34289:18;:22;34285:69;;;34328:14;:12;:14::i;:::-;34285:69;33957:404;;33925:436::o;29126:313::-;21916:12;:10;:12::i;:::-;21905:23;;:7;:5;:7::i;:::-;:23;;;21897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29303:5:::1;29283:16;29267:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29266:42;;;;:::i;:::-;29251:12;:57;;;;29365:5;29351:10;29335:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29334:36;;;;:::i;:::-;29319:12;:51;;;;29386:45;29402:16;29420:10;29386:45;;;;;;;:::i;:::-;;;;;;;;29126:313:::0;;:::o;11216:104::-;11272:13;11305:7;11298:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11216:104;:::o;28859:259::-;21916:12;:10;:12::i;:::-;21905:23;;:7;:5;:7::i;:::-;:23;;;21897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28947:1:::1;28935:8;:13;;28927:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29048:4;29036:8;29020:13;:11;:13::i;:::-;:24;;;;:::i;:::-;29019:33;;;;:::i;:::-;28998:18;:54;;;;29068:42;29091:18;;29068:42;;;;;;:::i;:::-;;;;;;;;28859:259:::0;:::o;15625:475::-;15743:4;15760:24;15787:11;:25;15799:12;:10;:12::i;:::-;15787:25;;;;;;;;;;;;;;;:34;15813:7;15787:34;;;;;;;;;;;;;;;;15760:61;;15874:15;15854:16;:35;;15832:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15990:67;15999:12;:10;:12::i;:::-;16013:7;16041:15;16022:16;:34;15990:8;:67::i;:::-;16088:4;16081:11;;;15625:475;;;;:::o;12644:200::-;12755:4;12772:42;12782:12;:10;:12::i;:::-;12796:9;12807:6;12772:9;:42::i;:::-;12832:4;12825:11;;12644:200;;;;:::o;28601:250::-;21916:12;:10;:12::i;:::-;21905:23;;:7;:5;:7::i;:::-;:23;;;21897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28696:1:::1;28684:8;:13;;28676:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28789:4;28777:8;28761:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28760:33;;;;:::i;:::-;28743:14;:50;;;;28809:34;28828:14;;28809:34;;;;;;:::i;:::-;;;;;;;;28601:250:::0;:::o;30724:485::-;30808:15;30838:16;30869:19;30903:21;30939:24;30978:18;31046:6;;31067:7;;31089:14;;31118:18;;31151:12;;31178;;31024:177;;;;;;;;;;;;30724:485;;;;;;:::o;29842:292::-;21916:12;:10;:12::i;:::-;21905:23;;:7;:5;:7::i;:::-;:23;;;21897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29941:2:::1;29931:6;:12;;29923:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29999:2;29988:7;:13;;29980:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30048:6;30039;:15;;;;30075:7;30065;:17;;;;30098:28;30110:6;30118:7;30098:28;;;;;;;:::i;:::-;;;;;;;;29842:292:::0;;:::o;12907:176::-;13021:7;13048:11;:18;13060:5;13048:18;;;;;;;;;;;;;;;:27;13067:7;13048:27;;;;;;;;;;;;;;;;13041:34;;12907:176;;;;:::o;27380:1031::-;21916:12;:10;:12::i;:::-;21905:23;;:7;:5;:7::i;:::-;:23;;;21897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27442:11:::1;;;;;;;;;;;27441:12;27433:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27535:42;27492:15;;:96;;;;;;;;;;;;;;;;;;27599:64;27616:4;27631:15;;;;;;;;;;;27649:13;:11;:13::i;:::-;27599:8;:64::i;:::-;27702:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27690:49;;;27762:4;27782:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27690:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27674:13;;:141;;;;;;;;;;;;;;;;;;27826:15;;;;;;;;;;;:31;;;27865:21;27910:4;27930:24;27948:4;27930:9;:24::i;:::-;27969:1;27985::::0;28001:7:::1;:5;:7::i;:::-;28023:15;27826:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28067:13;;;;;;;;;;;28060:29;;;28098:15;;;;;;;;;;;28116:14;28060:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28156:4;28142:11;;:18;;;;;;;;;;;;;;;;;;28185:4;28171:11;;:18;;;;;;;;;;;;;;;;;;28213:12;28200:10;:25;;;;28261:12;28236:15;;:38;;;;;;;;;;;;;;;;;;28321:4;28285:18;:33;28312:4;28285:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28345:2;28336:6;:11;;;;28368:2;28358:7;:12;;;;28388:15;;;;;;;;;;27380:1031::o:0;22594:238::-;21916:12;:10;:12::i;:::-;21905:23;;:7;:5;:7::i;:::-;:23;;;21897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22717:1:::1;22697:22;;:8;:22;;::::0;22675:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22796:28;22815:8;22796:18;:28::i;:::-;22594:238:::0;:::o;10003:98::-;10056:7;10083:10;10076:17;;10003:98;:::o;19408:380::-;19561:1;19544:19;;:5;:19;;;19536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19642:1;19623:21;;:7;:21;;;19615:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19726:6;19696:11;:18;19708:5;19696:18;;;;;;;;;;;;;;;:27;19715:7;19696:27;;;;;;;;;;;;;;;:36;;;;19764:7;19748:32;;19757:5;19748:32;;;19773:6;19748:32;;;;;;:::i;:::-;;;;;;;;19408:380;;;:::o;31217:2382::-;31365:1;31349:18;;:4;:18;;;31341:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31442:1;31428:16;;:2;:16;;;31420:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31512:1;31503:6;:10;31495:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31570:17;31614:7;:5;:7::i;:::-;31606:15;;:4;:15;;;;:32;;;;;31631:7;:5;:7::i;:::-;31625:13;;:2;:13;;;;31606:32;:43;;;;;31643:6;;;;;;;;;;;31642:7;31606:43;31602:1826;;;31670:10;;;;;;;;;;;31666:89;;;31708:6;:12;31715:4;31708:12;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;31724:6;:10;31731:2;31724:10;;;;;;;;;;;;;;;;;;;;;;;;;31708:26;31700:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;31666:89;31783:27;31806:3;31783:18;31794:6;;31783;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;31771:39;;31857:13;;;;;;;;;;;31849:21;;:4;:21;;;:72;;;;;31905:15;;;;;;;;;;;31891:30;;:2;:30;;;;31849:72;:116;;;;;31943:18;:22;31962:2;31943:22;;;;;;;;;;;;;;;;;;;;;;;;;31942:23;31849:116;31827:568;;;32018:14;;32008:6;:24;;32000:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32139:18;;32129:6;32113:13;32123:2;32113:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32083:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32269:12;32265:1;32252:10;;:14;;;;:::i;:::-;:29;32248:102;;;32315:14;32326:2;32315:10;:14::i;:::-;32314:15;32306:24;;;;;;32248:102;32368:9;;:11;;;;;;;;;:::i;:::-;;;;;;31827:568;32421:13;;;;;;;;;;;32415:19;;:2;:19;;;;:46;;;;;32439:18;:22;32458:2;32439:22;;;;;;;;;;;;;;;;;;;;;;;;;32438:23;32415:46;32411:231;;;32538:18;;32528:6;32512:13;32522:2;32512:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32482:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32411:231;32668:13;;;;;;;;;;;32662:19;;:2;:19;;;:44;;;;;32701:4;32685:21;;:4;:21;;;;32662:44;32658:125;;;32739:28;32763:3;32739:19;32750:7;;32739:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;32727:40;;32658:125;32799:28;32830:24;32848:4;32830:9;:24::i;:::-;32799:55;;32892:6;;;;;;;;;;;32891:7;:47;;;;;32925:13;;;;;;;;;;;32919:19;;:2;:19;;;32891:47;:79;;;;;32959:11;;;;;;;;;;;32891:79;:135;;;;;33014:12;;32991:20;:35;32891:135;:186;;;;;33059:18;;33047:9;;:30;32891:186;:246;;;;;33124:12;33098:39;;:15;;;;;;;;;;;:39;;;;32891:246;32869:548;;;33172:57;33189:39;33193:20;33215:12;;33189:3;:39::i;:::-;33172:16;:57::i;:::-;33248:26;33277:21;33248:50;;33342:1;33321:18;:22;33317:85;;;33368:14;:12;:14::i;:::-;33317:85;33153:264;32869:548;31651:1777;31602:1826;33456:1;33444:9;:13;33440:93;;;33474:47;33490:4;33504;33511:9;33474:15;:47::i;:::-;33440:93;33543:48;33559:4;33565:2;33569:21;33580:9;33569:6;:10;;:21;;;;:::i;:::-;33543:15;:48::i;:::-;31330:2269;31217:2382;;;:::o;22992:191::-;23066:16;23085:6;;;;;;;;;;;23066:25;;23111:8;23102:6;;:17;;;;;;;;;;;;;;;;;;23166:8;23135:40;;23156:8;23135:40;;;;;;;;;;;;23055:128;22992:191;:::o;34369:532::-;26652:4;26643:6;;:13;;;;;;;;;;;;;;;;;;34472:12:::1;34447:15;;:38;;;;;;;;;;;;;;;;;;34496:21;34534:1;34520:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34496:40;;34565:4;34547;34552:1;34547:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34591:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34581:4;34586:1;34581:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34624:62;34641:4;34656:15;;;;;;;;;;;34674:11;34624:8;:62::i;:::-;34697:15;;;;;;;;;;;:66;;;34778:11;34804:1;34820:4;34847;34867:15;34697:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34436:465;26688:5:::0;26679:6;;:14;;;;;;;;;;;;;;;;;;34369:532;:::o;34909:170::-;34952:12;34997:10;;;;;;;;;;;34989:24;;35021:21;34989:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34975:96;;;;;34941:138;34909:170::o;3362:98::-;3420:7;3451:1;3447;:5;;;;:::i;:::-;3440:12;;3362:98;;;;:::o;3761:::-;3819:7;3850:1;3846;:5;;;;:::i;:::-;3839:12;;3761:98;;;;:::o;33722:195::-;33781:4;33798:12;33865:7;33853:20;33845:28;;33908:1;33901:4;:8;33894:15;;;33722:195;;;:::o;33607:107::-;33664:7;33696:1;33692;:5;33691:15;;33705:1;33691:15;;;33701:1;33691:15;33684:22;;33607:107;;;;:::o;16590:770::-;16748:1;16730:20;;:6;:20;;;16722:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16832:1;16811:23;;:9;:23;;;16803:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16887:47;16908:6;16916:9;16927:6;16887:20;:47::i;:::-;16947:21;16971:9;:17;16981:6;16971:17;;;;;;;;;;;;;;;;16947:41;;17038:6;17021:13;:23;;16999:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17182:6;17166:13;:22;17146:9;:17;17156:6;17146:17;;;;;;;;;;;;;;;:42;;;;17234:6;17210:9;:20;17220:9;17210:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17275:9;17258:35;;17267:6;17258:35;;;17286:6;17258:35;;;;;;:::i;:::-;;;;;;;;17306:46;17326:6;17334:9;17345:6;17306:19;:46::i;:::-;16711:649;16590:770;;;:::o;3005:98::-;3063:7;3094:1;3090;:5;;;;:::i;:::-;3083:12;;3005:98;;;;:::o;20388:125::-;;;;:::o;21117:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:117::-;3555:1;3552;3545:12;3569:117;3678:1;3675;3668:12;3692:117;3801:1;3798;3791:12;3832:568;3905:8;3915:6;3965:3;3958:4;3950:6;3946:17;3942:27;3932:122;;3973:79;;:::i;:::-;3932:122;4086:6;4073:20;4063:30;;4116:18;4108:6;4105:30;4102:117;;;4138:79;;:::i;:::-;4102:117;4252:4;4244:6;4240:17;4228:29;;4306:3;4298:4;4290:6;4286:17;4276:8;4272:32;4269:41;4266:128;;;4313:79;;:::i;:::-;4266:128;3832:568;;;;;:::o;4406:116::-;4476:21;4491:5;4476:21;:::i;:::-;4469:5;4466:32;4456:60;;4512:1;4509;4502:12;4456:60;4406:116;:::o;4528:133::-;4571:5;4609:6;4596:20;4587:29;;4625:30;4649:5;4625:30;:::i;:::-;4528:133;;;;:::o;4667:698::-;4759:6;4767;4775;4824:2;4812:9;4803:7;4799:23;4795:32;4792:119;;;4830:79;;:::i;:::-;4792:119;4978:1;4967:9;4963:17;4950:31;5008:18;5000:6;4997:30;4994:117;;;5030:79;;:::i;:::-;4994:117;5143:80;5215:7;5206:6;5195:9;5191:22;5143:80;:::i;:::-;5125:98;;;;4921:312;5272:2;5298:50;5340:7;5331:6;5320:9;5316:22;5298:50;:::i;:::-;5288:60;;5243:115;4667:698;;;;;:::o;5371:118::-;5458:24;5476:5;5458:24;:::i;:::-;5453:3;5446:37;5371:118;;:::o;5495:222::-;5588:4;5626:2;5615:9;5611:18;5603:26;;5639:71;5707:1;5696:9;5692:17;5683:6;5639:71;:::i;:::-;5495:222;;;;:::o;5723:619::-;5800:6;5808;5816;5865:2;5853:9;5844:7;5840:23;5836:32;5833:119;;;5871:79;;:::i;:::-;5833:119;5991:1;6016:53;6061:7;6052:6;6041:9;6037:22;6016:53;:::i;:::-;6006:63;;5962:117;6118:2;6144:53;6189:7;6180:6;6169:9;6165:22;6144:53;:::i;:::-;6134:63;;6089:118;6246:2;6272:53;6317:7;6308:6;6297:9;6293:22;6272:53;:::i;:::-;6262:63;;6217:118;5723:619;;;;;:::o;6348:86::-;6383:7;6423:4;6416:5;6412:16;6401:27;;6348:86;;;:::o;6440:112::-;6523:22;6539:5;6523:22;:::i;:::-;6518:3;6511:35;6440:112;;:::o;6558:214::-;6647:4;6685:2;6674:9;6670:18;6662:26;;6698:67;6762:1;6751:9;6747:17;6738:6;6698:67;:::i;:::-;6558:214;;;;:::o;6778:468::-;6843:6;6851;6900:2;6888:9;6879:7;6875:23;6871:32;6868:119;;;6906:79;;:::i;:::-;6868:119;7026:1;7051:53;7096:7;7087:6;7076:9;7072:22;7051:53;:::i;:::-;7041:63;;6997:117;7153:2;7179:50;7221:7;7212:6;7201:9;7197:22;7179:50;:::i;:::-;7169:60;;7124:115;6778:468;;;;;:::o;7252:329::-;7311:6;7360:2;7348:9;7339:7;7335:23;7331:32;7328:119;;;7366:79;;:::i;:::-;7328:119;7486:1;7511:53;7556:7;7547:6;7536:9;7532:22;7511:53;:::i;:::-;7501:63;;7457:117;7252:329;;;;:::o;7587:104::-;7632:7;7661:24;7679:5;7661:24;:::i;:::-;7650:35;;7587:104;;;:::o;7697:138::-;7778:32;7804:5;7778:32;:::i;:::-;7771:5;7768:43;7758:71;;7825:1;7822;7815:12;7758:71;7697:138;:::o;7841:155::-;7895:5;7933:6;7920:20;7911:29;;7949:41;7984:5;7949:41;:::i;:::-;7841:155;;;;:::o;8002:345::-;8069:6;8118:2;8106:9;8097:7;8093:23;8089:32;8086:119;;;8124:79;;:::i;:::-;8086:119;8244:1;8269:61;8322:7;8313:6;8302:9;8298:22;8269:61;:::i;:::-;8259:71;;8215:125;8002:345;;;;:::o;8353:118::-;8440:24;8458:5;8440:24;:::i;:::-;8435:3;8428:37;8353:118;;:::o;8477:222::-;8570:4;8608:2;8597:9;8593:18;8585:26;;8621:71;8689:1;8678:9;8674:17;8665:6;8621:71;:::i;:::-;8477:222;;;;:::o;8705:474::-;8773:6;8781;8830:2;8818:9;8809:7;8805:23;8801:32;8798:119;;;8836:79;;:::i;:::-;8798:119;8956:1;8981:53;9026:7;9017:6;9006:9;9002:22;8981:53;:::i;:::-;8971:63;;8927:117;9083:2;9109:53;9154:7;9145:6;9134:9;9130:22;9109:53;:::i;:::-;9099:63;;9054:118;8705:474;;;;;:::o;9185:329::-;9244:6;9293:2;9281:9;9272:7;9268:23;9264:32;9261:119;;;9299:79;;:::i;:::-;9261:119;9419:1;9444:53;9489:7;9480:6;9469:9;9465:22;9444:53;:::i;:::-;9434:63;;9390:117;9185:329;;;;:::o;9520:775::-;9753:4;9791:3;9780:9;9776:19;9768:27;;9805:71;9873:1;9862:9;9858:17;9849:6;9805:71;:::i;:::-;9886:72;9954:2;9943:9;9939:18;9930:6;9886:72;:::i;:::-;9968;10036:2;10025:9;10021:18;10012:6;9968:72;:::i;:::-;10050;10118:2;10107:9;10103:18;10094:6;10050:72;:::i;:::-;10132:73;10200:3;10189:9;10185:19;10176:6;10132:73;:::i;:::-;10215;10283:3;10272:9;10268:19;10259:6;10215:73;:::i;:::-;9520:775;;;;;;;;;:::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:181::-;11906:33;11902:1;11894:6;11890:14;11883:57;11766:181;:::o;11953:366::-;12095:3;12116:67;12180:2;12175:3;12116:67;:::i;:::-;12109:74;;12192:93;12281:3;12192:93;:::i;:::-;12310:2;12305:3;12301:12;12294:19;;11953:366;;;:::o;12325:419::-;12491:4;12529:2;12518:9;12514:18;12506:26;;12578:9;12572:4;12568:20;12564:1;12553:9;12549:17;12542:47;12606:131;12732:4;12606:131;:::i;:::-;12598:139;;12325:419;;;:::o;12750:180::-;12798:77;12795:1;12788:88;12895:4;12892:1;12885:15;12919:4;12916:1;12909:15;12936:320;12980:6;13017:1;13011:4;13007:12;12997:22;;13064:1;13058:4;13054:12;13085:18;13075:81;;13141:4;13133:6;13129:17;13119:27;;13075:81;13203:2;13195:6;13192:14;13172:18;13169:38;13166:84;;13222:18;;:::i;:::-;13166:84;12987:269;12936:320;;;:::o;13262:179::-;13402:31;13398:1;13390:6;13386:14;13379:55;13262:179;:::o;13447:366::-;13589:3;13610:67;13674:2;13669:3;13610:67;:::i;:::-;13603:74;;13686:93;13775:3;13686:93;:::i;:::-;13804:2;13799:3;13795:12;13788:19;;13447:366;;;:::o;13819:419::-;13985:4;14023:2;14012:9;14008:18;14000:26;;14072:9;14066:4;14062:20;14058:1;14047:9;14043:17;14036:47;14100:131;14226:4;14100:131;:::i;:::-;14092:139;;13819:419;;;:::o;14244:180::-;14292:77;14289:1;14282:88;14389:4;14386:1;14379:15;14413:4;14410:1;14403:15;14430:180;14478:77;14475:1;14468:88;14575:4;14572:1;14565:15;14599:4;14596:1;14589:15;14616:233;14655:3;14678:24;14696:5;14678:24;:::i;:::-;14669:33;;14724:66;14717:5;14714:77;14711:103;;14794:18;;:::i;:::-;14711:103;14841:1;14834:5;14830:13;14823:20;;14616:233;;;:::o;14855:227::-;14995:34;14991:1;14983:6;14979:14;14972:58;15064:10;15059:2;15051:6;15047:15;15040:35;14855:227;:::o;15088:366::-;15230:3;15251:67;15315:2;15310:3;15251:67;:::i;:::-;15244:74;;15327:93;15416:3;15327:93;:::i;:::-;15445:2;15440:3;15436:12;15429:19;;15088:366;;;:::o;15460:419::-;15626:4;15664:2;15653:9;15649:18;15641:26;;15713:9;15707:4;15703:20;15699:1;15688:9;15684:17;15677:47;15741:131;15867:4;15741:131;:::i;:::-;15733:139;;15460:419;;;:::o;15885:191::-;15925:3;15944:20;15962:1;15944:20;:::i;:::-;15939:25;;15978:20;15996:1;15978:20;:::i;:::-;15973:25;;16021:1;16018;16014:9;16007:16;;16042:3;16039:1;16036:10;16033:36;;;16049:18;;:::i;:::-;16033:36;15885:191;;;;:::o;16082:320::-;16197:4;16235:2;16224:9;16220:18;16212:26;;16248:71;16316:1;16305:9;16301:17;16292:6;16248:71;:::i;:::-;16329:66;16391:2;16380:9;16376:18;16367:6;16329:66;:::i;:::-;16082:320;;;;;:::o;16408:60::-;16436:3;16457:5;16450:12;;16408:60;;;:::o;16474:142::-;16524:9;16557:53;16575:34;16584:24;16602:5;16584:24;:::i;:::-;16575:34;:::i;:::-;16557:53;:::i;:::-;16544:66;;16474:142;;;:::o;16622:126::-;16672:9;16705:37;16736:5;16705:37;:::i;:::-;16692:50;;16622:126;;;:::o;16754:134::-;16812:9;16845:37;16876:5;16845:37;:::i;:::-;16832:50;;16754:134;;;:::o;16894:147::-;16989:45;17028:5;16989:45;:::i;:::-;16984:3;16977:58;16894:147;;:::o;17047:238::-;17148:4;17186:2;17175:9;17171:18;17163:26;;17199:79;17275:1;17264:9;17260:17;17251:6;17199:79;:::i;:::-;17047:238;;;;:::o;17291:410::-;17331:7;17354:20;17372:1;17354:20;:::i;:::-;17349:25;;17388:20;17406:1;17388:20;:::i;:::-;17383:25;;17443:1;17440;17436:9;17465:30;17483:11;17465:30;:::i;:::-;17454:41;;17644:1;17635:7;17631:15;17628:1;17625:22;17605:1;17598:9;17578:83;17555:139;;17674:18;;:::i;:::-;17555:139;17339:362;17291:410;;;;:::o;17707:180::-;17755:77;17752:1;17745:88;17852:4;17849:1;17842:15;17876:4;17873:1;17866:15;17893:185;17933:1;17950:20;17968:1;17950:20;:::i;:::-;17945:25;;17984:20;18002:1;17984:20;:::i;:::-;17979:25;;18023:1;18013:35;;18028:18;;:::i;:::-;18013:35;18070:1;18067;18063:9;18058:14;;17893:185;;;;:::o;18084:332::-;18205:4;18243:2;18232:9;18228:18;18220:26;;18256:71;18324:1;18313:9;18309:17;18300:6;18256:71;:::i;:::-;18337:72;18405:2;18394:9;18390:18;18381:6;18337:72;:::i;:::-;18084:332;;;;;:::o;18422:221::-;18562:34;18558:1;18550:6;18546:14;18539:58;18631:4;18626:2;18618:6;18614:15;18607:29;18422:221;:::o;18649:366::-;18791:3;18812:67;18876:2;18871:3;18812:67;:::i;:::-;18805:74;;18888:93;18977:3;18888:93;:::i;:::-;19006:2;19001:3;18997:12;18990:19;;18649:366;;;:::o;19021:419::-;19187:4;19225:2;19214:9;19210:18;19202:26;;19274:9;19268:4;19264:20;19260:1;19249:9;19245:17;19238:47;19302:131;19428:4;19302:131;:::i;:::-;19294:139;;19021:419;;;:::o;19446:224::-;19586:34;19582:1;19574:6;19570:14;19563:58;19655:7;19650:2;19642:6;19638:15;19631:32;19446:224;:::o;19676:366::-;19818:3;19839:67;19903:2;19898:3;19839:67;:::i;:::-;19832:74;;19915:93;20004:3;19915:93;:::i;:::-;20033:2;20028:3;20024:12;20017:19;;19676:366;;;:::o;20048:419::-;20214:4;20252:2;20241:9;20237:18;20229:26;;20301:9;20295:4;20291:20;20287:1;20276:9;20272:17;20265:47;20329:131;20455:4;20329:131;:::i;:::-;20321:139;;20048:419;;;:::o;20473:180::-;20613:32;20609:1;20601:6;20597:14;20590:56;20473:180;:::o;20659:366::-;20801:3;20822:67;20886:2;20881:3;20822:67;:::i;:::-;20815:74;;20898:93;20987:3;20898:93;:::i;:::-;21016:2;21011:3;21007:12;21000:19;;20659:366;;;:::o;21031:419::-;21197:4;21235:2;21224:9;21220:18;21212:26;;21284:9;21278:4;21274:20;21270:1;21259:9;21255:17;21248:47;21312:131;21438:4;21312:131;:::i;:::-;21304:139;;21031:419;;;:::o;21456:171::-;21596:23;21592:1;21584:6;21580:14;21573:47;21456:171;:::o;21633:366::-;21775:3;21796:67;21860:2;21855:3;21796:67;:::i;:::-;21789:74;;21872:93;21961:3;21872:93;:::i;:::-;21990:2;21985:3;21981:12;21974:19;;21633:366;;;:::o;22005:419::-;22171:4;22209:2;22198:9;22194:18;22186:26;;22258:9;22252:4;22248:20;22244:1;22233:9;22229:17;22222:47;22286:131;22412:4;22286:131;:::i;:::-;22278:139;;22005:419;;;:::o;22430:172::-;22570:24;22566:1;22558:6;22554:14;22547:48;22430:172;:::o;22608:366::-;22750:3;22771:67;22835:2;22830:3;22771:67;:::i;:::-;22764:74;;22847:93;22936:3;22847:93;:::i;:::-;22965:2;22960:3;22956:12;22949:19;;22608:366;;;:::o;22980:419::-;23146:4;23184:2;23173:9;23169:18;23161:26;;23233:9;23227:4;23223:20;23219:1;23208:9;23204:17;23197:47;23261:131;23387:4;23261:131;:::i;:::-;23253:139;;22980:419;;;:::o;23405:173::-;23545:25;23541:1;23533:6;23529:14;23522:49;23405:173;:::o;23584:366::-;23726:3;23747:67;23811:2;23806:3;23747:67;:::i;:::-;23740:74;;23823:93;23912:3;23823:93;:::i;:::-;23941:2;23936:3;23932:12;23925:19;;23584:366;;;:::o;23956:419::-;24122:4;24160:2;24149:9;24145:18;24137:26;;24209:9;24203:4;24199:20;24195:1;24184:9;24180:17;24173:47;24237:131;24363:4;24237:131;:::i;:::-;24229:139;;23956:419;;;:::o;24381:143::-;24438:5;24469:6;24463:13;24454:22;;24485:33;24512:5;24485:33;:::i;:::-;24381:143;;;;:::o;24530:351::-;24600:6;24649:2;24637:9;24628:7;24624:23;24620:32;24617:119;;;24655:79;;:::i;:::-;24617:119;24775:1;24800:64;24856:7;24847:6;24836:9;24832:22;24800:64;:::i;:::-;24790:74;;24746:128;24530:351;;;;:::o;24887:332::-;25008:4;25046:2;25035:9;25031:18;25023:26;;25059:71;25127:1;25116:9;25112:17;25103:6;25059:71;:::i;:::-;25140:72;25208:2;25197:9;25193:18;25184:6;25140:72;:::i;:::-;24887:332;;;;;:::o;25225:85::-;25270:7;25299:5;25288:16;;25225:85;;;:::o;25316:158::-;25374:9;25407:61;25425:42;25434:32;25460:5;25434:32;:::i;:::-;25425:42;:::i;:::-;25407:61;:::i;:::-;25394:74;;25316:158;;;:::o;25480:147::-;25575:45;25614:5;25575:45;:::i;:::-;25570:3;25563:58;25480:147;;:::o;25633:807::-;25882:4;25920:3;25909:9;25905:19;25897:27;;25934:71;26002:1;25991:9;25987:17;25978:6;25934:71;:::i;:::-;26015:72;26083:2;26072:9;26068:18;26059:6;26015:72;:::i;:::-;26097:80;26173:2;26162:9;26158:18;26149:6;26097:80;:::i;:::-;26187;26263:2;26252:9;26248:18;26239:6;26187:80;:::i;:::-;26277:73;26345:3;26334:9;26330:19;26321:6;26277:73;:::i;:::-;26360;26428:3;26417:9;26413:19;26404:6;26360:73;:::i;:::-;25633:807;;;;;;;;;:::o;26446:143::-;26503:5;26534:6;26528:13;26519:22;;26550:33;26577:5;26550:33;:::i;:::-;26446:143;;;;:::o;26595:663::-;26683:6;26691;26699;26748:2;26736:9;26727:7;26723:23;26719:32;26716:119;;;26754:79;;:::i;:::-;26716:119;26874:1;26899:64;26955:7;26946:6;26935:9;26931:22;26899:64;:::i;:::-;26889:74;;26845:128;27012:2;27038:64;27094:7;27085:6;27074:9;27070:22;27038:64;:::i;:::-;27028:74;;26983:129;27151:2;27177:64;27233:7;27224:6;27213:9;27209:22;27177:64;:::i;:::-;27167:74;;27122:129;26595:663;;;;;:::o;27264:332::-;27385:4;27423:2;27412:9;27408:18;27400:26;;27436:71;27504:1;27493:9;27489:17;27480:6;27436:71;:::i;:::-;27517:72;27585:2;27574:9;27570:18;27561:6;27517:72;:::i;:::-;27264:332;;;;;:::o;27602:137::-;27656:5;27687:6;27681:13;27672:22;;27703:30;27727:5;27703:30;:::i;:::-;27602:137;;;;:::o;27745:345::-;27812:6;27861:2;27849:9;27840:7;27836:23;27832:32;27829:119;;;27867:79;;:::i;:::-;27829:119;27987:1;28012:61;28065:7;28056:6;28045:9;28041:22;28012:61;:::i;:::-;28002:71;;27958:125;27745:345;;;;:::o;28096:225::-;28236:34;28232:1;28224:6;28220:14;28213:58;28305:8;28300:2;28292:6;28288:15;28281:33;28096:225;:::o;28327:366::-;28469:3;28490:67;28554:2;28549:3;28490:67;:::i;:::-;28483:74;;28566:93;28655:3;28566:93;:::i;:::-;28684:2;28679:3;28675:12;28668:19;;28327:366;;;:::o;28699:419::-;28865:4;28903:2;28892:9;28888:18;28880:26;;28952:9;28946:4;28942:20;28938:1;28927:9;28923:17;28916:47;28980:131;29106:4;28980:131;:::i;:::-;28972:139;;28699:419;;;:::o;29124:223::-;29264:34;29260:1;29252:6;29248:14;29241:58;29333:6;29328:2;29320:6;29316:15;29309:31;29124:223;:::o;29353:366::-;29495:3;29516:67;29580:2;29575:3;29516:67;:::i;:::-;29509:74;;29592:93;29681:3;29592:93;:::i;:::-;29710:2;29705:3;29701:12;29694:19;;29353:366;;;:::o;29725:419::-;29891:4;29929:2;29918:9;29914:18;29906:26;;29978:9;29972:4;29968:20;29964:1;29953:9;29949:17;29942:47;30006:131;30132:4;30006:131;:::i;:::-;29998:139;;29725:419;;;:::o;30150:221::-;30290:34;30286:1;30278:6;30274:14;30267:58;30359:4;30354:2;30346:6;30342:15;30335:29;30150:221;:::o;30377:366::-;30519:3;30540:67;30604:2;30599:3;30540:67;:::i;:::-;30533:74;;30616:93;30705:3;30616:93;:::i;:::-;30734:2;30729:3;30725:12;30718:19;;30377:366;;;:::o;30749:419::-;30915:4;30953:2;30942:9;30938:18;30930:26;;31002:9;30996:4;30992:20;30988:1;30977:9;30973:17;30966:47;31030:131;31156:4;31030:131;:::i;:::-;31022:139;;30749:419;;;:::o;31174:224::-;31314:34;31310:1;31302:6;31298:14;31291:58;31383:7;31378:2;31370:6;31366:15;31359:32;31174:224;:::o;31404:366::-;31546:3;31567:67;31631:2;31626:3;31567:67;:::i;:::-;31560:74;;31643:93;31732:3;31643:93;:::i;:::-;31761:2;31756:3;31752:12;31745:19;;31404:366;;;:::o;31776:419::-;31942:4;31980:2;31969:9;31965:18;31957:26;;32029:9;32023:4;32019:20;32015:1;32004:9;32000:17;31993:47;32057:131;32183:4;32057:131;:::i;:::-;32049:139;;31776:419;;;:::o;32201:222::-;32341:34;32337:1;32329:6;32325:14;32318:58;32410:5;32405:2;32397:6;32393:15;32386:30;32201:222;:::o;32429:366::-;32571:3;32592:67;32656:2;32651:3;32592:67;:::i;:::-;32585:74;;32668:93;32757:3;32668:93;:::i;:::-;32786:2;32781:3;32777:12;32770:19;;32429:366;;;:::o;32801:419::-;32967:4;33005:2;32994:9;32990:18;32982:26;;33054:9;33048:4;33044:20;33040:1;33029:9;33025:17;33018:47;33082:131;33208:4;33082:131;:::i;:::-;33074:139;;32801:419;;;:::o;33226:228::-;33366:34;33362:1;33354:6;33350:14;33343:58;33435:11;33430:2;33422:6;33418:15;33411:36;33226:228;:::o;33460:366::-;33602:3;33623:67;33687:2;33682:3;33623:67;:::i;:::-;33616:74;;33699:93;33788:3;33699:93;:::i;:::-;33817:2;33812:3;33808:12;33801:19;;33460:366;;;:::o;33832:419::-;33998:4;34036:2;34025:9;34021:18;34013:26;;34085:9;34079:4;34075:20;34071:1;34060:9;34056:17;34049:47;34113:131;34239:4;34113:131;:::i;:::-;34105:139;;33832:419;;;:::o;34257:114::-;;:::o;34377:364::-;34519:3;34540:66;34604:1;34599:3;34540:66;:::i;:::-;34533:73;;34615:93;34704:3;34615:93;:::i;:::-;34733:1;34728:3;34724:11;34717:18;;34377:364;;;:::o;34747:419::-;34913:4;34951:2;34940:9;34936:18;34928:26;;35000:9;34994:4;34990:20;34986:1;34975:9;34971:17;34964:47;35028:131;35154:4;35028:131;:::i;:::-;35020:139;;34747:419;;;:::o;35172:177::-;35312:29;35308:1;35300:6;35296:14;35289:53;35172:177;:::o;35355:366::-;35497:3;35518:67;35582:2;35577:3;35518:67;:::i;:::-;35511:74;;35594:93;35683:3;35594:93;:::i;:::-;35712:2;35707:3;35703:12;35696:19;;35355:366;;;:::o;35727:419::-;35893:4;35931:2;35920:9;35916:18;35908:26;;35980:9;35974:4;35970:20;35966:1;35955:9;35951:17;35944:47;36008:131;36134:4;36008:131;:::i;:::-;36000:139;;35727:419;;;:::o;36152:176::-;36292:28;36288:1;36280:6;36276:14;36269:52;36152:176;:::o;36334:366::-;36476:3;36497:67;36561:2;36556:3;36497:67;:::i;:::-;36490:74;;36573:93;36662:3;36573:93;:::i;:::-;36691:2;36686:3;36682:12;36675:19;;36334:366;;;:::o;36706:419::-;36872:4;36910:2;36899:9;36895:18;36887:26;;36959:9;36953:4;36949:20;36945:1;36934:9;36930:17;36923:47;36987:131;37113:4;36987:131;:::i;:::-;36979:139;;36706:419;;;:::o;37131:180::-;37179:77;37176:1;37169:88;37276:4;37273:1;37266:15;37300:4;37297:1;37290:15;37317:114;37384:6;37418:5;37412:12;37402:22;;37317:114;;;:::o;37437:184::-;37536:11;37570:6;37565:3;37558:19;37610:4;37605:3;37601:14;37586:29;;37437:184;;;;:::o;37627:132::-;37694:4;37717:3;37709:11;;37747:4;37742:3;37738:14;37730:22;;37627:132;;;:::o;37765:108::-;37842:24;37860:5;37842:24;:::i;:::-;37837:3;37830:37;37765:108;;:::o;37879:179::-;37948:10;37969:46;38011:3;38003:6;37969:46;:::i;:::-;38047:4;38042:3;38038:14;38024:28;;37879:179;;;;:::o;38064:113::-;38134:4;38166;38161:3;38157:14;38149:22;;38064:113;;;:::o;38213:732::-;38332:3;38361:54;38409:5;38361:54;:::i;:::-;38431:86;38510:6;38505:3;38431:86;:::i;:::-;38424:93;;38541:56;38591:5;38541:56;:::i;:::-;38620:7;38651:1;38636:284;38661:6;38658:1;38655:13;38636:284;;;38737:6;38731:13;38764:63;38823:3;38808:13;38764:63;:::i;:::-;38757:70;;38850:60;38903:6;38850:60;:::i;:::-;38840:70;;38696:224;38683:1;38680;38676:9;38671:14;;38636:284;;;38640:14;38936:3;38929:10;;38337:608;;;38213:732;;;;:::o;38951:831::-;39214:4;39252:3;39241:9;39237:19;39229:27;;39266:71;39334:1;39323:9;39319:17;39310:6;39266:71;:::i;:::-;39347:80;39423:2;39412:9;39408:18;39399:6;39347:80;:::i;:::-;39474:9;39468:4;39464:20;39459:2;39448:9;39444:18;39437:48;39502:108;39605:4;39596:6;39502:108;:::i;:::-;39494:116;;39620:72;39688:2;39677:9;39673:18;39664:6;39620:72;:::i;:::-;39702:73;39770:3;39759:9;39755:19;39746:6;39702:73;:::i;:::-;38951:831;;;;;;;;:::o;39788:147::-;39889:11;39926:3;39911:18;;39788:147;;;;:::o;39941:398::-;40100:3;40121:83;40202:1;40197:3;40121:83;:::i;:::-;40114:90;;40213:93;40302:3;40213:93;:::i;:::-;40331:1;40326:3;40322:11;40315:18;;39941:398;;;:::o;40345:379::-;40529:3;40551:147;40694:3;40551:147;:::i;:::-;40544:154;;40715:3;40708:10;;40345:379;;;:::o;40730:225::-;40870:34;40866:1;40858:6;40854:14;40847:58;40939:8;40934:2;40926:6;40922:15;40915:33;40730:225;:::o;40961:366::-;41103:3;41124:67;41188:2;41183:3;41124:67;:::i;:::-;41117:74;;41200:93;41289:3;41200:93;:::i;:::-;41318:2;41313:3;41309:12;41302:19;;40961:366;;;:::o;41333:419::-;41499:4;41537:2;41526:9;41522:18;41514:26;;41586:9;41580:4;41576:20;41572:1;41561:9;41557:17;41550:47;41614:131;41740:4;41614:131;:::i;:::-;41606:139;;41333:419;;;:::o;41758:194::-;41798:4;41818:20;41836:1;41818:20;:::i;:::-;41813:25;;41852:20;41870:1;41852:20;:::i;:::-;41847:25;;41896:1;41893;41889:9;41881:17;;41920:1;41914:4;41911:11;41908:37;;;41925:18;;:::i;:::-;41908:37;41758:194;;;;:::o

Swarm Source

ipfs://a3d3b5e9697a8bfe8b93c4a69e7fa9f6bdefe973349efd8fd69889f552484f78
Loading