ETH Price: $3,639.51 (+0.49%)
 

Overview

Max Total Supply

1,000,000,000,000,000,000,000,000,000,000 GACEK

Holders

15

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

Balance
9,000,000,000,000,000,000,000,000,000 GACEK

Value
$0.00
0x766b241c3b12bb19432893c146acc70a6b112ab5
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
KotGacek

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 Etherscan.io on 2024-04-28
*/

/*
 * SPDX-License-Identifier: MIT

 * https://twitter.com/KotGacek_ERC20
 * https://t.me/KotGacekErc20
 */

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 KotGacek is ERC20, Ownable {
    using SafeMath for uint256;

    IDexRouter private immutable dexRouter;
    address public immutable dexPair;

    // Swapback
    bool private swapping;

    bool private swapbackEnabled = false;
    uint256 private swapBackValueMin;
    uint256 private swapBackValueMax;

    //Anti-whale
    bool private limitsEnabled = true;
    bool private transferDelayEnabled = true;
    uint256 private maxWallet;
    uint256 private maxTx;
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    bool public tradingEnabled = false;

    // Fee receivers
    address private marketingWallet;
    address private projectWallet;

    uint256 private buyTaxTotal;
    uint256 private buyMarketingTax;
    uint256 private buyProjectTax;

    uint256 private sellTaxTotal;
    uint256 private sellMarketingTax;
    uint256 private sellProjectTax;

    uint256 private tokensForMarketing;
    uint256 private tokensForProject;

    /******************/

    // exclude from fees and max transaction amount
    mapping(address => bool) private transferTaxExempt;
    mapping(address => bool) private transferLimitExempt;
    mapping(address => bool) private automatedMarketMakerPairs;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeFromLimits(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event TradingEnabled(uint256 indexed timestamp);
    event LimitsRemoved(uint256 indexed timestamp);
    event DisabledTransferDelay(uint256 indexed timestamp);

    event SwapbackSettingsUpdated(
        bool enabled,
        uint256 swapBackValueMin,
        uint256 swapBackValueMax
    );
    event MaxTxUpdated(uint256 maxTx);
    event MaxWalletUpdated(uint256 maxWallet);

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

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

    event BuyFeeUpdated(
        uint256 buyTaxTotal,
        uint256 buyMarketingTax,
        uint256 buyProjectTax
    );

    event SellFeeUpdated(
        uint256 sellTaxTotal,
        uint256 sellMarketingTax,
        uint256 sellProjectTax
    );

    constructor() ERC20("KotGacek", "GACEK") {
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        exemptFromLimits(address(_dexRouter), true);
        dexRouter = _dexRouter;

        dexPair = IDexFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );
        exemptFromLimits(address(dexPair), true);
        _setAutomatedMarketMakerPair(address(dexPair), true);

        uint256 _buyMarketingTax = 5;
        uint256 _buyProjectTax = 0;

        uint256 _sellMarketingTax = 5;
        uint256 _sellProjectTax = 0;

        uint256 _totalSupply = 1_000_000_000_000 * 10 ** decimals();

        maxTx = (_totalSupply * 10) / 1000;
        maxWallet = (_totalSupply * 10) / 1000;

        swapBackValueMin = (_totalSupply * 1) / 1000;
        swapBackValueMax = (_totalSupply * 2) / 100;

        buyMarketingTax = _buyMarketingTax;
        buyProjectTax = _buyProjectTax;
        buyTaxTotal = buyMarketingTax + buyProjectTax;

        sellMarketingTax = _sellMarketingTax;
        sellProjectTax = _sellProjectTax;
        sellTaxTotal = sellMarketingTax + sellProjectTax;

        marketingWallet = address(0x170A0117999d29b62218065842Ecd07B443b5695);
        projectWallet = address(msg.sender);

        // exclude from paying fees or having max transaction amount
        exemptFromFees(msg.sender, true);
        exemptFromFees(address(this), true);
        exemptFromFees(address(0xdead), true);
        exemptFromFees(marketingWallet, true);

        exemptFromLimits(msg.sender, true);
        exemptFromLimits(address(this), true);
        exemptFromLimits(address(0xdead), true);
        exemptFromLimits(marketingWallet, true);

        transferOwnership(msg.sender);

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

    receive() external payable {}

    /**
     * @notice  Opens public trading for the token
     * @dev     onlyOwner.
     */
    function startTrading() external onlyOwner {
        tradingEnabled = true;
        swapbackEnabled = true;
        emit TradingEnabled(block.timestamp);
    }

    /**
     * @notice Removes the max wallet and max transaction limits
     * @dev onlyOwner.
     * Emits an {LimitsRemoved} event
     */
    function removeAllLimits() external onlyOwner {
        limitsEnabled = false;
        emit LimitsRemoved(block.timestamp);
    }

    /**
     * @notice Removes the transfer delay
     * @dev onlyOwner.
     * Emits an {DisabledTransferDelay} event
     */
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit DisabledTransferDelay(block.timestamp);
    }

    /**
     * @notice sets if swapback is enabled and sets the minimum and maximum amounts
     * @dev onlyOwner.
     * Emits an {SwapbackSettingsUpdated} event
     * @param _enabled If swapback is enabled
     * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100.
     * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100.
     */
    function setSwapBackSettings(
        bool _enabled,
        uint256 _min,
        uint256 _max
    ) external onlyOwner {
        require(
            _min >= 1,
            "Swap amount cannot be lower than 0.01% total supply."
        );
        require(_max >= _min, "maximum amount cant be higher than minimum");

        swapbackEnabled = _enabled;
        swapBackValueMin = (totalSupply() * _min) / 10000;
        swapBackValueMax = (totalSupply() * _max) / 10000;
        emit SwapbackSettingsUpdated(_enabled, _min, _max);
    }

    /**
     * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
     * @dev onlyOwner.
     * Emits an {MaxTxUpdated} event
     * @param newNum Base 1000, so 1% = 10
     */
    function setTheMaxTx(uint256 newNum) external onlyOwner {
        require(newNum >= 2, "Cannot set maxTx lower than 0.2%");
        maxTx = (newNum * totalSupply()) / 1000;
        emit MaxTxUpdated(maxTx);
    }

    /**
     * @notice Changes the maximum amount of tokens a wallet can hold
     * @dev onlyOwner.
     * Emits an {MaxWalletUpdated} event
     * @param newNum Base 1000, so 1% = 10
     */
    function setTheMaxWallet(uint256 newNum) external onlyOwner {
        require(newNum >= 5, "Cannot set maxWallet lower than 0.5%");
        maxWallet = (newNum * totalSupply()) / 1000;
        emit MaxWalletUpdated(maxWallet);
    }

    /**
     * @notice Sets if a wallet is excluded from the max wallet and tx limits
     * @dev onlyOwner.
     * Emits an {ExcludeFromLimits} event
     * @param updAds The wallet to update
     * @param isEx If the wallet is excluded or not
     */
    function exemptFromLimits(
        address updAds,
        bool isEx
    ) public onlyOwner {
        transferLimitExempt[updAds] = isEx;
        emit ExcludeFromLimits(updAds, isEx);
    }

    /**
     * @notice Sets the fees for buys
     * @dev onlyOwner.
     * Emits a {BuyFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function setFeesBuy(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingTax = _marketingFee;
        buyProjectTax = _devFee;
        buyTaxTotal = buyMarketingTax + buyProjectTax;
        require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%");
        emit BuyFeeUpdated(buyTaxTotal, buyMarketingTax, buyProjectTax);
    }

    /**
     * @notice Sets the fees for sells
     * @dev onlyOwner.
     * Emits a {SellFeeUpdated} event
     * All fees added up must be less than 100
     * @param _marketingFee The fee for the marketing wallet
     * @param _devFee The fee for the dev wallet
     */
    function setFeesSell(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingTax = _marketingFee;
        sellProjectTax = _devFee;
        sellTaxTotal = sellMarketingTax + sellProjectTax;
        require(
            sellTaxTotal <= 100,
            "Total sell fee cannot be higher than 100%"
        );
        emit SellFeeUpdated(sellTaxTotal, sellMarketingTax, sellProjectTax);
    }

    /**
     * @notice Sets if an address is excluded from fees
     * @dev onlyOwner.
     * Emits an {ExcludeFromFees} event
     * @param account The wallet to update
     * @param excluded If the wallet is excluded or not
     */
    function exemptFromFees(address account, bool excluded) public onlyOwner {
        transferTaxExempt[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    /**
     * @notice Sets an address as a new liquidity pair. You probably dont want to do this.
     * @dev onlyOwner.
     * Emits a {SetAutomatedMarketMakerPair} event
     * @param pair the address of the pair
     * @param value If the pair is a automated market maker pair or not
     */
    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != dexPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    /**
     * @notice Sets the marketing wallet
     * @dev onlyOwner.
     * Emits an {MarketingWalletUpdated} event
     * @param newWallet The new marketing wallet
     */
    function changeMarketingWallet(address newWallet) external onlyOwner {
        emit MarketingWalletUpdated(newWallet, marketingWallet);
        marketingWallet = newWallet;
    }

    /**
     * @notice Sets the project wallet
     * @dev onlyOwner.
     * Emits an {ProjectWalletUpdated} event
     * @param newWallet The new dev wallet
     */
    function changeProjectWallet(address newWallet) external onlyOwner {
        emit ProjectWalletUpdated(newWallet, projectWallet);
        projectWallet = newWallet;
    }

    /**
     * @notice  Information about the swapback settings
     * @return  _swapbackEnabled  if swapback is enabled
     * @return  _swapBackValueMin  the minimum amount of tokens in the contract balance to trigger swapback
     * @return  _swapBackValueMax  the maximum amount of tokens in the contract balance to trigger swapback
     */
    function swapbackValues()
        external
        view
        returns (
            bool _swapbackEnabled,
            uint256 _swapBackValueMin,
            uint256 _swapBackValueMax
        )
    {
        _swapbackEnabled = swapbackEnabled;
        _swapBackValueMin = swapBackValueMin;
        _swapBackValueMax = swapBackValueMax;
    }

    /**
     * @notice  Information about the anti whale parameters
     * @return  _limitsEnabled  if the wallet limits are in effect
     * @return  _transferDelayEnabled  if the transfer delay is enabled
     * @return  _maxWallet  The maximum amount of tokens that can be held by a wallet
     * @return  _maxTx  The maximum amount of tokens that can be bought or sold in a single transaction
     */
    function maxTxValues()
        external
        view
        returns (
            bool _limitsEnabled,
            bool _transferDelayEnabled,
            uint256 _maxWallet,
            uint256 _maxTx
        )
    {
        _limitsEnabled = limitsEnabled;
        _transferDelayEnabled = transferDelayEnabled;
        _maxWallet = maxWallet;
        _maxTx = maxTx;
    }

    /**
     * @notice The wallets that receive the collected fees
     * @return _marketingWallet The wallet that receives the marketing fees
     * @return _projectWallet The wallet that receives the dev fees
     */
    function receiverwallets()
        external
        view
        returns (address _marketingWallet, address _projectWallet)
    {
        return (marketingWallet, projectWallet);
    }

    /**
     * @notice Fees for buys, sells, and transfers
     * @return _buyTaxTotal The total fee for buys
     * @return _buyMarketingTax The fee for buys that gets sent to marketing
     * @return _buyProjectTax The fee for buys that gets sent to dev
     * @return _sellTaxTotal The total fee for sells
     * @return _sellMarketingTax The fee for sells that gets sent to marketing
     * @return _sellProjectTax The fee for sells that gets sent to dev
     */
    function taxValues()
        external
        view
        returns (
            uint256 _buyTaxTotal,
            uint256 _buyMarketingTax,
            uint256 _buyProjectTax,
            uint256 _sellTaxTotal,
            uint256 _sellMarketingTax,
            uint256 _sellProjectTax
        )
    {
        _buyTaxTotal = buyTaxTotal;
        _buyMarketingTax = buyMarketingTax;
        _buyProjectTax = buyProjectTax;
        _sellTaxTotal = sellTaxTotal;
        _sellMarketingTax = sellMarketingTax;
        _sellProjectTax = sellProjectTax;
    }

    /**
     * @notice  If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair
     * @param   _target  The wallet to check
     * @return  _transferTaxExempt  If the wallet is excluded from fees
     * @return  _transferLimitExempt  If the wallet is excluded from max transaction amount
     * @return  _automatedMarketMakerPairs If the wallet is a automated market maker pair
     */
    function checkMappings(
        address _target
    )
        external
        view
        returns (
            bool _transferTaxExempt,
            bool _transferLimitExempt,
            bool _automatedMarketMakerPairs
        )
    {
        _transferTaxExempt = transferTaxExempt[_target];
        _transferLimitExempt = transferLimitExempt[_target];
        _automatedMarketMakerPairs = automatedMarketMakerPairs[_target];
    }

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

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

        if (limitsEnabled) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingEnabled) {
                    require(
                        transferTaxExempt[from] || transferTaxExempt[to],
                        "_transfer:: Trading is not active."
                    );
                }

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapBackValueMin;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) {
                fees = amount.mul(sellTaxTotal).div(100);
                tokensForProject += (fees * sellProjectTax) / sellTaxTotal;
                tokensForMarketing += (fees * sellMarketingTax) / sellTaxTotal;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) {
                fees = amount.mul(buyTaxTotal).div(100);
                tokensForProject += (fees * buyProjectTax) / buyTaxTotal;
                tokensForMarketing += (fees * buyMarketingTax) / buyTaxTotal;
            }

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

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        _approve(address(this), address(dexRouter), tokenAmount);

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = contractBalance;
        bool success;

        if (contractBalance == 0) {
            return;
        }

        if (contractBalance > swapBackValueMax) {
            contractBalance = swapBackValueMax;
        }

        uint256 amountToSwapForETH = contractBalance;

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForDev = ethBalance.mul(tokensForProject).div(
            totalTokensToSwap
        );

        tokensForMarketing = 0;
        tokensForProject = 0;

        (success, ) = address(projectWallet).call{value: ethForDev}("");

        (success, ) = address(marketingWallet).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":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"ProjectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeProjectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"checkMappings","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"exemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"exemptFromLimits","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":"maxTxValues","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"bool","name":"_transferDelayEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiverwallets","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_projectWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFeesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setFeesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTheMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTheMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapbackValues","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxValues","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_buyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_buyProjectTax","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"_sellProjectTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600881526020017f4b6f74476163656b0000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f474143454b0000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000f3b565b5080600490816200010d919062000f3b565b50505062000130620001246200061460201b60201c565b6200061c60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c816001620006e260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020291906200108c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029091906200108c565b6040518363ffffffff1660e01b8152600401620002af929190620010cf565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f591906200108c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a0516001620006e260201b60201c565b6200035260a05160016200081c60201b60201c565b6000600590506000806005905060008062000372620008bd60201b60201c565b600a6200038091906200128c565b64e8d4a51000620003929190620012dd565b90506103e8600a82620003a69190620012dd565b620003b2919062001357565b600a819055506103e8600a82620003ca9190620012dd565b620003d6919062001357565b6009819055506103e8600182620003ee9190620012dd565b620003fa919062001357565b6006819055506064600282620004119190620012dd565b6200041d919062001357565b60078190555084600f8190555083601081905550601054600f546200044391906200138f565b600e8190555082601281905550816013819055506013546012546200046991906200138f565b60118190555073170a0117999d29b62218065842ecd07b443b5695600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000518336001620008c660201b60201c565b6200052b306001620008c660201b60201c565b6200054061dead6001620008c660201b60201c565b62000575600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008c660201b60201c565b62000588336001620006e260201b60201c565b6200059b306001620006e260201b60201c565b620005b061dead6001620006e260201b60201c565b620005e5600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006e260201b60201c565b620005f63362000a0060201b60201c565b62000608338262000b1560201b60201c565b505050505050620015bf565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006f26200061460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200071862000c8d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000768906200142b565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516200081091906200146a565b60405180910390a25050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b620008d66200061460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008fc62000c8d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000955576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200094c906200142b565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009f491906200146a565b60405180910390a25050565b62000a106200061460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a3662000c8d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a86906200142b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000b01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000af890620014fd565b60405180910390fd5b62000b12816200061c60201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b7e906200156f565b60405180910390fd5b62000b9b6000838362000cb760201b60201c565b806002600082825462000baf91906200138f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c0691906200138f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c6d9190620015a2565b60405180910390a362000c896000838362000cbc60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d4357607f821691505b60208210810362000d595762000d5862000cfb565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000dc37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d84565b62000dcf868362000d84565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e1c62000e1662000e108462000de7565b62000df1565b62000de7565b9050919050565b6000819050919050565b62000e388362000dfb565b62000e5062000e478262000e23565b84845462000d91565b825550505050565b600090565b62000e6762000e58565b62000e7481848462000e2d565b505050565b5b8181101562000e9c5762000e9060008262000e5d565b60018101905062000e7a565b5050565b601f82111562000eeb5762000eb58162000d5f565b62000ec08462000d74565b8101602085101562000ed0578190505b62000ee862000edf8562000d74565b83018262000e79565b50505b505050565b600082821c905092915050565b600062000f106000198460080262000ef0565b1980831691505092915050565b600062000f2b838362000efd565b9150826002028217905092915050565b62000f468262000cc1565b67ffffffffffffffff81111562000f625762000f6162000ccc565b5b62000f6e825462000d2a565b62000f7b82828562000ea0565b600060209050601f83116001811462000fb3576000841562000f9e578287015190505b62000faa858262000f1d565b8655506200101a565b601f19841662000fc38662000d5f565b60005b8281101562000fed5784890151825560018201915060208501945060208101905062000fc6565b868310156200100d578489015162001009601f89168262000efd565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010548262001027565b9050919050565b620010668162001047565b81146200107257600080fd5b50565b60008151905062001086816200105b565b92915050565b600060208284031215620010a557620010a462001022565b5b6000620010b58482850162001075565b91505092915050565b620010c98162001047565b82525050565b6000604082019050620010e66000830185620010be565b620010f56020830184620010be565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200118a57808604811115620011625762001161620010fc565b5b6001851615620011725780820291505b808102905062001182856200112b565b945062001142565b94509492505050565b600082620011a5576001905062001278565b81620011b5576000905062001278565b8160018114620011ce5760028114620011d9576200120f565b600191505062001278565b60ff841115620011ee57620011ed620010fc565b5b8360020a915084821115620012085762001207620010fc565b5b5062001278565b5060208310610133831016604e8410600b8410161715620012495782820a905083811115620012435762001242620010fc565b5b62001278565b62001258848484600162001138565b92509050818404811115620012725762001271620010fc565b5b81810290505b9392505050565b600060ff82169050919050565b6000620012998262000de7565b9150620012a6836200127f565b9250620012d57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001193565b905092915050565b6000620012ea8262000de7565b9150620012f78362000de7565b9250828202620013078162000de7565b91508282048414831517620013215762001320620010fc565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620013648262000de7565b9150620013718362000de7565b92508262001384576200138362001328565b5b828204905092915050565b60006200139c8262000de7565b9150620013a98362000de7565b9250828201905080821115620013c457620013c3620010fc565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001413602083620013ca565b91506200142082620013db565b602082019050919050565b60006020820190508181036000830152620014468162001404565b9050919050565b60008115159050919050565b62001464816200144d565b82525050565b600060208201905062001481600083018462001459565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620014e5602683620013ca565b9150620014f28262001487565b604082019050919050565b600060208201905081810360008301526200151881620014d6565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001557601f83620013ca565b915062001564826200151f565b602082019050919050565b600060208201905081810360008301526200158a8162001548565b9050919050565b6200159c8162000de7565b82525050565b6000602082019050620015b9600083018462001591565b92915050565b60805160a051614aa5620016086000396000818161126601528181611c4c01526124900152600081816124380152818161338501528181613466015261348d0152614aa56000f3fe6080604052600436106101fd5760003560e01c806399e5b5c81161010d578063db05e5cb116100a0578063f242ab411161006f578063f242ab411461071d578063f2fde38b14610748578063f3dc390214610771578063fab82a8e146107a1578063fcbb7607146107cd57610204565b8063db05e5cb14610673578063dd62ed3e1461068a578063e13b2007146106c7578063e884f2601461070657610204565b8063a457c2d7116100dc578063a457c2d7146105a7578063a9059cbb146105e4578063bb85c6d114610621578063d08893581461064a57610204565b806399e5b5c8146105035780639a7a23d61461052c5780639b6b5499146105555780639fe640941461057e57610204565b80634ada218b1161019057806370a082311161015f57806370a082311461042c578063715018a61461046957806377b5312c146104805780638da5cb5b146104ad57806395d89b41146104d857610204565b80634ada218b146103865780634b896a3e146103b157806352d65858146103da5780635580145f1461040357610204565b8063293230b8116101cc578063293230b8146102d9578063313ce567146102f057806331f815111461031b578063395093511461034957610204565b806306fdde0314610209578063095ea7b31461023457806318160ddd1461027157806323b872dd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6107f6565b60405161022b91906135c9565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190613684565b610888565b60405161026891906136df565b60405180910390f35b34801561027d57600080fd5b506102866108a6565b6040516102939190613709565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190613724565b6108b0565b6040516102d091906136df565b60405180910390f35b3480156102e557600080fd5b506102ee6109a8565b005b3480156102fc57600080fd5b50610305610a89565b6040516103129190613793565b60405180910390f35b34801561032757600080fd5b50610330610a92565b60405161034094939291906137ae565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190613684565b610acc565b60405161037d91906136df565b60405180910390f35b34801561039257600080fd5b5061039b610b78565b6040516103a891906136df565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d391906137f3565b610b8b565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613820565b610cad565b005b34801561040f57600080fd5b5061042a600480360381019061042591906137f3565b610dd8565b005b34801561043857600080fd5b50610453600480360381019061044e9190613860565b610efa565b6040516104609190613709565b60405180910390f35b34801561047557600080fd5b5061047e610f42565b005b34801561048c57600080fd5b50610495610fca565b6040516104a49392919061388d565b60405180910390f35b3480156104b957600080fd5b506104c2610ff0565b6040516104cf91906138d3565b60405180910390f35b3480156104e457600080fd5b506104ed61101a565b6040516104fa91906135c9565b60405180910390f35b34801561050f57600080fd5b5061052a60048036038101906105259190613860565b6110ac565b005b34801561053857600080fd5b50610553600480360381019061054e919061391a565b6111e8565b005b34801561056157600080fd5b5061057c6004803603810190610577919061391a565b611300565b005b34801561058a57600080fd5b506105a560048036038101906105a09190613820565b611425565b005b3480156105b357600080fd5b506105ce60048036038101906105c99190613684565b611550565b6040516105db91906136df565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613684565b61163b565b60405161061891906136df565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190613860565b611659565b005b34801561065657600080fd5b50610671600480360381019061066c919061395a565b611795565b005b34801561067f57600080fd5b5061068861193e565b005b34801561069657600080fd5b506106b160048036038101906106ac91906139ad565b611a04565b6040516106be9190613709565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190613860565b611a8b565b6040516106fd939291906139ed565b60405180910390f35b34801561071257600080fd5b5061071b611b84565b005b34801561072957600080fd5b50610732611c4a565b60405161073f91906138d3565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a9190613860565b611c6e565b005b34801561077d57600080fd5b50610786611d65565b60405161079896959493929190613a24565b60405180910390f35b3480156107ad57600080fd5b506107b6611d94565b6040516107c4929190613a85565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef919061391a565b611de5565b005b60606003805461080590613add565b80601f016020809104026020016040519081016040528092919081815260200182805461083190613add565b801561087e5780601f106108535761010080835404028352916020019161087e565b820191906000526020600020905b81548152906001019060200180831161086157829003601f168201915b5050505050905090565b600061089c610895611f0a565b8484611f12565b6001905092915050565b6000600254905090565b60006108bd8484846120db565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610908611f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097f90613b80565b60405180910390fd5b61099c85610994611f0a565b858403611f12565b60019150509392505050565b6109b0611f0a565b73ffffffffffffffffffffffffffffffffffffffff166109ce610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614610a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1b90613bec565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b60006012905090565b600080600080600860009054906101000a900460ff169350600860019054906101000a900460ff1692506009549150600a54905090919293565b6000610b6e610ad9611f0a565b848460016000610ae7611f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b699190613c3b565b611f12565b6001905092915050565b600c60009054906101000a900460ff1681565b610b93611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610bb1610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90613bec565b60405180910390fd5b6005811015610c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4290613ce1565b60405180910390fd5b6103e8610c566108a6565b82610c619190613d01565b610c6b9190613d72565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051610ca29190613709565b60405180910390a150565b610cb5611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610cd3610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2090613bec565b60405180910390fd5b81600f8190555080601081905550601054600f54610d479190613c3b565b600e819055506064600e541115610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90613e15565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610dcc93929190613e35565b60405180910390a15050565b610de0611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610dfe610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b90613bec565b60405180910390fd5b6002811015610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90613eb8565b60405180910390fd5b6103e8610ea36108a6565b82610eae9190613d01565b610eb89190613d72565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051610eef9190613709565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f4a611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610f68610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613bec565b60405180910390fd5b610fc86000612d0c565b565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461102990613add565b80601f016020809104026020016040519081016040528092919081815260200182805461105590613add565b80156110a25780601f10611077576101008083540402835291602001916110a2565b820191906000526020600020905b81548152906001019060200180831161108557829003601f168201915b5050505050905090565b6110b4611f0a565b73ffffffffffffffffffffffffffffffffffffffff166110d2610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111f90613bec565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111f0611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661120e610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90613bec565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e990613f4a565b60405180910390fd5b6112fc8282612dd2565b5050565b611308611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611326610ff0565b73ffffffffffffffffffffffffffffffffffffffff161461137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137390613bec565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161141991906136df565b60405180910390a25050565b61142d611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661144b610ff0565b73ffffffffffffffffffffffffffffffffffffffff16146114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890613bec565b60405180910390fd5b81601281905550806013819055506013546012546114bf9190613c3b565b6011819055506064601154111561150b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150290613fdc565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f160115460125460135460405161154493929190613e35565b60405180910390a15050565b6000806001600061155f611f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561161c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116139061406e565b60405180910390fd5b611630611627611f0a565b85858403611f12565b600191505092915050565b600061164f611648611f0a565b84846120db565b6001905092915050565b611661611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661167f610ff0565b73ffffffffffffffffffffffffffffffffffffffff16146116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc90613bec565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61179d611f0a565b73ffffffffffffffffffffffffffffffffffffffff166117bb610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614611811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180890613bec565b60405180910390fd5b6001821015611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90614100565b60405180910390fd5b81811015611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f90614192565b60405180910390fd5b82600560156101000a81548160ff021916908315150217905550612710826118be6108a6565b6118c89190613d01565b6118d29190613d72565b600681905550612710816118e46108a6565b6118ee9190613d01565b6118f89190613d72565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516119319392919061388d565b60405180910390a1505050565b611946611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611964610ff0565b73ffffffffffffffffffffffffffffffffffffffff16146119ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b190613bec565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611b8c611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611baa610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf790613bec565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b7f000000000000000000000000000000000000000000000000000000000000000081565b611c76611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611c94610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614611cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce190613bec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5090614224565b60405180910390fd5b611d6281612d0c565b50565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611ded611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611e0b610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5890613bec565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611efe91906136df565b60405180910390a25050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f78906142b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790614348565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120ce9190613709565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361214a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612141906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b09061446c565b60405180910390fd5b600081036121d2576121cd83836000612e73565b612d07565b600860009054906101000a900460ff1615612895576121ef610ff0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561225d575061222d610ff0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122965750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122d0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122e95750600560149054906101000a900460ff16155b1561289457600c60009054906101000a900460ff166123e357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123a35750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d9906144fe565b60405180910390fd5b5b600860019054906101000a900460ff16156125ab57612400610ff0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561248757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124df57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125aa5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255c906145b6565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561264e5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126f557600a54811115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90614648565b60405180910390fd5b6009546126a483610efa565b826126af9190613c3b565b11156126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e7906146b4565b60405180910390fd5b612893565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127985750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127e757600a548111156127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d990614746565b60405180910390fd5b612892565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128915760095461284483610efa565b8261284f9190613c3b565b1115612890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612887906146b4565b60405180910390fd5b5b5b5b5b5b60006128a030610efa565b9050600060065482101590508080156128c55750600560159054906101000a900460ff165b80156128de5750600560149054906101000a900460ff16155b80156129345750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561298a5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129e05750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a24576001600560146101000a81548160ff021916908315150217905550612a086130f2565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ada5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ae457600090505b60008115612cf757601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b4757506000601154115b15612be157612b746064612b66601154886132b090919063ffffffff16565b6132c690919063ffffffff16565b905060115460135482612b879190613d01565b612b919190613d72565b60156000828254612ba29190613c3b565b9250508190555060115460125482612bba9190613d01565b612bc49190613d72565b60146000828254612bd59190613c3b565b92505081905550612cd3565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c3c57506000600e54115b15612cd257612c696064612c5b600e54886132b090919063ffffffff16565b6132c690919063ffffffff16565b9050600e5460105482612c7c9190613d01565b612c869190613d72565b60156000828254612c979190613c3b565b92505081905550600e54600f5482612caf9190613d01565b612cb99190613d72565b60146000828254612cca9190613c3b565b925050819055505b5b6000811115612ce857612ce7873083612e73565b5b8085612cf49190614766565b94505b612d02878787612e73565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed9906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f489061446c565b60405180910390fd5b612f5c8383836132dc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd99061480c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130759190613c3b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130d99190613709565b60405180910390a36130ec8484846132e1565b50505050565b60006130fd30610efa565b905060008190506000808303613115575050506132ae565b6007548311156131255760075492505b60008390506000479050613138826132e6565b600061314d824761352390919063ffffffff16565b905060006131788661316a601554856132b090919063ffffffff16565b6132c690919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516131d09061485d565b60006040518083038185875af1925050503d806000811461320d576040519150601f19603f3d011682016040523d82523d6000602084013e613212565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161325e9061485d565b60006040518083038185875af1925050503d806000811461329b576040519150601f19603f3d011682016040523d82523d6000602084013e6132a0565b606091505b505080955050505050505050505b565b600081836132be9190613d01565b905092915050565b600081836132d49190613d72565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561330357613302614872565b5b6040519080825280602002602001820160405280156133315781602001602082028036833780820191505090505b5090503081600081518110613349576133486148a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341291906148e5565b81600181518110613426576134256148a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061348b307f000000000000000000000000000000000000000000000000000000000000000084611f12565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134ed959493929190614a15565b600060405180830381600087803b15801561350757600080fd5b505af115801561351b573d6000803e3d6000fd5b505050505050565b600081836135319190614766565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613573578082015181840152602081019050613558565b60008484015250505050565b6000601f19601f8301169050919050565b600061359b82613539565b6135a58185613544565b93506135b5818560208601613555565b6135be8161357f565b840191505092915050565b600060208201905081810360008301526135e38184613590565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061361b826135f0565b9050919050565b61362b81613610565b811461363657600080fd5b50565b60008135905061364881613622565b92915050565b6000819050919050565b6136618161364e565b811461366c57600080fd5b50565b60008135905061367e81613658565b92915050565b6000806040838503121561369b5761369a6135eb565b5b60006136a985828601613639565b92505060206136ba8582860161366f565b9150509250929050565b60008115159050919050565b6136d9816136c4565b82525050565b60006020820190506136f460008301846136d0565b92915050565b6137038161364e565b82525050565b600060208201905061371e60008301846136fa565b92915050565b60008060006060848603121561373d5761373c6135eb565b5b600061374b86828701613639565b935050602061375c86828701613639565b925050604061376d8682870161366f565b9150509250925092565b600060ff82169050919050565b61378d81613777565b82525050565b60006020820190506137a86000830184613784565b92915050565b60006080820190506137c360008301876136d0565b6137d060208301866136d0565b6137dd60408301856136fa565b6137ea60608301846136fa565b95945050505050565b600060208284031215613809576138086135eb565b5b60006138178482850161366f565b91505092915050565b60008060408385031215613837576138366135eb565b5b60006138458582860161366f565b92505060206138568582860161366f565b9150509250929050565b600060208284031215613876576138756135eb565b5b600061388484828501613639565b91505092915050565b60006060820190506138a260008301866136d0565b6138af60208301856136fa565b6138bc60408301846136fa565b949350505050565b6138cd81613610565b82525050565b60006020820190506138e860008301846138c4565b92915050565b6138f7816136c4565b811461390257600080fd5b50565b600081359050613914816138ee565b92915050565b60008060408385031215613931576139306135eb565b5b600061393f85828601613639565b925050602061395085828601613905565b9150509250929050565b600080600060608486031215613973576139726135eb565b5b600061398186828701613905565b93505060206139928682870161366f565b92505060406139a38682870161366f565b9150509250925092565b600080604083850312156139c4576139c36135eb565b5b60006139d285828601613639565b92505060206139e385828601613639565b9150509250929050565b6000606082019050613a0260008301866136d0565b613a0f60208301856136d0565b613a1c60408301846136d0565b949350505050565b600060c082019050613a3960008301896136fa565b613a4660208301886136fa565b613a5360408301876136fa565b613a6060608301866136fa565b613a6d60808301856136fa565b613a7a60a08301846136fa565b979650505050505050565b6000604082019050613a9a60008301856138c4565b613aa760208301846138c4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613af557607f821691505b602082108103613b0857613b07613aae565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613b6a602883613544565b9150613b7582613b0e565b604082019050919050565b60006020820190508181036000830152613b9981613b5d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bd6602083613544565b9150613be182613ba0565b602082019050919050565b60006020820190508181036000830152613c0581613bc9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c468261364e565b9150613c518361364e565b9250828201905080821115613c6957613c68613c0c565b5b92915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613ccb602483613544565b9150613cd682613c6f565b604082019050919050565b60006020820190508181036000830152613cfa81613cbe565b9050919050565b6000613d0c8261364e565b9150613d178361364e565b9250828202613d258161364e565b91508282048414831517613d3c57613d3b613c0c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d7d8261364e565b9150613d888361364e565b925082613d9857613d97613d43565b5b828204905092915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613dff602883613544565b9150613e0a82613da3565b604082019050919050565b60006020820190508181036000830152613e2e81613df2565b9050919050565b6000606082019050613e4a60008301866136fa565b613e5760208301856136fa565b613e6460408301846136fa565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613ea2602083613544565b9150613ead82613e6c565b602082019050919050565b60006020820190508181036000830152613ed181613e95565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f34603983613544565b9150613f3f82613ed8565b604082019050919050565b60006020820190508181036000830152613f6381613f27565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613fc6602983613544565b9150613fd182613f6a565b604082019050919050565b60006020820190508181036000830152613ff581613fb9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614058602583613544565b915061406382613ffc565b604082019050919050565b600060208201905081810360008301526140878161404b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006140ea603483613544565b91506140f58261408e565b604082019050919050565b60006020820190508181036000830152614119816140dd565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061417c602a83613544565b915061418782614120565b604082019050919050565b600060208201905081810360008301526141ab8161416f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061420e602683613544565b9150614219826141b2565b604082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142a0602483613544565b91506142ab82614244565b604082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614332602283613544565b915061433d826142d6565b604082019050919050565b6000602082019050818103600083015261436181614325565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006143c4602583613544565b91506143cf82614368565b604082019050919050565b600060208201905081810360008301526143f3816143b7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614456602383613544565b9150614461826143fa565b604082019050919050565b6000602082019050818103600083015261448581614449565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006144e8602283613544565b91506144f38261448c565b604082019050919050565b60006020820190508181036000830152614517816144db565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006145a0604983613544565b91506145ab8261451e565b606082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614632602683613544565b915061463d826145d6565b604082019050919050565b6000602082019050818103600083015261466181614625565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061469e601383613544565b91506146a982614668565b602082019050919050565b600060208201905081810360008301526146cd81614691565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614730602783613544565b915061473b826146d4565b604082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b60006147718261364e565b915061477c8361364e565b925082820390508181111561479457614793613c0c565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006147f6602683613544565b91506148018261479a565b604082019050919050565b60006020820190508181036000830152614825816147e9565b9050919050565b600081905092915050565b50565b600061484760008361482c565b915061485282614837565b600082019050919050565b60006148688261483a565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148df81613622565b92915050565b6000602082840312156148fb576148fa6135eb565b5b6000614909848285016148d0565b91505092915050565b6000819050919050565b6000819050919050565b600061494161493c61493784614912565b61491c565b61364e565b9050919050565b61495181614926565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61498c81613610565b82525050565b600061499e8383614983565b60208301905092915050565b6000602082019050919050565b60006149c282614957565b6149cc8185614962565b93506149d783614973565b8060005b83811015614a085781516149ef8882614992565b97506149fa836149aa565b9250506001810190506149db565b5085935050505092915050565b600060a082019050614a2a60008301886136fa565b614a376020830187614948565b8181036040830152614a4981866149b7565b9050614a5860608301856138c4565b614a6560808301846136fa565b969550505050505056fea26469706673582212200e3b777dfd07aa93d099666164a87008d64034af88b1cb7615a5c1c81af8637c64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c806399e5b5c81161010d578063db05e5cb116100a0578063f242ab411161006f578063f242ab411461071d578063f2fde38b14610748578063f3dc390214610771578063fab82a8e146107a1578063fcbb7607146107cd57610204565b8063db05e5cb14610673578063dd62ed3e1461068a578063e13b2007146106c7578063e884f2601461070657610204565b8063a457c2d7116100dc578063a457c2d7146105a7578063a9059cbb146105e4578063bb85c6d114610621578063d08893581461064a57610204565b806399e5b5c8146105035780639a7a23d61461052c5780639b6b5499146105555780639fe640941461057e57610204565b80634ada218b1161019057806370a082311161015f57806370a082311461042c578063715018a61461046957806377b5312c146104805780638da5cb5b146104ad57806395d89b41146104d857610204565b80634ada218b146103865780634b896a3e146103b157806352d65858146103da5780635580145f1461040357610204565b8063293230b8116101cc578063293230b8146102d9578063313ce567146102f057806331f815111461031b578063395093511461034957610204565b806306fdde0314610209578063095ea7b31461023457806318160ddd1461027157806323b872dd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6107f6565b60405161022b91906135c9565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190613684565b610888565b60405161026891906136df565b60405180910390f35b34801561027d57600080fd5b506102866108a6565b6040516102939190613709565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190613724565b6108b0565b6040516102d091906136df565b60405180910390f35b3480156102e557600080fd5b506102ee6109a8565b005b3480156102fc57600080fd5b50610305610a89565b6040516103129190613793565b60405180910390f35b34801561032757600080fd5b50610330610a92565b60405161034094939291906137ae565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190613684565b610acc565b60405161037d91906136df565b60405180910390f35b34801561039257600080fd5b5061039b610b78565b6040516103a891906136df565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d391906137f3565b610b8b565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613820565b610cad565b005b34801561040f57600080fd5b5061042a600480360381019061042591906137f3565b610dd8565b005b34801561043857600080fd5b50610453600480360381019061044e9190613860565b610efa565b6040516104609190613709565b60405180910390f35b34801561047557600080fd5b5061047e610f42565b005b34801561048c57600080fd5b50610495610fca565b6040516104a49392919061388d565b60405180910390f35b3480156104b957600080fd5b506104c2610ff0565b6040516104cf91906138d3565b60405180910390f35b3480156104e457600080fd5b506104ed61101a565b6040516104fa91906135c9565b60405180910390f35b34801561050f57600080fd5b5061052a60048036038101906105259190613860565b6110ac565b005b34801561053857600080fd5b50610553600480360381019061054e919061391a565b6111e8565b005b34801561056157600080fd5b5061057c6004803603810190610577919061391a565b611300565b005b34801561058a57600080fd5b506105a560048036038101906105a09190613820565b611425565b005b3480156105b357600080fd5b506105ce60048036038101906105c99190613684565b611550565b6040516105db91906136df565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613684565b61163b565b60405161061891906136df565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190613860565b611659565b005b34801561065657600080fd5b50610671600480360381019061066c919061395a565b611795565b005b34801561067f57600080fd5b5061068861193e565b005b34801561069657600080fd5b506106b160048036038101906106ac91906139ad565b611a04565b6040516106be9190613709565b60405180910390f35b3480156106d357600080fd5b506106ee60048036038101906106e99190613860565b611a8b565b6040516106fd939291906139ed565b60405180910390f35b34801561071257600080fd5b5061071b611b84565b005b34801561072957600080fd5b50610732611c4a565b60405161073f91906138d3565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a9190613860565b611c6e565b005b34801561077d57600080fd5b50610786611d65565b60405161079896959493929190613a24565b60405180910390f35b3480156107ad57600080fd5b506107b6611d94565b6040516107c4929190613a85565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef919061391a565b611de5565b005b60606003805461080590613add565b80601f016020809104026020016040519081016040528092919081815260200182805461083190613add565b801561087e5780601f106108535761010080835404028352916020019161087e565b820191906000526020600020905b81548152906001019060200180831161086157829003601f168201915b5050505050905090565b600061089c610895611f0a565b8484611f12565b6001905092915050565b6000600254905090565b60006108bd8484846120db565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610908611f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097f90613b80565b60405180910390fd5b61099c85610994611f0a565b858403611f12565b60019150509392505050565b6109b0611f0a565b73ffffffffffffffffffffffffffffffffffffffff166109ce610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614610a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1b90613bec565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b60006012905090565b600080600080600860009054906101000a900460ff169350600860019054906101000a900460ff1692506009549150600a54905090919293565b6000610b6e610ad9611f0a565b848460016000610ae7611f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b699190613c3b565b611f12565b6001905092915050565b600c60009054906101000a900460ff1681565b610b93611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610bb1610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90613bec565b60405180910390fd5b6005811015610c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4290613ce1565b60405180910390fd5b6103e8610c566108a6565b82610c619190613d01565b610c6b9190613d72565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600954604051610ca29190613709565b60405180910390a150565b610cb5611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610cd3610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614610d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2090613bec565b60405180910390fd5b81600f8190555080601081905550601054600f54610d479190613c3b565b600e819055506064600e541115610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90613e15565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f54601054604051610dcc93929190613e35565b60405180910390a15050565b610de0611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610dfe610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b90613bec565b60405180910390fd5b6002811015610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90613eb8565b60405180910390fd5b6103e8610ea36108a6565b82610eae9190613d01565b610eb89190613d72565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051610eef9190613709565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f4a611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610f68610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590613bec565b60405180910390fd5b610fc86000612d0c565b565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461102990613add565b80601f016020809104026020016040519081016040528092919081815260200182805461105590613add565b80156110a25780601f10611077576101008083540402835291602001916110a2565b820191906000526020600020905b81548152906001019060200180831161108557829003601f168201915b5050505050905090565b6110b4611f0a565b73ffffffffffffffffffffffffffffffffffffffff166110d2610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614611128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111f90613bec565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111f0611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661120e610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b90613bec565b60405180910390fd5b7f000000000000000000000000cb5680ec21d447e20a93b9343a6792651a1920bf73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036112f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e990613f4a565b60405180910390fd5b6112fc8282612dd2565b5050565b611308611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611326610ff0565b73ffffffffffffffffffffffffffffffffffffffff161461137c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137390613bec565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161141991906136df565b60405180910390a25050565b61142d611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661144b610ff0565b73ffffffffffffffffffffffffffffffffffffffff16146114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890613bec565b60405180910390fd5b81601281905550806013819055506013546012546114bf9190613c3b565b6011819055506064601154111561150b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150290613fdc565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f160115460125460135460405161154493929190613e35565b60405180910390a15050565b6000806001600061155f611f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561161c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116139061406e565b60405180910390fd5b611630611627611f0a565b85858403611f12565b600191505092915050565b600061164f611648611f0a565b84846120db565b6001905092915050565b611661611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661167f610ff0565b73ffffffffffffffffffffffffffffffffffffffff16146116d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cc90613bec565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61179d611f0a565b73ffffffffffffffffffffffffffffffffffffffff166117bb610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614611811576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180890613bec565b60405180910390fd5b6001821015611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90614100565b60405180910390fd5b81811015611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f90614192565b60405180910390fd5b82600560156101000a81548160ff021916908315150217905550612710826118be6108a6565b6118c89190613d01565b6118d29190613d72565b600681905550612710816118e46108a6565b6118ee9190613d01565b6118f89190613d72565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516119319392919061388d565b60405180910390a1505050565b611946611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611964610ff0565b73ffffffffffffffffffffffffffffffffffffffff16146119ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b190613bec565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611b8c611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611baa610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf790613bec565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b7f000000000000000000000000cb5680ec21d447e20a93b9343a6792651a1920bf81565b611c76611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611c94610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614611cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce190613bec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5090614224565b60405180910390fd5b611d6281612d0c565b50565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611ded611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611e0b610ff0565b73ffffffffffffffffffffffffffffffffffffffff1614611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5890613bec565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051611efe91906136df565b60405180910390a25050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f78906142b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790614348565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120ce9190613709565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361214a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612141906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b09061446c565b60405180910390fd5b600081036121d2576121cd83836000612e73565b612d07565b600860009054906101000a900460ff1615612895576121ef610ff0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561225d575061222d610ff0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122965750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122d0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122e95750600560149054906101000a900460ff16155b1561289457600c60009054906101000a900460ff166123e357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123a35750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d9906144fe565b60405180910390fd5b5b600860019054906101000a900460ff16156125ab57612400610ff0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561248757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124df57507f000000000000000000000000cb5680ec21d447e20a93b9343a6792651a1920bf73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125aa5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255c906145b6565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561264e5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126f557600a54811115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90614648565b60405180910390fd5b6009546126a483610efa565b826126af9190613c3b565b11156126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e7906146b4565b60405180910390fd5b612893565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127985750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127e757600a548111156127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d990614746565b60405180910390fd5b612892565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128915760095461284483610efa565b8261284f9190613c3b565b1115612890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612887906146b4565b60405180910390fd5b5b5b5b5b5b60006128a030610efa565b9050600060065482101590508080156128c55750600560159054906101000a900460ff165b80156128de5750600560149054906101000a900460ff16155b80156129345750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561298a5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129e05750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a24576001600560146101000a81548160ff021916908315150217905550612a086130f2565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ada5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ae457600090505b60008115612cf757601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b4757506000601154115b15612be157612b746064612b66601154886132b090919063ffffffff16565b6132c690919063ffffffff16565b905060115460135482612b879190613d01565b612b919190613d72565b60156000828254612ba29190613c3b565b9250508190555060115460125482612bba9190613d01565b612bc49190613d72565b60146000828254612bd59190613c3b565b92505081905550612cd3565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c3c57506000600e54115b15612cd257612c696064612c5b600e54886132b090919063ffffffff16565b6132c690919063ffffffff16565b9050600e5460105482612c7c9190613d01565b612c869190613d72565b60156000828254612c979190613c3b565b92505081905550600e54600f5482612caf9190613d01565b612cb99190613d72565b60146000828254612cca9190613c3b565b925050819055505b5b6000811115612ce857612ce7873083612e73565b5b8085612cf49190614766565b94505b612d02878787612e73565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed9906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f489061446c565b60405180910390fd5b612f5c8383836132dc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd99061480c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130759190613c3b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130d99190613709565b60405180910390a36130ec8484846132e1565b50505050565b60006130fd30610efa565b905060008190506000808303613115575050506132ae565b6007548311156131255760075492505b60008390506000479050613138826132e6565b600061314d824761352390919063ffffffff16565b905060006131788661316a601554856132b090919063ffffffff16565b6132c690919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516131d09061485d565b60006040518083038185875af1925050503d806000811461320d576040519150601f19603f3d011682016040523d82523d6000602084013e613212565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161325e9061485d565b60006040518083038185875af1925050503d806000811461329b576040519150601f19603f3d011682016040523d82523d6000602084013e6132a0565b606091505b505080955050505050505050505b565b600081836132be9190613d01565b905092915050565b600081836132d49190613d72565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561330357613302614872565b5b6040519080825280602002602001820160405280156133315781602001602082028036833780820191505090505b5090503081600081518110613349576133486148a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341291906148e5565b81600181518110613426576134256148a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061348b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f12565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134ed959493929190614a15565b600060405180830381600087803b15801561350757600080fd5b505af115801561351b573d6000803e3d6000fd5b505050505050565b600081836135319190614766565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613573578082015181840152602081019050613558565b60008484015250505050565b6000601f19601f8301169050919050565b600061359b82613539565b6135a58185613544565b93506135b5818560208601613555565b6135be8161357f565b840191505092915050565b600060208201905081810360008301526135e38184613590565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061361b826135f0565b9050919050565b61362b81613610565b811461363657600080fd5b50565b60008135905061364881613622565b92915050565b6000819050919050565b6136618161364e565b811461366c57600080fd5b50565b60008135905061367e81613658565b92915050565b6000806040838503121561369b5761369a6135eb565b5b60006136a985828601613639565b92505060206136ba8582860161366f565b9150509250929050565b60008115159050919050565b6136d9816136c4565b82525050565b60006020820190506136f460008301846136d0565b92915050565b6137038161364e565b82525050565b600060208201905061371e60008301846136fa565b92915050565b60008060006060848603121561373d5761373c6135eb565b5b600061374b86828701613639565b935050602061375c86828701613639565b925050604061376d8682870161366f565b9150509250925092565b600060ff82169050919050565b61378d81613777565b82525050565b60006020820190506137a86000830184613784565b92915050565b60006080820190506137c360008301876136d0565b6137d060208301866136d0565b6137dd60408301856136fa565b6137ea60608301846136fa565b95945050505050565b600060208284031215613809576138086135eb565b5b60006138178482850161366f565b91505092915050565b60008060408385031215613837576138366135eb565b5b60006138458582860161366f565b92505060206138568582860161366f565b9150509250929050565b600060208284031215613876576138756135eb565b5b600061388484828501613639565b91505092915050565b60006060820190506138a260008301866136d0565b6138af60208301856136fa565b6138bc60408301846136fa565b949350505050565b6138cd81613610565b82525050565b60006020820190506138e860008301846138c4565b92915050565b6138f7816136c4565b811461390257600080fd5b50565b600081359050613914816138ee565b92915050565b60008060408385031215613931576139306135eb565b5b600061393f85828601613639565b925050602061395085828601613905565b9150509250929050565b600080600060608486031215613973576139726135eb565b5b600061398186828701613905565b93505060206139928682870161366f565b92505060406139a38682870161366f565b9150509250925092565b600080604083850312156139c4576139c36135eb565b5b60006139d285828601613639565b92505060206139e385828601613639565b9150509250929050565b6000606082019050613a0260008301866136d0565b613a0f60208301856136d0565b613a1c60408301846136d0565b949350505050565b600060c082019050613a3960008301896136fa565b613a4660208301886136fa565b613a5360408301876136fa565b613a6060608301866136fa565b613a6d60808301856136fa565b613a7a60a08301846136fa565b979650505050505050565b6000604082019050613a9a60008301856138c4565b613aa760208301846138c4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613af557607f821691505b602082108103613b0857613b07613aae565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613b6a602883613544565b9150613b7582613b0e565b604082019050919050565b60006020820190508181036000830152613b9981613b5d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bd6602083613544565b9150613be182613ba0565b602082019050919050565b60006020820190508181036000830152613c0581613bc9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c468261364e565b9150613c518361364e565b9250828201905080821115613c6957613c68613c0c565b5b92915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613ccb602483613544565b9150613cd682613c6f565b604082019050919050565b60006020820190508181036000830152613cfa81613cbe565b9050919050565b6000613d0c8261364e565b9150613d178361364e565b9250828202613d258161364e565b91508282048414831517613d3c57613d3b613c0c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d7d8261364e565b9150613d888361364e565b925082613d9857613d97613d43565b5b828204905092915050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613dff602883613544565b9150613e0a82613da3565b604082019050919050565b60006020820190508181036000830152613e2e81613df2565b9050919050565b6000606082019050613e4a60008301866136fa565b613e5760208301856136fa565b613e6460408301846136fa565b949350505050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613ea2602083613544565b9150613ead82613e6c565b602082019050919050565b60006020820190508181036000830152613ed181613e95565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f34603983613544565b9150613f3f82613ed8565b604082019050919050565b60006020820190508181036000830152613f6381613f27565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613fc6602983613544565b9150613fd182613f6a565b604082019050919050565b60006020820190508181036000830152613ff581613fb9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614058602583613544565b915061406382613ffc565b604082019050919050565b600060208201905081810360008301526140878161404b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006140ea603483613544565b91506140f58261408e565b604082019050919050565b60006020820190508181036000830152614119816140dd565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061417c602a83613544565b915061418782614120565b604082019050919050565b600060208201905081810360008301526141ab8161416f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061420e602683613544565b9150614219826141b2565b604082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142a0602483613544565b91506142ab82614244565b604082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614332602283613544565b915061433d826142d6565b604082019050919050565b6000602082019050818103600083015261436181614325565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006143c4602583613544565b91506143cf82614368565b604082019050919050565b600060208201905081810360008301526143f3816143b7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614456602383613544565b9150614461826143fa565b604082019050919050565b6000602082019050818103600083015261448581614449565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006144e8602283613544565b91506144f38261448c565b604082019050919050565b60006020820190508181036000830152614517816144db565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006145a0604983613544565b91506145ab8261451e565b606082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614632602683613544565b915061463d826145d6565b604082019050919050565b6000602082019050818103600083015261466181614625565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061469e601383613544565b91506146a982614668565b602082019050919050565b600060208201905081810360008301526146cd81614691565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614730602783613544565b915061473b826146d4565b604082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b60006147718261364e565b915061477c8361364e565b925082820390508181111561479457614793613c0c565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006147f6602683613544565b91506148018261479a565b604082019050919050565b60006020820190508181036000830152614825816147e9565b9050919050565b600081905092915050565b50565b600061484760008361482c565b915061485282614837565b600082019050919050565b60006148688261483a565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148df81613622565b92915050565b6000602082840312156148fb576148fa6135eb565b5b6000614909848285016148d0565b91505092915050565b6000819050919050565b6000819050919050565b600061494161493c61493784614912565b61491c565b61364e565b9050919050565b61495181614926565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61498c81613610565b82525050565b600061499e8383614983565b60208301905092915050565b6000602082019050919050565b60006149c282614957565b6149cc8185614962565b93506149d783614973565b8060005b83811015614a085781516149ef8882614992565b97506149fa836149aa565b9250506001810190506149db565b5085935050505092915050565b600060a082019050614a2a60008301886136fa565b614a376020830187614948565b8181036040830152614a4981866149b7565b9050614a5860608301856138c4565b614a6560808301846136fa565b969550505050505056fea26469706673582212200e3b777dfd07aa93d099666164a87008d64034af88b1cb7615a5c1c81af8637c64736f6c63430008130033

Deployed Bytecode Sourcemap

25394:21308:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10992:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13225:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12112:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13897:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30307:163;;;;;;;;;;;;;:::i;:::-;;11954:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37943:388;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14831:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26018:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32726:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33712:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32303:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12283:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22331:103;;;;;;;;;;;;;:::i;:::-;;37168:355;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21680:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11211:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36636:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35589:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35099:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34401:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15620:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12639:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36275:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31514:553;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30625:132;;;;;;;;;;;;;:::i;:::-;;12902:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40269:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;30897:152;;;;;;;;;;;;;:::i;:::-;;25517:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22589:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39237:572;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;38563:190;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;33230:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10992:100;11046:13;11079:5;11072:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10992:100;:::o;13225:194::-;13333:4;13350:39;13359:12;:10;:12::i;:::-;13373:7;13382:6;13350:8;:39::i;:::-;13407:4;13400:11;;13225:194;;;;:::o;12112:108::-;12173:7;12200:12;;12193:19;;12112:108;:::o;13897:529::-;14037:4;14054:36;14064:6;14072:9;14083:6;14054:9;:36::i;:::-;14103:24;14130:11;:19;14142:6;14130:19;;;;;;;;;;;;;;;:33;14150:12;:10;:12::i;:::-;14130:33;;;;;;;;;;;;;;;;14103:60;;14216:6;14196:16;:26;;14174:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14326:57;14335:6;14343:12;:10;:12::i;:::-;14376:6;14357:16;:25;14326:8;:57::i;:::-;14414:4;14407:11;;;13897:529;;;;;:::o;30307:163::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30378:4:::1;30361:14;;:21;;;;;;;;;;;;;;;;;;30411:4;30393:15;;:22;;;;;;;;;;;;;;;;;;30446:15;30431:31;;;;;;;;;;30307:163::o:0;11954:93::-;12012:5;12037:2;12030:9;;11954:93;:::o;37943:388::-;38030:19;38064:26;38105:18;38138:14;38197:13;;;;;;;;;;;38180:30;;38245:20;;;;;;;;;;;38221:44;;38289:9;;38276:22;;38318:5;;38309:14;;37943:388;;;;:::o;14831:290::-;14944:4;14961:130;14984:12;:10;:12::i;:::-;15011:7;15070:10;15033:11;:25;15045:12;:10;:12::i;:::-;15033:25;;;;;;;;;;;;;;;:34;15059:7;15033:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14961:8;:130::i;:::-;15109:4;15102:11;;14831:290;;;;:::o;26018:34::-;;;;;;;;;;;;;:::o;32726:236::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32815:1:::1;32805:6;:11;;32797:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32907:4;32890:13;:11;:13::i;:::-;32881:6;:22;;;;:::i;:::-;32880:31;;;;:::i;:::-;32868:9;:43;;;;32927:27;32944:9;;32927:27;;;;;;:::i;:::-;;;;;;;;32726:236:::0;:::o;33712:400::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33845:13:::1;33827:15;:31;;;;33885:7;33869:13;:23;;;;33935:13;;33917:15;;:31;;;;:::i;:::-;33903:11;:45;;;;33982:3;33967:11;;:18;;33959:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34046:58;34060:11;;34073:15;;34090:13;;34046:58;;;;;;;;:::i;:::-;;;;;;;;33712:400:::0;;:::o;32303:216::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32388:1:::1;32378:6;:11;;32370:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32472:4;32455:13;:11;:13::i;:::-;32446:6;:22;;;;:::i;:::-;32445:31;;;;:::i;:::-;32437:5;:39;;;;32492:19;32505:5;;32492:19;;;;;;:::i;:::-;;;;;;;;32303:216:::0;:::o;12283:143::-;12373:7;12400:9;:18;12410:7;12400:18;;;;;;;;;;;;;;;;12393:25;;12283:143;;;:::o;22331:103::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22396:30:::1;22423:1;22396:18;:30::i;:::-;22331:103::o:0;37168:355::-;37258:21;37294:25;37334;37406:15;;;;;;;;;;;37387:34;;37452:16;;37432:36;;37499:16;;37479:36;;37168:355;;;:::o;21680:87::-;21726:7;21753:6;;;;;;;;;;;21746:13;;21680:87;:::o;11211:104::-;11267:13;11300:7;11293:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11211:104;:::o;36636:173::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36751:13:::1;;;;;;;;;;;36719:46;;36740:9;36719:46;;;;;;;;;;;;36792:9;36776:13;;:25;;;;;;;;;;;;;;;;;;36636:173:::0;:::o;35589:300::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35735:7:::1;35727:15;;:4;:15;;::::0;35705:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35840:41;35869:4;35875:5;35840:28;:41::i;:::-;35589:300:::0;;:::o;35099:179::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35212:8:::1;35183:17;:26;35201:7;35183:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;35252:7;35236:34;;;35261:8;35236:34;;;;;;:::i;:::-;;;;;;;;35099:179:::0;;:::o;34401:449::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34536:13:::1;34517:16;:32;;;;34577:7;34560:14;:24;;;;34629:14;;34610:16;;:33;;;;:::i;:::-;34595:12;:48;;;;34692:3;34676:12;;:19;;34654:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;34780:62;34795:12;;34809:16;;34827:14;;34780:62;;;;;;;;:::i;:::-;;;;;;;;34401:449:::0;;:::o;15620:475::-;15738:4;15755:24;15782:11;:25;15794:12;:10;:12::i;:::-;15782:25;;;;;;;;;;;;;;;:34;15808:7;15782:34;;;;;;;;;;;;;;;;15755:61;;15869:15;15849:16;:35;;15827:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15985:67;15994:12;:10;:12::i;:::-;16008:7;16036:15;16017:16;:34;15985:8;:67::i;:::-;16083:4;16076:11;;;15620:475;;;;:::o;12639:200::-;12750:4;12767:42;12777:12;:10;:12::i;:::-;12791:9;12802:6;12767:9;:42::i;:::-;12827:4;12820:11;;12639:200;;;;:::o;36275:181::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36394:15:::1;;;;;;;;;;;36360:50;;36383:9;36360:50;;;;;;;;;;;;36439:9;36421:15;;:27;;;;;;;;;;;;;;;;;;36275:181:::0;:::o;31514:553::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31680:1:::1;31672:4;:9;;31650:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31788:4;31780;:12;;31772:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31870:8;31852:15;;:26;;;;;;;;;;;;;;;;;;31933:5;31925:4;31909:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31908:30;;;;:::i;:::-;31889:16;:49;;;;31993:5;31985:4;31969:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31968:30;;;;:::i;:::-;31949:16;:49;;;;32014:45;32038:8;32048:4;32054;32014:45;;;;;;;;:::i;:::-;;;;;;;;31514:553:::0;;;:::o;30625:132::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30698:5:::1;30682:13;;:21;;;;;;;;;;;;;;;;;;30733:15;30719:30;;;;;;;;;;30625:132::o:0;12902:176::-;13016:7;13043:11;:18;13055:5;13043:18;;;;;;;;;;;;;;;:27;13062:7;13043:27;;;;;;;;;;;;;;;;13036:34;;12902:176;;;;:::o;40269:448::-;40389:23;40427:25;40467:31;40547:17;:26;40565:7;40547:26;;;;;;;;;;;;;;;;;;;;;;;;;40526:47;;40607:19;:28;40627:7;40607:28;;;;;;;;;;;;;;;;;;;;;;;;;40584:51;;40675:25;:34;40701:7;40675:34;;;;;;;;;;;;;;;;;;;;;;;;;40646:63;;40269:448;;;;;:::o;30897:152::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30982:5:::1;30959:20;;:28;;;;;;;;;;;;;;;;;;31025:15;31003:38;;;;;;;;;;30897:152::o:0;25517:32::-;;;:::o;22589:238::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22712:1:::1;22692:22;;:8;:22;;::::0;22670:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22791:28;22810:8;22791:18;:28::i;:::-;22589:238:::0;:::o;39237:572::-;39322:20;39357:24;39396:22;39433:21;39469:25;39509:23;39575:11;;39560:26;;39616:15;;39597:34;;39659:13;;39642:30;;39699:12;;39683:28;;39742:16;;39722:36;;39787:14;;39769:32;;39237:572;;;;;;:::o;38563:190::-;38640:24;38666:22;38714:15;;;;;;;;;;;38731:13;;;;;;;;;;;38706:39;;;;38563:190;;:::o;33230:195::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33366:4:::1;33336:19;:27;33356:6;33336:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33404:6;33386:31;;;33412:4;33386:31;;;;;;:::i;:::-;;;;;;;;33230:195:::0;;:::o;9998:98::-;10051:7;10078:10;10071:17;;9998:98;:::o;19403:380::-;19556:1;19539:19;;:5;:19;;;19531:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19637:1;19618:21;;:7;:21;;;19610:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19721:6;19691:11;:18;19703:5;19691:18;;;;;;;;;;;;;;;:27;19710:7;19691:27;;;;;;;;;;;;;;;:36;;;;19759:7;19743:32;;19752:5;19743:32;;;19768:6;19743:32;;;;;;:::i;:::-;;;;;;;;19403:380;;;:::o;40725:4415::-;40873:1;40857:18;;:4;:18;;;40849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40950:1;40936:16;;:2;:16;;;40928:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41019:1;41009:6;:11;41005:93;;41037:28;41053:4;41059:2;41063:1;41037:15;:28::i;:::-;41080:7;;41005:93;41114:13;;;;;;;;;;;41110:2345;;;41174:7;:5;:7::i;:::-;41166:15;;:4;:15;;;;:49;;;;;41208:7;:5;:7::i;:::-;41202:13;;:2;:13;;;;41166:49;:86;;;;;41250:1;41236:16;;:2;:16;;;;41166:86;:128;;;;;41287:6;41273:21;;:2;:21;;;;41166:128;:158;;;;;41316:8;;;;;;;;;;;41315:9;41166:158;41144:2300;;;41364:14;;;;;;;;;;;41359:232;;41437:17;:23;41455:4;41437:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;41464:17;:21;41482:2;41464:21;;;;;;;;;;;;;;;;;;;;;;;;;41437:48;41403:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;41359:232;41747:20;;;;;;;;;;;41743:629;;;41828:7;:5;:7::i;:::-;41822:13;;:2;:13;;;;:66;;;;;41878:9;41864:24;;:2;:24;;;;41822:66;:117;;;;;41931:7;41917:22;;:2;:22;;;;41822:117;41792:561;;;42103:12;42028:28;:39;42057:9;42028:39;;;;;;;;;;;;;;;;:87;41990:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;42317:12;42275:28;:39;42304:9;42275:39;;;;;;;;;;;;;;;:54;;;;41792:561;41743:629;42446:25;:31;42472:4;42446:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;42482:19;:23;42502:2;42482:23;;;;;;;;;;;;;;;;;;;;;;;;;42481:24;42446:59;42420:1009;;;42592:5;;42582:6;:15;;42548:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;42770:9;;42753:13;42763:2;42753:9;:13::i;:::-;42744:6;:22;;;;:::i;:::-;:35;;42710:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42420:1009;;;42948:25;:29;42974:2;42948:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;42982:19;:25;43002:4;42982:25;;;;;;;;;;;;;;;;;;;;;;;;;42981:26;42948:59;42922:507;;;43094:5;;43084:6;:15;;43050:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42922:507;;;43221:19;:23;43241:2;43221:23;;;;;;;;;;;;;;;;;;;;;;;;;43216:213;;43329:9;;43312:13;43322:2;43312:9;:13::i;:::-;43303:6;:22;;;;:::i;:::-;:35;;43269:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43216:213;42922:507;42420:1009;41144:2300;41110:2345;43467:28;43498:24;43516:4;43498:9;:24::i;:::-;43467:55;;43535:12;43574:16;;43550:20;:40;;43535:55;;43621:7;:39;;;;;43645:15;;;;;;;;;;;43621:39;:65;;;;;43678:8;;;;;;;;;;;43677:9;43621:65;:114;;;;;43704:25;:31;43730:4;43704:31;;;;;;;;;;;;;;;;;;;;;;;;;43703:32;43621:114;:155;;;;;43753:17;:23;43771:4;43753:23;;;;;;;;;;;;;;;;;;;;;;;;;43752:24;43621:155;:194;;;;;43794:17;:21;43812:2;43794:21;;;;;;;;;;;;;;;;;;;;;;;;;43793:22;43621:194;43603:326;;;43853:4;43842:8;;:15;;;;;;;;;;;;;;;;;;43874:10;:8;:10::i;:::-;43912:5;43901:8;;:16;;;;;;;;;;;;;;;;;;43603:326;43941:12;43957:8;;;;;;;;;;;43956:9;43941:24;;44067:17;:23;44085:4;44067:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;44094:17;:21;44112:2;44094:21;;;;;;;;;;;;;;;;;;;;;;;;;44067:48;44063:96;;;44142:5;44132:15;;44063:96;44171:12;44276:7;44272:815;;;44328:25;:29;44354:2;44328:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;44376:1;44361:12;;:16;44328:49;44324:614;;;44405:33;44434:3;44405:24;44416:12;;44405:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;44398:40;;44503:12;;44485:14;;44478:4;:21;;;;:::i;:::-;44477:38;;;;:::i;:::-;44457:16;;:58;;;;;;;:::i;:::-;;;;;;;;44584:12;;44564:16;;44557:4;:23;;;;:::i;:::-;44556:40;;;;:::i;:::-;44534:18;;:62;;;;;;;:::i;:::-;;;;;;;;44324:614;;;44658:25;:31;44684:4;44658:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;44707:1;44693:11;;:15;44658:50;44654:284;;;44736:32;44764:3;44736:23;44747:11;;44736:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;44729:39;;44832:11;;44815:13;;44808:4;:20;;;;:::i;:::-;44807:36;;;;:::i;:::-;44787:16;;:56;;;;;;;:::i;:::-;;;;;;;;44911:11;;44892:15;;44885:4;:22;;;;:::i;:::-;44884:38;;;;:::i;:::-;44862:18;;:60;;;;;;;:::i;:::-;;;;;;;;44654:284;44324:614;44965:1;44958:4;:8;44954:91;;;44987:42;45003:4;45017;45024;44987:15;:42::i;:::-;44954:91;45071:4;45061:14;;;;;:::i;:::-;;;44272:815;45099:33;45115:4;45121:2;45125:6;45099:15;:33::i;:::-;40838:4302;;;;40725:4415;;;;:::o;22987:191::-;23061:16;23080:6;;;;;;;;;;;23061:25;;23106:8;23097:6;;:17;;;;;;;;;;;;;;;;;;23161:8;23130:40;;23151:8;23130:40;;;;;;;;;;;;23050:128;22987:191;:::o;35897:188::-;36014:5;35980:25;:31;36006:4;35980:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36071:5;36037:40;;36065:4;36037:40;;;;;;;;;;;;35897:188;;:::o;16585:770::-;16743:1;16725:20;;:6;:20;;;16717:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16827:1;16806:23;;:9;:23;;;16798:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16882:47;16903:6;16911:9;16922:6;16882:20;:47::i;:::-;16942:21;16966:9;:17;16976:6;16966:17;;;;;;;;;;;;;;;;16942:41;;17033:6;17016:13;:23;;16994:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17177:6;17161:13;:22;17141:9;:17;17151:6;17141:17;;;;;;;;;;;;;;;:42;;;;17229:6;17205:9;:20;17215:9;17205:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17270:9;17253:35;;17262:6;17253:35;;;17281:6;17253:35;;;;;;:::i;:::-;;;;;;;;17301:46;17321:6;17329:9;17340:6;17301:19;:46::i;:::-;16706:649;16585:770;;;:::o;45727:972::-;45766:23;45792:24;45810:4;45792:9;:24::i;:::-;45766:50;;45827:25;45855:15;45827:43;;45881:12;45929:1;45910:15;:20;45906:59;;45947:7;;;;;45906:59;45999:16;;45981:15;:34;45977:101;;;46050:16;;46032:34;;45977:101;46090:26;46119:15;46090:44;;46147:25;46175:21;46147:49;;46209:36;46226:18;46209:16;:36::i;:::-;46258:18;46279:44;46305:17;46279:21;:25;;:44;;;;:::i;:::-;46258:65;;46336:17;46356:79;46407:17;46356:32;46371:16;;46356:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;46336:99;;46469:1;46448:18;:22;;;;46500:1;46481:16;:20;;;;46536:13;;;;;;;;;;;46528:27;;46563:9;46528:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46514:63;;;;;46612:15;;;;;;;;;;;46604:29;;46655:21;46604:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46590:101;;;;;45755:944;;;;;;;45727:972;:::o;3357:98::-;3415:7;3446:1;3442;:5;;;;:::i;:::-;3435:12;;3357:98;;;;:::o;3756:::-;3814:7;3845:1;3841;:5;;;;:::i;:::-;3834:12;;3756:98;;;;:::o;20383:125::-;;;;:::o;21112:124::-;;;;:::o;45148:571::-;45274:21;45312:1;45298:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45274:40;;45343:4;45325;45330:1;45325:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45369:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45359:4;45364:1;45359:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;45398:56;45415:4;45430:9;45442:11;45398:8;:56::i;:::-;45493:9;:60;;;45568:11;45594:1;45638:4;45665;45685:15;45493:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45203:516;45148:571;:::o;3000:98::-;3058:7;3089:1;3085;:5;;;;:::i;:::-;3078:12;;3000:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:529::-;5018:4;5056:3;5045:9;5041:19;5033:27;;5070:65;5132:1;5121:9;5117:17;5108:6;5070:65;:::i;:::-;5145:66;5207:2;5196:9;5192:18;5183:6;5145:66;:::i;:::-;5221:72;5289:2;5278:9;5274:18;5265:6;5221:72;:::i;:::-;5303;5371:2;5360:9;5356:18;5347:6;5303:72;:::i;:::-;4853:529;;;;;;;:::o;5388:329::-;5447:6;5496:2;5484:9;5475:7;5471:23;5467:32;5464:119;;;5502:79;;:::i;:::-;5464:119;5622:1;5647:53;5692:7;5683:6;5672:9;5668:22;5647:53;:::i;:::-;5637:63;;5593:117;5388:329;;;;:::o;5723:474::-;5791:6;5799;5848:2;5836:9;5827:7;5823:23;5819:32;5816:119;;;5854:79;;:::i;:::-;5816:119;5974:1;5999:53;6044:7;6035:6;6024:9;6020:22;5999:53;:::i;:::-;5989:63;;5945:117;6101:2;6127:53;6172:7;6163:6;6152:9;6148:22;6127:53;:::i;:::-;6117:63;;6072:118;5723:474;;;;;:::o;6203:329::-;6262:6;6311:2;6299:9;6290:7;6286:23;6282:32;6279:119;;;6317:79;;:::i;:::-;6279:119;6437:1;6462:53;6507:7;6498:6;6487:9;6483:22;6462:53;:::i;:::-;6452:63;;6408:117;6203:329;;;;:::o;6538:430::-;6681:4;6719:2;6708:9;6704:18;6696:26;;6732:65;6794:1;6783:9;6779:17;6770:6;6732:65;:::i;:::-;6807:72;6875:2;6864:9;6860:18;6851:6;6807:72;:::i;:::-;6889;6957:2;6946:9;6942:18;6933:6;6889:72;:::i;:::-;6538:430;;;;;;:::o;6974:118::-;7061:24;7079:5;7061:24;:::i;:::-;7056:3;7049:37;6974:118;;:::o;7098:222::-;7191:4;7229:2;7218:9;7214:18;7206:26;;7242:71;7310:1;7299:9;7295:17;7286:6;7242:71;:::i;:::-;7098:222;;;;:::o;7326:116::-;7396:21;7411:5;7396:21;:::i;:::-;7389:5;7386:32;7376:60;;7432:1;7429;7422:12;7376:60;7326:116;:::o;7448:133::-;7491:5;7529:6;7516:20;7507:29;;7545:30;7569:5;7545:30;:::i;:::-;7448:133;;;;:::o;7587:468::-;7652:6;7660;7709:2;7697:9;7688:7;7684:23;7680:32;7677:119;;;7715:79;;:::i;:::-;7677:119;7835:1;7860:53;7905:7;7896:6;7885:9;7881:22;7860:53;:::i;:::-;7850:63;;7806:117;7962:2;7988:50;8030:7;8021:6;8010:9;8006:22;7988:50;:::i;:::-;7978:60;;7933:115;7587:468;;;;;:::o;8061:613::-;8135:6;8143;8151;8200:2;8188:9;8179:7;8175:23;8171:32;8168:119;;;8206:79;;:::i;:::-;8168:119;8326:1;8351:50;8393:7;8384:6;8373:9;8369:22;8351:50;:::i;:::-;8341:60;;8297:114;8450:2;8476:53;8521:7;8512:6;8501:9;8497:22;8476:53;:::i;:::-;8466:63;;8421:118;8578:2;8604:53;8649:7;8640:6;8629:9;8625:22;8604:53;:::i;:::-;8594:63;;8549:118;8061:613;;;;;:::o;8680:474::-;8748:6;8756;8805:2;8793:9;8784:7;8780:23;8776:32;8773:119;;;8811:79;;:::i;:::-;8773:119;8931:1;8956:53;9001:7;8992:6;8981:9;8977:22;8956:53;:::i;:::-;8946:63;;8902:117;9058:2;9084:53;9129:7;9120:6;9109:9;9105:22;9084:53;:::i;:::-;9074:63;;9029:118;8680:474;;;;;:::o;9160:406::-;9291:4;9329:2;9318:9;9314:18;9306:26;;9342:65;9404:1;9393:9;9389:17;9380:6;9342:65;:::i;:::-;9417:66;9479:2;9468:9;9464:18;9455:6;9417:66;:::i;:::-;9493;9555:2;9544:9;9540:18;9531:6;9493:66;:::i;:::-;9160:406;;;;;;:::o;9572:775::-;9805:4;9843:3;9832:9;9828:19;9820:27;;9857:71;9925:1;9914:9;9910:17;9901:6;9857:71;:::i;:::-;9938:72;10006:2;9995:9;9991:18;9982:6;9938:72;:::i;:::-;10020;10088:2;10077:9;10073:18;10064:6;10020:72;:::i;:::-;10102;10170:2;10159:9;10155:18;10146:6;10102:72;:::i;:::-;10184:73;10252:3;10241:9;10237:19;10228:6;10184:73;:::i;:::-;10267;10335:3;10324:9;10320:19;10311:6;10267:73;:::i;:::-;9572:775;;;;;;;;;:::o;10353:332::-;10474:4;10512:2;10501:9;10497:18;10489:26;;10525:71;10593:1;10582:9;10578:17;10569:6;10525:71;:::i;:::-;10606:72;10674:2;10663:9;10659:18;10650:6;10606:72;:::i;:::-;10353:332;;;;;:::o;10691:180::-;10739:77;10736:1;10729:88;10836:4;10833:1;10826:15;10860:4;10857:1;10850:15;10877:320;10921:6;10958:1;10952:4;10948:12;10938:22;;11005:1;10999:4;10995:12;11026:18;11016:81;;11082:4;11074:6;11070:17;11060:27;;11016:81;11144:2;11136:6;11133:14;11113:18;11110:38;11107:84;;11163:18;;:::i;:::-;11107:84;10928:269;10877:320;;;:::o;11203:227::-;11343:34;11339:1;11331:6;11327:14;11320:58;11412:10;11407:2;11399:6;11395:15;11388:35;11203:227;:::o;11436:366::-;11578:3;11599:67;11663:2;11658:3;11599:67;:::i;:::-;11592:74;;11675:93;11764:3;11675:93;:::i;:::-;11793:2;11788:3;11784:12;11777:19;;11436:366;;;:::o;11808:419::-;11974:4;12012:2;12001:9;11997:18;11989:26;;12061:9;12055:4;12051:20;12047:1;12036:9;12032:17;12025:47;12089:131;12215:4;12089:131;:::i;:::-;12081:139;;11808:419;;;:::o;12233:182::-;12373:34;12369:1;12361:6;12357:14;12350:58;12233:182;:::o;12421:366::-;12563:3;12584:67;12648:2;12643:3;12584:67;:::i;:::-;12577:74;;12660:93;12749:3;12660:93;:::i;:::-;12778:2;12773:3;12769:12;12762:19;;12421:366;;;:::o;12793:419::-;12959:4;12997:2;12986:9;12982:18;12974:26;;13046:9;13040:4;13036:20;13032:1;13021:9;13017:17;13010:47;13074:131;13200:4;13074:131;:::i;:::-;13066:139;;12793:419;;;:::o;13218:180::-;13266:77;13263:1;13256:88;13363:4;13360:1;13353:15;13387:4;13384:1;13377:15;13404:191;13444:3;13463:20;13481:1;13463:20;:::i;:::-;13458:25;;13497:20;13515:1;13497:20;:::i;:::-;13492:25;;13540:1;13537;13533:9;13526:16;;13561:3;13558:1;13555:10;13552:36;;;13568:18;;:::i;:::-;13552:36;13404:191;;;;:::o;13601:223::-;13741:34;13737:1;13729:6;13725:14;13718:58;13810:6;13805:2;13797:6;13793:15;13786:31;13601:223;:::o;13830:366::-;13972:3;13993:67;14057:2;14052:3;13993:67;:::i;:::-;13986:74;;14069:93;14158:3;14069:93;:::i;:::-;14187:2;14182:3;14178:12;14171:19;;13830:366;;;:::o;14202:419::-;14368:4;14406:2;14395:9;14391:18;14383:26;;14455:9;14449:4;14445:20;14441:1;14430:9;14426:17;14419:47;14483:131;14609:4;14483:131;:::i;:::-;14475:139;;14202:419;;;:::o;14627:410::-;14667:7;14690:20;14708:1;14690:20;:::i;:::-;14685:25;;14724:20;14742:1;14724:20;:::i;:::-;14719:25;;14779:1;14776;14772:9;14801:30;14819:11;14801:30;:::i;:::-;14790:41;;14980:1;14971:7;14967:15;14964:1;14961:22;14941:1;14934:9;14914:83;14891:139;;15010:18;;:::i;:::-;14891:139;14675:362;14627:410;;;;:::o;15043:180::-;15091:77;15088:1;15081:88;15188:4;15185:1;15178:15;15212:4;15209:1;15202:15;15229:185;15269:1;15286:20;15304:1;15286:20;:::i;:::-;15281:25;;15320:20;15338:1;15320:20;:::i;:::-;15315:25;;15359:1;15349:35;;15364:18;;:::i;:::-;15349:35;15406:1;15403;15399:9;15394:14;;15229:185;;;;:::o;15420:227::-;15560:34;15556:1;15548:6;15544:14;15537:58;15629:10;15624:2;15616:6;15612:15;15605:35;15420:227;:::o;15653:366::-;15795:3;15816:67;15880:2;15875:3;15816:67;:::i;:::-;15809:74;;15892:93;15981:3;15892:93;:::i;:::-;16010:2;16005:3;16001:12;15994:19;;15653:366;;;:::o;16025:419::-;16191:4;16229:2;16218:9;16214:18;16206:26;;16278:9;16272:4;16268:20;16264:1;16253:9;16249:17;16242:47;16306:131;16432:4;16306:131;:::i;:::-;16298:139;;16025:419;;;:::o;16450:442::-;16599:4;16637:2;16626:9;16622:18;16614:26;;16650:71;16718:1;16707:9;16703:17;16694:6;16650:71;:::i;:::-;16731:72;16799:2;16788:9;16784:18;16775:6;16731:72;:::i;:::-;16813;16881:2;16870:9;16866:18;16857:6;16813:72;:::i;:::-;16450:442;;;;;;:::o;16898:182::-;17038:34;17034:1;17026:6;17022:14;17015:58;16898:182;:::o;17086:366::-;17228:3;17249:67;17313:2;17308:3;17249:67;:::i;:::-;17242:74;;17325:93;17414:3;17325:93;:::i;:::-;17443:2;17438:3;17434:12;17427:19;;17086:366;;;:::o;17458:419::-;17624:4;17662:2;17651:9;17647:18;17639:26;;17711:9;17705:4;17701:20;17697:1;17686:9;17682:17;17675:47;17739:131;17865:4;17739:131;:::i;:::-;17731:139;;17458:419;;;:::o;17883:244::-;18023:34;18019:1;18011:6;18007:14;18000:58;18092:27;18087:2;18079:6;18075:15;18068:52;17883:244;:::o;18133:366::-;18275:3;18296:67;18360:2;18355:3;18296:67;:::i;:::-;18289:74;;18372:93;18461:3;18372:93;:::i;:::-;18490:2;18485:3;18481:12;18474:19;;18133:366;;;:::o;18505:419::-;18671:4;18709:2;18698:9;18694:18;18686:26;;18758:9;18752:4;18748:20;18744:1;18733:9;18729:17;18722:47;18786:131;18912:4;18786:131;:::i;:::-;18778:139;;18505:419;;;:::o;18930:228::-;19070:34;19066:1;19058:6;19054:14;19047:58;19139:11;19134:2;19126:6;19122:15;19115:36;18930:228;:::o;19164:366::-;19306:3;19327:67;19391:2;19386:3;19327:67;:::i;:::-;19320:74;;19403:93;19492:3;19403:93;:::i;:::-;19521:2;19516:3;19512:12;19505:19;;19164:366;;;:::o;19536:419::-;19702:4;19740:2;19729:9;19725:18;19717:26;;19789:9;19783:4;19779:20;19775:1;19764:9;19760:17;19753:47;19817:131;19943:4;19817:131;:::i;:::-;19809:139;;19536:419;;;:::o;19961:224::-;20101:34;20097:1;20089:6;20085:14;20078:58;20170:7;20165:2;20157:6;20153:15;20146:32;19961:224;:::o;20191:366::-;20333:3;20354:67;20418:2;20413:3;20354:67;:::i;:::-;20347:74;;20430:93;20519:3;20430:93;:::i;:::-;20548:2;20543:3;20539:12;20532:19;;20191:366;;;:::o;20563:419::-;20729:4;20767:2;20756:9;20752:18;20744:26;;20816:9;20810:4;20806:20;20802:1;20791:9;20787:17;20780:47;20844:131;20970:4;20844:131;:::i;:::-;20836:139;;20563:419;;;:::o;20988:239::-;21128:34;21124:1;21116:6;21112:14;21105:58;21197:22;21192:2;21184:6;21180:15;21173:47;20988:239;:::o;21233:366::-;21375:3;21396:67;21460:2;21455:3;21396:67;:::i;:::-;21389:74;;21472:93;21561:3;21472:93;:::i;:::-;21590:2;21585:3;21581:12;21574:19;;21233:366;;;:::o;21605:419::-;21771:4;21809:2;21798:9;21794:18;21786:26;;21858:9;21852:4;21848:20;21844:1;21833:9;21829:17;21822:47;21886:131;22012:4;21886:131;:::i;:::-;21878:139;;21605:419;;;:::o;22030:229::-;22170:34;22166:1;22158:6;22154:14;22147:58;22239:12;22234:2;22226:6;22222:15;22215:37;22030:229;:::o;22265:366::-;22407:3;22428:67;22492:2;22487:3;22428:67;:::i;:::-;22421:74;;22504:93;22593:3;22504:93;:::i;:::-;22622:2;22617:3;22613:12;22606:19;;22265:366;;;:::o;22637:419::-;22803:4;22841:2;22830:9;22826:18;22818:26;;22890:9;22884:4;22880:20;22876:1;22865:9;22861:17;22854:47;22918:131;23044:4;22918:131;:::i;:::-;22910:139;;22637:419;;;:::o;23062:225::-;23202:34;23198:1;23190:6;23186:14;23179:58;23271:8;23266:2;23258:6;23254:15;23247:33;23062:225;:::o;23293:366::-;23435:3;23456:67;23520:2;23515:3;23456:67;:::i;:::-;23449:74;;23532:93;23621:3;23532:93;:::i;:::-;23650:2;23645:3;23641:12;23634:19;;23293:366;;;:::o;23665:419::-;23831:4;23869:2;23858:9;23854:18;23846:26;;23918:9;23912:4;23908:20;23904:1;23893:9;23889:17;23882:47;23946:131;24072:4;23946:131;:::i;:::-;23938:139;;23665:419;;;:::o;24090:223::-;24230:34;24226:1;24218:6;24214:14;24207:58;24299:6;24294:2;24286:6;24282:15;24275:31;24090:223;:::o;24319:366::-;24461:3;24482:67;24546:2;24541:3;24482:67;:::i;:::-;24475:74;;24558:93;24647:3;24558:93;:::i;:::-;24676:2;24671:3;24667:12;24660:19;;24319:366;;;:::o;24691:419::-;24857:4;24895:2;24884:9;24880:18;24872:26;;24944:9;24938:4;24934:20;24930:1;24919:9;24915:17;24908:47;24972:131;25098:4;24972:131;:::i;:::-;24964:139;;24691:419;;;:::o;25116:221::-;25256:34;25252:1;25244:6;25240:14;25233:58;25325:4;25320:2;25312:6;25308:15;25301:29;25116:221;:::o;25343:366::-;25485:3;25506:67;25570:2;25565:3;25506:67;:::i;:::-;25499:74;;25582:93;25671:3;25582:93;:::i;:::-;25700:2;25695:3;25691:12;25684:19;;25343:366;;;:::o;25715:419::-;25881:4;25919:2;25908:9;25904:18;25896:26;;25968:9;25962:4;25958:20;25954:1;25943:9;25939:17;25932:47;25996:131;26122:4;25996:131;:::i;:::-;25988:139;;25715:419;;;:::o;26140:224::-;26280:34;26276:1;26268:6;26264:14;26257:58;26349:7;26344:2;26336:6;26332:15;26325:32;26140:224;:::o;26370:366::-;26512:3;26533:67;26597:2;26592:3;26533:67;:::i;:::-;26526:74;;26609:93;26698:3;26609:93;:::i;:::-;26727:2;26722:3;26718:12;26711:19;;26370:366;;;:::o;26742:419::-;26908:4;26946:2;26935:9;26931:18;26923:26;;26995:9;26989:4;26985:20;26981:1;26970:9;26966:17;26959:47;27023:131;27149:4;27023:131;:::i;:::-;27015:139;;26742:419;;;:::o;27167:222::-;27307:34;27303:1;27295:6;27291:14;27284:58;27376:5;27371:2;27363:6;27359:15;27352:30;27167:222;:::o;27395:366::-;27537:3;27558:67;27622:2;27617:3;27558:67;:::i;:::-;27551:74;;27634:93;27723:3;27634:93;:::i;:::-;27752:2;27747:3;27743:12;27736:19;;27395:366;;;:::o;27767:419::-;27933:4;27971:2;27960:9;27956:18;27948:26;;28020:9;28014:4;28010:20;28006:1;27995:9;27991:17;27984:47;28048:131;28174:4;28048:131;:::i;:::-;28040:139;;27767:419;;;:::o;28192:221::-;28332:34;28328:1;28320:6;28316:14;28309:58;28401:4;28396:2;28388:6;28384:15;28377:29;28192:221;:::o;28419:366::-;28561:3;28582:67;28646:2;28641:3;28582:67;:::i;:::-;28575:74;;28658:93;28747:3;28658:93;:::i;:::-;28776:2;28771:3;28767:12;28760:19;;28419:366;;;:::o;28791:419::-;28957:4;28995:2;28984:9;28980:18;28972:26;;29044:9;29038:4;29034:20;29030:1;29019:9;29015:17;29008:47;29072:131;29198:4;29072:131;:::i;:::-;29064:139;;28791:419;;;:::o;29216:297::-;29356:34;29352:1;29344:6;29340:14;29333:58;29425:34;29420:2;29412:6;29408:15;29401:59;29494:11;29489:2;29481:6;29477:15;29470:36;29216:297;:::o;29519:366::-;29661:3;29682:67;29746:2;29741:3;29682:67;:::i;:::-;29675:74;;29758:93;29847:3;29758:93;:::i;:::-;29876:2;29871:3;29867:12;29860:19;;29519:366;;;:::o;29891:419::-;30057:4;30095:2;30084:9;30080:18;30072:26;;30144:9;30138:4;30134:20;30130:1;30119:9;30115:17;30108:47;30172:131;30298:4;30172:131;:::i;:::-;30164:139;;29891:419;;;:::o;30316:225::-;30456:34;30452:1;30444:6;30440:14;30433:58;30525:8;30520:2;30512:6;30508:15;30501:33;30316:225;:::o;30547:366::-;30689:3;30710:67;30774:2;30769:3;30710:67;:::i;:::-;30703:74;;30786:93;30875:3;30786:93;:::i;:::-;30904:2;30899:3;30895:12;30888:19;;30547:366;;;:::o;30919:419::-;31085:4;31123:2;31112:9;31108:18;31100:26;;31172:9;31166:4;31162:20;31158:1;31147:9;31143:17;31136:47;31200:131;31326:4;31200:131;:::i;:::-;31192:139;;30919:419;;;:::o;31344:169::-;31484:21;31480:1;31472:6;31468:14;31461:45;31344:169;:::o;31519:366::-;31661:3;31682:67;31746:2;31741:3;31682:67;:::i;:::-;31675:74;;31758:93;31847:3;31758:93;:::i;:::-;31876:2;31871:3;31867:12;31860:19;;31519:366;;;:::o;31891:419::-;32057:4;32095:2;32084:9;32080:18;32072:26;;32144:9;32138:4;32134:20;32130:1;32119:9;32115:17;32108:47;32172:131;32298:4;32172:131;:::i;:::-;32164:139;;31891:419;;;:::o;32316:226::-;32456:34;32452:1;32444:6;32440:14;32433:58;32525:9;32520:2;32512:6;32508:15;32501:34;32316:226;:::o;32548:366::-;32690:3;32711:67;32775:2;32770:3;32711:67;:::i;:::-;32704:74;;32787:93;32876:3;32787:93;:::i;:::-;32905:2;32900:3;32896:12;32889:19;;32548:366;;;:::o;32920:419::-;33086:4;33124:2;33113:9;33109:18;33101:26;;33173:9;33167:4;33163:20;33159:1;33148:9;33144:17;33137:47;33201:131;33327:4;33201:131;:::i;:::-;33193:139;;32920:419;;;:::o;33345:194::-;33385:4;33405:20;33423:1;33405:20;:::i;:::-;33400:25;;33439:20;33457:1;33439:20;:::i;:::-;33434:25;;33483:1;33480;33476:9;33468:17;;33507:1;33501:4;33498:11;33495:37;;;33512:18;;:::i;:::-;33495:37;33345:194;;;;:::o;33545:225::-;33685:34;33681:1;33673:6;33669:14;33662:58;33754:8;33749:2;33741:6;33737:15;33730:33;33545:225;:::o;33776:366::-;33918:3;33939:67;34003:2;33998:3;33939:67;:::i;:::-;33932:74;;34015:93;34104:3;34015:93;:::i;:::-;34133:2;34128:3;34124:12;34117:19;;33776:366;;;:::o;34148:419::-;34314:4;34352:2;34341:9;34337:18;34329:26;;34401:9;34395:4;34391:20;34387:1;34376:9;34372:17;34365:47;34429:131;34555:4;34429:131;:::i;:::-;34421:139;;34148:419;;;:::o;34573:147::-;34674:11;34711:3;34696:18;;34573:147;;;;:::o;34726:114::-;;:::o;34846:398::-;35005:3;35026:83;35107:1;35102:3;35026:83;:::i;:::-;35019:90;;35118:93;35207:3;35118:93;:::i;:::-;35236:1;35231:3;35227:11;35220:18;;34846:398;;;:::o;35250:379::-;35434:3;35456:147;35599:3;35456:147;:::i;:::-;35449:154;;35620:3;35613:10;;35250:379;;;:::o;35635:180::-;35683:77;35680:1;35673:88;35780:4;35777:1;35770:15;35804:4;35801:1;35794:15;35821:180;35869:77;35866:1;35859:88;35966:4;35963:1;35956:15;35990:4;35987:1;35980:15;36007:143;36064:5;36095:6;36089:13;36080:22;;36111:33;36138:5;36111:33;:::i;:::-;36007:143;;;;:::o;36156:351::-;36226:6;36275:2;36263:9;36254:7;36250:23;36246:32;36243:119;;;36281:79;;:::i;:::-;36243:119;36401:1;36426:64;36482:7;36473:6;36462:9;36458:22;36426:64;:::i;:::-;36416:74;;36372:128;36156:351;;;;:::o;36513:85::-;36558:7;36587:5;36576:16;;36513:85;;;:::o;36604:60::-;36632:3;36653:5;36646:12;;36604:60;;;:::o;36670:158::-;36728:9;36761:61;36779:42;36788:32;36814:5;36788:32;:::i;:::-;36779:42;:::i;:::-;36761:61;:::i;:::-;36748:74;;36670:158;;;:::o;36834:147::-;36929:45;36968:5;36929:45;:::i;:::-;36924:3;36917:58;36834:147;;:::o;36987:114::-;37054:6;37088:5;37082:12;37072:22;;36987:114;;;:::o;37107:184::-;37206:11;37240:6;37235:3;37228:19;37280:4;37275:3;37271:14;37256:29;;37107:184;;;;:::o;37297:132::-;37364:4;37387:3;37379:11;;37417:4;37412:3;37408:14;37400:22;;37297:132;;;:::o;37435:108::-;37512:24;37530:5;37512:24;:::i;:::-;37507:3;37500:37;37435:108;;:::o;37549:179::-;37618:10;37639:46;37681:3;37673:6;37639:46;:::i;:::-;37717:4;37712:3;37708:14;37694:28;;37549:179;;;;:::o;37734:113::-;37804:4;37836;37831:3;37827:14;37819:22;;37734:113;;;:::o;37883:732::-;38002:3;38031:54;38079:5;38031:54;:::i;:::-;38101:86;38180:6;38175:3;38101:86;:::i;:::-;38094:93;;38211:56;38261:5;38211:56;:::i;:::-;38290:7;38321:1;38306:284;38331:6;38328:1;38325:13;38306:284;;;38407:6;38401:13;38434:63;38493:3;38478:13;38434:63;:::i;:::-;38427:70;;38520:60;38573:6;38520:60;:::i;:::-;38510:70;;38366:224;38353:1;38350;38346:9;38341:14;;38306:284;;;38310:14;38606:3;38599:10;;38007:608;;;37883:732;;;;:::o;38621:831::-;38884:4;38922:3;38911:9;38907:19;38899:27;;38936:71;39004:1;38993:9;38989:17;38980:6;38936:71;:::i;:::-;39017:80;39093:2;39082:9;39078:18;39069:6;39017:80;:::i;:::-;39144:9;39138:4;39134:20;39129:2;39118:9;39114:18;39107:48;39172:108;39275:4;39266:6;39172:108;:::i;:::-;39164:116;;39290:72;39358:2;39347:9;39343:18;39334:6;39290:72;:::i;:::-;39372:73;39440:3;39429:9;39425:19;39416:6;39372:73;:::i;:::-;38621:831;;;;;;;;:::o

Swarm Source

ipfs://0e3b777dfd07aa93d099666164a87008d64034af88b1cb7615a5c1c81af8637c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.