ETH Price: $2,955.61 (-0.96%)
 

Overview

Max Total Supply

1,000,000,000 BENI

Holders

321,471 (0.00%)

Market

Price

$0.0002 @ 0.000000 ETH (+0.01%)

Onchain Market Cap

$242,140.00

Circulating Supply Market Cap

$240,086.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,395.36689518059965498 BENI

Value
$1.31 ( ~0.000443225274696437 ETH) [0.0005%]
0x353c1f0bc78fbbc245b3c93ef77b1dcc5b77d2a0
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Beni is a memecoin based on coinbase director's pet dog, launched on the base blockchain. It aims to create a fun, engaging, and inclusive community for crypto enthusiasts and pet lovers.

Market

Volume (24H):$228.73
Market Capitalization:$240,086.00
Circulating Supply:991,530,453.00 BENI
Market Data Source: Coinmarketcap

Contract Source Code Verified (Exact Match)

Contract Name:
BENI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at basescan.org on 2024-03-29
*/

/*
 * SPDX-License-Identifier: MIT
 * https://t.me/benionbase
 * https://twitter.com/benionbase
 * https://www.benionbase.com/
 */

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 BENI 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("Beni", "BENI") {
        IDexRouter _dexRouter = IDexRouter(
            0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24
        );

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

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

        uint256 _buyMarketingTax = 30;
        uint256 _buyProjectTax = 0;

        uint256 _sellMarketingTax = 30;
        uint256 _sellProjectTax = 0;

        uint256 _totalSupply = 1_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(0x3Ee75fCf3699AB3D175aA385959a41425756eBF1);
        projectWallet = address(msg.sender);

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

        limitWL(msg.sender, true);
        limitWL(address(this), true);
        limitWL(address(0xdead), true);
        limitWL(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 enableLaunch() 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 rvmTradingLimits() external onlyOwner {
        limitsEnabled = false;
        emit LimitsRemoved(block.timestamp);
    }

    /**
     * @notice Removes the transfer delay
     * @dev onlyOwner.
     * Emits an {DisabledTransferDelay} event
     */
    function disableDelayTransfers() 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 setRangeSwapback(
        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 setTxLimitMax(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 setWalletLimitMax(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 limitWL(
        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 setBuyingFees(
        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 setSellingFees(
        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 feeWL(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 changeFeeReceiverMarketing(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 changeFeeReceiverProject(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

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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":"changeFeeReceiverMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeFeeReceiverProject","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":"disableDelayTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"feeWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"limitWL","outputs":[],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rvmTradingLimits","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":"setBuyingFees","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":"setRangeSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setSellingFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setTxLimitMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"setWalletLimitMax","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"}]

60c06040526000600560156101000a81548160ff0219169083151502179055506001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055506000600c60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600481526020017f42656e69000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42454e49000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000f3a565b5080600490816200010d919062000f3a565b50505062000130620001246200061360201b60201c565b6200061b60201b60201c565b6000734752ba5dbc23f44d87826276bf6fd6b1c372ad2490506200015c816001620006e160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020291906200108b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029091906200108b565b6040518363ffffffff1660e01b8152600401620002af929190620010ce565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f591906200108b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a0516001620006e160201b60201c565b6200035260a05160016200081b60201b60201c565b6000601e9050600080601e905060008062000372620008bc60201b60201c565b600a6200038091906200128b565b633b9aca00620003919190620012dc565b90506103e8600a82620003a59190620012dc565b620003b1919062001356565b600a819055506103e8600a82620003c99190620012dc565b620003d5919062001356565b6009819055506103e8600182620003ed9190620012dc565b620003f9919062001356565b6006819055506064600282620004109190620012dc565b6200041c919062001356565b60078190555084600f8190555083601081905550601054600f546200044291906200138e565b600e8190555082601281905550816013819055506013546012546200046891906200138e565b601181905550733ee75fcf3699ab3d175aa385959a41425756ebf1600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000517336001620008c560201b60201c565b6200052a306001620008c560201b60201c565b6200053f61dead6001620008c560201b60201c565b62000574600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008c560201b60201c565b62000587336001620006e160201b60201c565b6200059a306001620006e160201b60201c565b620005af61dead6001620006e160201b60201c565b620005e4600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006e160201b60201c565b620005f533620009ff60201b60201c565b62000607338262000b1460201b60201c565b505050505050620015be565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006f16200061360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200071762000c8c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000767906200142a565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516200080f919062001469565b60405180910390a25050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b620008d56200061360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008fb62000c8c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000954576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200094b906200142a565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009f3919062001469565b60405180910390a25050565b62000a0f6200061360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a3562000c8c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a85906200142a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000b00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000af790620014fc565b60405180910390fd5b62000b11816200061b60201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b7d906200156e565b60405180910390fd5b62000b9a6000838362000cb660201b60201c565b806002600082825462000bae91906200138e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c0591906200138e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c6c9190620015a1565b60405180910390a362000c886000838362000cbb60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d4257607f821691505b60208210810362000d585762000d5762000cfa565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000dc27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d83565b62000dce868362000d83565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e1b62000e1562000e0f8462000de6565b62000df0565b62000de6565b9050919050565b6000819050919050565b62000e378362000dfa565b62000e4f62000e468262000e22565b84845462000d90565b825550505050565b600090565b62000e6662000e57565b62000e7381848462000e2c565b505050565b5b8181101562000e9b5762000e8f60008262000e5c565b60018101905062000e79565b5050565b601f82111562000eea5762000eb48162000d5e565b62000ebf8462000d73565b8101602085101562000ecf578190505b62000ee762000ede8562000d73565b83018262000e78565b50505b505050565b600082821c905092915050565b600062000f0f6000198460080262000eef565b1980831691505092915050565b600062000f2a838362000efc565b9150826002028217905092915050565b62000f458262000cc0565b67ffffffffffffffff81111562000f615762000f6062000ccb565b5b62000f6d825462000d29565b62000f7a82828562000e9f565b600060209050601f83116001811462000fb2576000841562000f9d578287015190505b62000fa9858262000f1c565b86555062001019565b601f19841662000fc28662000d5e565b60005b8281101562000fec5784890151825560018201915060208501945060208101905062000fc5565b868310156200100c578489015162001008601f89168262000efc565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010538262001026565b9050919050565b620010658162001046565b81146200107157600080fd5b50565b60008151905062001085816200105a565b92915050565b600060208284031215620010a457620010a362001021565b5b6000620010b48482850162001074565b91505092915050565b620010c88162001046565b82525050565b6000604082019050620010e56000830185620010bd565b620010f46020830184620010bd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200118957808604811115620011615762001160620010fb565b5b6001851615620011715780820291505b808102905062001181856200112a565b945062001141565b94509492505050565b600082620011a4576001905062001277565b81620011b4576000905062001277565b8160018114620011cd5760028114620011d8576200120e565b600191505062001277565b60ff841115620011ed57620011ec620010fb565b5b8360020a915084821115620012075762001206620010fb565b5b5062001277565b5060208310610133831016604e8410600b8410161715620012485782820a905083811115620012425762001241620010fb565b5b62001277565b62001257848484600162001137565b92509050818404811115620012715762001270620010fb565b5b81810290505b9392505050565b600060ff82169050919050565b6000620012988262000de6565b9150620012a5836200127e565b9250620012d47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001192565b905092915050565b6000620012e98262000de6565b9150620012f68362000de6565b9250828202620013068162000de6565b9150828204841483151762001320576200131f620010fb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620013638262000de6565b9150620013708362000de6565b92508262001383576200138262001327565b5b828204905092915050565b60006200139b8262000de6565b9150620013a88362000de6565b9250828201905080821115620013c357620013c2620010fb565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001412602083620013c9565b91506200141f82620013da565b602082019050919050565b60006020820190508181036000830152620014458162001403565b9050919050565b60008115159050919050565b62001463816200144c565b82525050565b600060208201905062001480600083018462001458565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620014e4602683620013c9565b9150620014f18262001486565b604082019050919050565b600060208201905081810360008301526200151781620014d5565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001556601f83620013c9565b915062001563826200151e565b602082019050919050565b60006020820190508181036000830152620015898162001547565b9050919050565b6200159b8162000de6565b82525050565b6000602082019050620015b8600083018462001590565b92915050565b60805160a051614aa5620016076000396000818161148401528181611c9001526124900152600081816124380152818161338501528181613466015261348d0152614aa56000f3fe6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063b377f429116100a0578063f242ab411161006f578063f242ab411461072f578063f2fde38b1461075a578063f3dc390214610783578063fab82a8e146107b3578063ff5211bb146107df57610204565b8063b377f42914610673578063b435ea791461068a578063dd62ed3e146106b3578063e13b2007146106f057610204565b8063a457c2d7116100dc578063a457c2d7146105a7578063a9059cbb146105e4578063afaac7fc14610621578063b015b91f1461064a57610204565b80638da5cb5b1461051157806395d89b411461053c5780639a19c3f8146105675780639a7a23d61461057e57610204565b806339509351116101905780635bbb673c1161015f5780635bbb673c1461043e57806370a0823114610467578063715018a6146104a457806377b5312c146104bb5780638cdeeb98146104e857610204565b8063395093511461038457806340d5a0d3146103c15780634ada218b146103ea57806357c64b281461041557610204565b80632ff8ef4d116101cc5780632ff8ef4d146102d9578063313ce5671461030257806331f815111461032d578063340527891461035b57610204565b806306fdde0314610209578063095ea7b31461023457806318160ddd1461027157806323b872dd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6107f6565b60405161022b91906135c9565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190613684565b610888565b60405161026891906136df565b60405180910390f35b34801561027d57600080fd5b506102866108a6565b6040516102939190613709565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190613724565b6108b0565b6040516102d091906136df565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb91906137a3565b6109a8565b005b34801561030e57600080fd5b50610317610acd565b60405161032491906137ff565b60405180910390f35b34801561033957600080fd5b50610342610ad6565b604051610352949392919061381a565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d919061385f565b610b10565b005b34801561039057600080fd5b506103ab60048036038101906103a69190613684565b610c32565b6040516103b891906136df565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e3919061388c565b610cde565b005b3480156103f657600080fd5b506103ff610e09565b60405161040c91906136df565b60405180910390f35b34801561042157600080fd5b5061043c600480360381019061043791906137a3565b610e1c565b005b34801561044a57600080fd5b506104656004803603810190610460919061385f565b610f41565b005b34801561047357600080fd5b5061048e600480360381019061048991906138cc565b611063565b60405161049b9190613709565b60405180910390f35b3480156104b057600080fd5b506104b96110ab565b005b3480156104c757600080fd5b506104d0611133565b6040516104df939291906138f9565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a919061388c565b611159565b005b34801561051d57600080fd5b50610526611284565b604051610533919061393f565b60405180910390f35b34801561054857600080fd5b506105516112ae565b60405161055e91906135c9565b60405180910390f35b34801561057357600080fd5b5061057c611340565b005b34801561058a57600080fd5b506105a560048036038101906105a091906137a3565b611406565b005b3480156105b357600080fd5b506105ce60048036038101906105c99190613684565b61151e565b6040516105db91906136df565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613684565b611609565b60405161061891906136df565b60405180910390f35b34801561062d57600080fd5b50610648600480360381019061064391906138cc565b611627565b005b34801561065657600080fd5b50610671600480360381019061066c91906138cc565b611763565b005b34801561067f57600080fd5b5061068861189f565b005b34801561069657600080fd5b506106b160048036038101906106ac919061395a565b611965565b005b3480156106bf57600080fd5b506106da60048036038101906106d591906139ad565b611b0e565b6040516106e79190613709565b60405180910390f35b3480156106fc57600080fd5b50610717600480360381019061071291906138cc565b611b95565b604051610726939291906139ed565b60405180910390f35b34801561073b57600080fd5b50610744611c8e565b604051610751919061393f565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c91906138cc565b611cb2565b005b34801561078f57600080fd5b50610798611da9565b6040516107aa96959493929190613a24565b60405180910390f35b3480156107bf57600080fd5b506107c8611dd8565b6040516107d6929190613a85565b60405180910390f35b3480156107eb57600080fd5b506107f4611e29565b005b60606003805461080590613add565b80601f016020809104026020016040519081016040528092919081815260200182805461083190613add565b801561087e5780601f106108535761010080835404028352916020019161087e565b820191906000526020600020905b81548152906001019060200180831161086157829003601f168201915b5050505050905090565b600061089c610895611f0a565b8484611f12565b6001905092915050565b6000600254905090565b60006108bd8484846120db565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610908611f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097f90613b80565b60405180910390fd5b61099c85610994611f0a565b858403611f12565b60019150509392505050565b6109b0611f0a565b73ffffffffffffffffffffffffffffffffffffffff166109ce611284565b73ffffffffffffffffffffffffffffffffffffffff1614610a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1b90613bec565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610ac191906136df565b60405180910390a25050565b60006012905090565b600080600080600860009054906101000a900460ff169350600860019054906101000a900460ff1692506009549150600a54905090919293565b610b18611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610b36611284565b73ffffffffffffffffffffffffffffffffffffffff1614610b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8390613bec565b60405180910390fd5b6002811015610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790613c58565b60405180910390fd5b6103e8610bdb6108a6565b82610be69190613ca7565b610bf09190613d18565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051610c279190613709565b60405180910390a150565b6000610cd4610c3f611f0a565b848460016000610c4d611f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ccf9190613d49565b611f12565b6001905092915050565b610ce6611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610d04611284565b73ffffffffffffffffffffffffffffffffffffffff1614610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5190613bec565b60405180910390fd5b8160128190555080601381905550601354601254610d789190613d49565b60118190555060646011541115610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90613def565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1601154601254601354604051610dfd93929190613e0f565b60405180910390a15050565b600c60009054906101000a900460ff1681565b610e24611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610e42611284565b73ffffffffffffffffffffffffffffffffffffffff1614610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90613bec565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610f3591906136df565b60405180910390a25050565b610f49611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610f67611284565b73ffffffffffffffffffffffffffffffffffffffff1614610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb490613bec565b60405180910390fd5b6005811015611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff890613eb8565b60405180910390fd5b6103e861100c6108a6565b826110179190613ca7565b6110219190613d18565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace6009546040516110589190613709565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b3611f0a565b73ffffffffffffffffffffffffffffffffffffffff166110d1611284565b73ffffffffffffffffffffffffffffffffffffffff1614611127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111e90613bec565b60405180910390fd5b6111316000612d0c565b565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b611161611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661117f611284565b73ffffffffffffffffffffffffffffffffffffffff16146111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc90613bec565b60405180910390fd5b81600f8190555080601081905550601054600f546111f39190613d49565b600e819055506064600e54111561123f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123690613f4a565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f5460105460405161127893929190613e0f565b60405180910390a15050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112bd90613add565b80601f01602080910402602001604051908101604052809291908181526020018280546112e990613add565b80156113365780601f1061130b57610100808354040283529160200191611336565b820191906000526020600020905b81548152906001019060200180831161131957829003601f168201915b5050505050905090565b611348611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611366611284565b73ffffffffffffffffffffffffffffffffffffffff16146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390613bec565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b61140e611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661142c611284565b73ffffffffffffffffffffffffffffffffffffffff1614611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147990613bec565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790613fdc565b60405180910390fd5b61151a8282612dd2565b5050565b6000806001600061152d611f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e19061406e565b60405180910390fd5b6115fe6115f5611f0a565b85858403611f12565b600191505092915050565b600061161d611616611f0a565b84846120db565b6001905092915050565b61162f611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661164d611284565b73ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613bec565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61176b611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611789611284565b73ffffffffffffffffffffffffffffffffffffffff16146117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d690613bec565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118a7611f0a565b73ffffffffffffffffffffffffffffffffffffffff166118c5611284565b73ffffffffffffffffffffffffffffffffffffffff161461191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290613bec565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b61196d611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661198b611284565b73ffffffffffffffffffffffffffffffffffffffff16146119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890613bec565b60405180910390fd5b6001821015611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90614100565b60405180910390fd5b81811015611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90614192565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082611a8e6108a6565b611a989190613ca7565b611aa29190613d18565b60068190555061271081611ab46108a6565b611abe9190613ca7565b611ac89190613d18565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051611b01939291906138f9565b60405180910390a1505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b7f000000000000000000000000000000000000000000000000000000000000000081565b611cba611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611cd8611284565b73ffffffffffffffffffffffffffffffffffffffff1614611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613bec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9490614224565b60405180910390fd5b611da681612d0c565b50565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611e31611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611e4f611284565b73ffffffffffffffffffffffffffffffffffffffff1614611ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9c90613bec565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f78906142b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790614348565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120ce9190613709565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361214a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612141906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b09061446c565b60405180910390fd5b600081036121d2576121cd83836000612e73565b612d07565b600860009054906101000a900460ff1615612895576121ef611284565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561225d575061222d611284565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122965750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122d0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122e95750600560149054906101000a900460ff16155b1561289457600c60009054906101000a900460ff166123e357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123a35750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d9906144fe565b60405180910390fd5b5b600860019054906101000a900460ff16156125ab57612400611284565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561248757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124df57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125aa5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255c906145b6565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561264e5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126f557600a54811115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90614648565b60405180910390fd5b6009546126a483611063565b826126af9190613d49565b11156126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e7906146b4565b60405180910390fd5b612893565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127985750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127e757600a548111156127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d990614746565b60405180910390fd5b612892565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128915760095461284483611063565b8261284f9190613d49565b1115612890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612887906146b4565b60405180910390fd5b5b5b5b5b5b60006128a030611063565b9050600060065482101590508080156128c55750600560159054906101000a900460ff165b80156128de5750600560149054906101000a900460ff16155b80156129345750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561298a5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129e05750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a24576001600560146101000a81548160ff021916908315150217905550612a086130f2565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ada5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ae457600090505b60008115612cf757601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b4757506000601154115b15612be157612b746064612b66601154886132b090919063ffffffff16565b6132c690919063ffffffff16565b905060115460135482612b879190613ca7565b612b919190613d18565b60156000828254612ba29190613d49565b9250508190555060115460125482612bba9190613ca7565b612bc49190613d18565b60146000828254612bd59190613d49565b92505081905550612cd3565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c3c57506000600e54115b15612cd257612c696064612c5b600e54886132b090919063ffffffff16565b6132c690919063ffffffff16565b9050600e5460105482612c7c9190613ca7565b612c869190613d18565b60156000828254612c979190613d49565b92505081905550600e54600f5482612caf9190613ca7565b612cb99190613d18565b60146000828254612cca9190613d49565b925050819055505b5b6000811115612ce857612ce7873083612e73565b5b8085612cf49190614766565b94505b612d02878787612e73565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed9906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f489061446c565b60405180910390fd5b612f5c8383836132dc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd99061480c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130759190613d49565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130d99190613709565b60405180910390a36130ec8484846132e1565b50505050565b60006130fd30611063565b905060008190506000808303613115575050506132ae565b6007548311156131255760075492505b60008390506000479050613138826132e6565b600061314d824761352390919063ffffffff16565b905060006131788661316a601554856132b090919063ffffffff16565b6132c690919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516131d09061485d565b60006040518083038185875af1925050503d806000811461320d576040519150601f19603f3d011682016040523d82523d6000602084013e613212565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161325e9061485d565b60006040518083038185875af1925050503d806000811461329b576040519150601f19603f3d011682016040523d82523d6000602084013e6132a0565b606091505b505080955050505050505050505b565b600081836132be9190613ca7565b905092915050565b600081836132d49190613d18565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561330357613302614872565b5b6040519080825280602002602001820160405280156133315781602001602082028036833780820191505090505b5090503081600081518110613349576133486148a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341291906148e5565b81600181518110613426576134256148a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061348b307f000000000000000000000000000000000000000000000000000000000000000084611f12565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134ed959493929190614a15565b600060405180830381600087803b15801561350757600080fd5b505af115801561351b573d6000803e3d6000fd5b505050505050565b600081836135319190614766565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613573578082015181840152602081019050613558565b60008484015250505050565b6000601f19601f8301169050919050565b600061359b82613539565b6135a58185613544565b93506135b5818560208601613555565b6135be8161357f565b840191505092915050565b600060208201905081810360008301526135e38184613590565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061361b826135f0565b9050919050565b61362b81613610565b811461363657600080fd5b50565b60008135905061364881613622565b92915050565b6000819050919050565b6136618161364e565b811461366c57600080fd5b50565b60008135905061367e81613658565b92915050565b6000806040838503121561369b5761369a6135eb565b5b60006136a985828601613639565b92505060206136ba8582860161366f565b9150509250929050565b60008115159050919050565b6136d9816136c4565b82525050565b60006020820190506136f460008301846136d0565b92915050565b6137038161364e565b82525050565b600060208201905061371e60008301846136fa565b92915050565b60008060006060848603121561373d5761373c6135eb565b5b600061374b86828701613639565b935050602061375c86828701613639565b925050604061376d8682870161366f565b9150509250925092565b613780816136c4565b811461378b57600080fd5b50565b60008135905061379d81613777565b92915050565b600080604083850312156137ba576137b96135eb565b5b60006137c885828601613639565b92505060206137d98582860161378e565b9150509250929050565b600060ff82169050919050565b6137f9816137e3565b82525050565b600060208201905061381460008301846137f0565b92915050565b600060808201905061382f60008301876136d0565b61383c60208301866136d0565b61384960408301856136fa565b61385660608301846136fa565b95945050505050565b600060208284031215613875576138746135eb565b5b60006138838482850161366f565b91505092915050565b600080604083850312156138a3576138a26135eb565b5b60006138b18582860161366f565b92505060206138c28582860161366f565b9150509250929050565b6000602082840312156138e2576138e16135eb565b5b60006138f084828501613639565b91505092915050565b600060608201905061390e60008301866136d0565b61391b60208301856136fa565b61392860408301846136fa565b949350505050565b61393981613610565b82525050565b60006020820190506139546000830184613930565b92915050565b600080600060608486031215613973576139726135eb565b5b60006139818682870161378e565b93505060206139928682870161366f565b92505060406139a38682870161366f565b9150509250925092565b600080604083850312156139c4576139c36135eb565b5b60006139d285828601613639565b92505060206139e385828601613639565b9150509250929050565b6000606082019050613a0260008301866136d0565b613a0f60208301856136d0565b613a1c60408301846136d0565b949350505050565b600060c082019050613a3960008301896136fa565b613a4660208301886136fa565b613a5360408301876136fa565b613a6060608301866136fa565b613a6d60808301856136fa565b613a7a60a08301846136fa565b979650505050505050565b6000604082019050613a9a6000830185613930565b613aa76020830184613930565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613af557607f821691505b602082108103613b0857613b07613aae565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613b6a602883613544565b9150613b7582613b0e565b604082019050919050565b60006020820190508181036000830152613b9981613b5d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bd6602083613544565b9150613be182613ba0565b602082019050919050565b60006020820190508181036000830152613c0581613bc9565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613c42602083613544565b9150613c4d82613c0c565b602082019050919050565b60006020820190508181036000830152613c7181613c35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cb28261364e565b9150613cbd8361364e565b9250828202613ccb8161364e565b91508282048414831517613ce257613ce1613c78565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d238261364e565b9150613d2e8361364e565b925082613d3e57613d3d613ce9565b5b828204905092915050565b6000613d548261364e565b9150613d5f8361364e565b9250828201905080821115613d7757613d76613c78565b5b92915050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613dd9602983613544565b9150613de482613d7d565b604082019050919050565b60006020820190508181036000830152613e0881613dcc565b9050919050565b6000606082019050613e2460008301866136fa565b613e3160208301856136fa565b613e3e60408301846136fa565b949350505050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613ea2602483613544565b9150613ead82613e46565b604082019050919050565b60006020820190508181036000830152613ed181613e95565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613f34602883613544565b9150613f3f82613ed8565b604082019050919050565b60006020820190508181036000830152613f6381613f27565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613fc6603983613544565b9150613fd182613f6a565b604082019050919050565b60006020820190508181036000830152613ff581613fb9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614058602583613544565b915061406382613ffc565b604082019050919050565b600060208201905081810360008301526140878161404b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006140ea603483613544565b91506140f58261408e565b604082019050919050565b60006020820190508181036000830152614119816140dd565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061417c602a83613544565b915061418782614120565b604082019050919050565b600060208201905081810360008301526141ab8161416f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061420e602683613544565b9150614219826141b2565b604082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142a0602483613544565b91506142ab82614244565b604082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614332602283613544565b915061433d826142d6565b604082019050919050565b6000602082019050818103600083015261436181614325565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006143c4602583613544565b91506143cf82614368565b604082019050919050565b600060208201905081810360008301526143f3816143b7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614456602383613544565b9150614461826143fa565b604082019050919050565b6000602082019050818103600083015261448581614449565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006144e8602283613544565b91506144f38261448c565b604082019050919050565b60006020820190508181036000830152614517816144db565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006145a0604983613544565b91506145ab8261451e565b606082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614632602683613544565b915061463d826145d6565b604082019050919050565b6000602082019050818103600083015261466181614625565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061469e601383613544565b91506146a982614668565b602082019050919050565b600060208201905081810360008301526146cd81614691565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614730602783613544565b915061473b826146d4565b604082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b60006147718261364e565b915061477c8361364e565b925082820390508181111561479457614793613c78565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006147f6602683613544565b91506148018261479a565b604082019050919050565b60006020820190508181036000830152614825816147e9565b9050919050565b600081905092915050565b50565b600061484760008361482c565b915061485282614837565b600082019050919050565b60006148688261483a565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148df81613622565b92915050565b6000602082840312156148fb576148fa6135eb565b5b6000614909848285016148d0565b91505092915050565b6000819050919050565b6000819050919050565b600061494161493c61493784614912565b61491c565b61364e565b9050919050565b61495181614926565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61498c81613610565b82525050565b600061499e8383614983565b60208301905092915050565b6000602082019050919050565b60006149c282614957565b6149cc8185614962565b93506149d783614973565b8060005b83811015614a085781516149ef8882614992565b97506149fa836149aa565b9250506001810190506149db565b5085935050505092915050565b600060a082019050614a2a60008301886136fa565b614a376020830187614948565b8181036040830152614a4981866149b7565b9050614a586060830185613930565b614a6560808301846136fa565b969550505050505056fea264697066735822122055a7e1b29b590a44d8e1c3de69ffb4c23ca5af103dcce8a0d1371654a4784e9164736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c80638da5cb5b1161010d578063b377f429116100a0578063f242ab411161006f578063f242ab411461072f578063f2fde38b1461075a578063f3dc390214610783578063fab82a8e146107b3578063ff5211bb146107df57610204565b8063b377f42914610673578063b435ea791461068a578063dd62ed3e146106b3578063e13b2007146106f057610204565b8063a457c2d7116100dc578063a457c2d7146105a7578063a9059cbb146105e4578063afaac7fc14610621578063b015b91f1461064a57610204565b80638da5cb5b1461051157806395d89b411461053c5780639a19c3f8146105675780639a7a23d61461057e57610204565b806339509351116101905780635bbb673c1161015f5780635bbb673c1461043e57806370a0823114610467578063715018a6146104a457806377b5312c146104bb5780638cdeeb98146104e857610204565b8063395093511461038457806340d5a0d3146103c15780634ada218b146103ea57806357c64b281461041557610204565b80632ff8ef4d116101cc5780632ff8ef4d146102d9578063313ce5671461030257806331f815111461032d578063340527891461035b57610204565b806306fdde0314610209578063095ea7b31461023457806318160ddd1461027157806323b872dd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6107f6565b60405161022b91906135c9565b60405180910390f35b34801561024057600080fd5b5061025b60048036038101906102569190613684565b610888565b60405161026891906136df565b60405180910390f35b34801561027d57600080fd5b506102866108a6565b6040516102939190613709565b60405180910390f35b3480156102a857600080fd5b506102c360048036038101906102be9190613724565b6108b0565b6040516102d091906136df565b60405180910390f35b3480156102e557600080fd5b5061030060048036038101906102fb91906137a3565b6109a8565b005b34801561030e57600080fd5b50610317610acd565b60405161032491906137ff565b60405180910390f35b34801561033957600080fd5b50610342610ad6565b604051610352949392919061381a565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d919061385f565b610b10565b005b34801561039057600080fd5b506103ab60048036038101906103a69190613684565b610c32565b6040516103b891906136df565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e3919061388c565b610cde565b005b3480156103f657600080fd5b506103ff610e09565b60405161040c91906136df565b60405180910390f35b34801561042157600080fd5b5061043c600480360381019061043791906137a3565b610e1c565b005b34801561044a57600080fd5b506104656004803603810190610460919061385f565b610f41565b005b34801561047357600080fd5b5061048e600480360381019061048991906138cc565b611063565b60405161049b9190613709565b60405180910390f35b3480156104b057600080fd5b506104b96110ab565b005b3480156104c757600080fd5b506104d0611133565b6040516104df939291906138f9565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a919061388c565b611159565b005b34801561051d57600080fd5b50610526611284565b604051610533919061393f565b60405180910390f35b34801561054857600080fd5b506105516112ae565b60405161055e91906135c9565b60405180910390f35b34801561057357600080fd5b5061057c611340565b005b34801561058a57600080fd5b506105a560048036038101906105a091906137a3565b611406565b005b3480156105b357600080fd5b506105ce60048036038101906105c99190613684565b61151e565b6040516105db91906136df565b60405180910390f35b3480156105f057600080fd5b5061060b60048036038101906106069190613684565b611609565b60405161061891906136df565b60405180910390f35b34801561062d57600080fd5b50610648600480360381019061064391906138cc565b611627565b005b34801561065657600080fd5b50610671600480360381019061066c91906138cc565b611763565b005b34801561067f57600080fd5b5061068861189f565b005b34801561069657600080fd5b506106b160048036038101906106ac919061395a565b611965565b005b3480156106bf57600080fd5b506106da60048036038101906106d591906139ad565b611b0e565b6040516106e79190613709565b60405180910390f35b3480156106fc57600080fd5b50610717600480360381019061071291906138cc565b611b95565b604051610726939291906139ed565b60405180910390f35b34801561073b57600080fd5b50610744611c8e565b604051610751919061393f565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c91906138cc565b611cb2565b005b34801561078f57600080fd5b50610798611da9565b6040516107aa96959493929190613a24565b60405180910390f35b3480156107bf57600080fd5b506107c8611dd8565b6040516107d6929190613a85565b60405180910390f35b3480156107eb57600080fd5b506107f4611e29565b005b60606003805461080590613add565b80601f016020809104026020016040519081016040528092919081815260200182805461083190613add565b801561087e5780601f106108535761010080835404028352916020019161087e565b820191906000526020600020905b81548152906001019060200180831161086157829003601f168201915b5050505050905090565b600061089c610895611f0a565b8484611f12565b6001905092915050565b6000600254905090565b60006108bd8484846120db565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610908611f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097f90613b80565b60405180910390fd5b61099c85610994611f0a565b858403611f12565b60019150509392505050565b6109b0611f0a565b73ffffffffffffffffffffffffffffffffffffffff166109ce611284565b73ffffffffffffffffffffffffffffffffffffffff1614610a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1b90613bec565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610ac191906136df565b60405180910390a25050565b60006012905090565b600080600080600860009054906101000a900460ff169350600860019054906101000a900460ff1692506009549150600a54905090919293565b610b18611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610b36611284565b73ffffffffffffffffffffffffffffffffffffffff1614610b8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8390613bec565b60405180910390fd5b6002811015610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790613c58565b60405180910390fd5b6103e8610bdb6108a6565b82610be69190613ca7565b610bf09190613d18565b600a819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600a54604051610c279190613709565b60405180910390a150565b6000610cd4610c3f611f0a565b848460016000610c4d611f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ccf9190613d49565b611f12565b6001905092915050565b610ce6611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610d04611284565b73ffffffffffffffffffffffffffffffffffffffff1614610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5190613bec565b60405180910390fd5b8160128190555080601381905550601354601254610d789190613d49565b60118190555060646011541115610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90613def565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1601154601254601354604051610dfd93929190613e0f565b60405180910390a15050565b600c60009054906101000a900460ff1681565b610e24611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610e42611284565b73ffffffffffffffffffffffffffffffffffffffff1614610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90613bec565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610f3591906136df565b60405180910390a25050565b610f49611f0a565b73ffffffffffffffffffffffffffffffffffffffff16610f67611284565b73ffffffffffffffffffffffffffffffffffffffff1614610fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb490613bec565b60405180910390fd5b6005811015611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff890613eb8565b60405180910390fd5b6103e861100c6108a6565b826110179190613ca7565b6110219190613d18565b6009819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace6009546040516110589190613709565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b3611f0a565b73ffffffffffffffffffffffffffffffffffffffff166110d1611284565b73ffffffffffffffffffffffffffffffffffffffff1614611127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111e90613bec565b60405180910390fd5b6111316000612d0c565b565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b611161611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661117f611284565b73ffffffffffffffffffffffffffffffffffffffff16146111d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cc90613bec565b60405180910390fd5b81600f8190555080601081905550601054600f546111f39190613d49565b600e819055506064600e54111561123f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123690613f4a565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600f5460105460405161127893929190613e0f565b60405180910390a15050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112bd90613add565b80601f01602080910402602001604051908101604052809291908181526020018280546112e990613add565b80156113365780601f1061130b57610100808354040283529160200191611336565b820191906000526020600020905b81548152906001019060200180831161131957829003601f168201915b5050505050905090565b611348611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611366611284565b73ffffffffffffffffffffffffffffffffffffffff16146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390613bec565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b61140e611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661142c611284565b73ffffffffffffffffffffffffffffffffffffffff1614611482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147990613bec565b60405180910390fd5b7f000000000000000000000000ec8995b9f8a9f7b369c93733fa2667a2e09fa7de73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150790613fdc565b60405180910390fd5b61151a8282612dd2565b5050565b6000806001600061152d611f0a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e19061406e565b60405180910390fd5b6115fe6115f5611f0a565b85858403611f12565b600191505092915050565b600061161d611616611f0a565b84846120db565b6001905092915050565b61162f611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661164d611284565b73ffffffffffffffffffffffffffffffffffffffff16146116a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169a90613bec565b60405180910390fd5b600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61176b611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611789611284565b73ffffffffffffffffffffffffffffffffffffffff16146117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d690613bec565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb91dbdeaf34f885ccae2d8abc3967cb03c079b6af2c7944e3893fd29427d75e760405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6118a7611f0a565b73ffffffffffffffffffffffffffffffffffffffff166118c5611284565b73ffffffffffffffffffffffffffffffffffffffff161461191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290613bec565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2565b61196d611f0a565b73ffffffffffffffffffffffffffffffffffffffff1661198b611284565b73ffffffffffffffffffffffffffffffffffffffff16146119e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d890613bec565b60405180910390fd5b6001821015611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90614100565b60405180910390fd5b81811015611a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5f90614192565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082611a8e6108a6565b611a989190613ca7565b611aa29190613d18565b60068190555061271081611ab46108a6565b611abe9190613ca7565b611ac89190613d18565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051611b01939291906138f9565b60405180910390a1505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b7f000000000000000000000000ec8995b9f8a9f7b369c93733fa2667a2e09fa7de81565b611cba611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611cd8611284565b73ffffffffffffffffffffffffffffffffffffffff1614611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613bec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9490614224565b60405180910390fd5b611da681612d0c565b50565b600080600080600080600e549550600f5494506010549350601154925060125491506013549050909192939495565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915091509091565b611e31611f0a565b73ffffffffffffffffffffffffffffffffffffffff16611e4f611284565b73ffffffffffffffffffffffffffffffffffffffff1614611ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9c90613bec565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f78906142b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe790614348565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120ce9190613709565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361214a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612141906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b09061446c565b60405180910390fd5b600081036121d2576121cd83836000612e73565b612d07565b600860009054906101000a900460ff1615612895576121ef611284565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561225d575061222d611284565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122965750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122d0575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122e95750600560149054906101000a900460ff16155b1561289457600c60009054906101000a900460ff166123e357601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123a35750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d9906144fe565b60405180910390fd5b5b600860019054906101000a900460ff16156125ab57612400611284565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561248757507f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124df57507f000000000000000000000000ec8995b9f8a9f7b369c93733fa2667a2e09fa7de73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125aa5743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255c906145b6565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561264e5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156126f557600a54811115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f90614648565b60405180910390fd5b6009546126a483611063565b826126af9190613d49565b11156126f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e7906146b4565b60405180910390fd5b612893565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127985750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127e757600a548111156127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d990614746565b60405180910390fd5b612892565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166128915760095461284483611063565b8261284f9190613d49565b1115612890576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612887906146b4565b60405180910390fd5b5b5b5b5b5b60006128a030611063565b9050600060065482101590508080156128c55750600560159054906101000a900460ff165b80156128de5750600560149054906101000a900460ff16155b80156129345750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561298a5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129e05750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a24576001600560146101000a81548160ff021916908315150217905550612a086130f2565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ada5750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ae457600090505b60008115612cf757601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b4757506000601154115b15612be157612b746064612b66601154886132b090919063ffffffff16565b6132c690919063ffffffff16565b905060115460135482612b879190613ca7565b612b919190613d18565b60156000828254612ba29190613d49565b9250508190555060115460125482612bba9190613ca7565b612bc49190613d18565b60146000828254612bd59190613d49565b92505081905550612cd3565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c3c57506000600e54115b15612cd257612c696064612c5b600e54886132b090919063ffffffff16565b6132c690919063ffffffff16565b9050600e5460105482612c7c9190613ca7565b612c869190613d18565b60156000828254612c979190613d49565b92505081905550600e54600f5482612caf9190613ca7565b612cb99190613d18565b60146000828254612cca9190613d49565b925050819055505b5b6000811115612ce857612ce7873083612e73565b5b8085612cf49190614766565b94505b612d02878787612e73565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ee2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed9906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f489061446c565b60405180910390fd5b612f5c8383836132dc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd99061480c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130759190613d49565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130d99190613709565b60405180910390a36130ec8484846132e1565b50505050565b60006130fd30611063565b905060008190506000808303613115575050506132ae565b6007548311156131255760075492505b60008390506000479050613138826132e6565b600061314d824761352390919063ffffffff16565b905060006131788661316a601554856132b090919063ffffffff16565b6132c690919063ffffffff16565b905060006014819055506000601581905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516131d09061485d565b60006040518083038185875af1925050503d806000811461320d576040519150601f19603f3d011682016040523d82523d6000602084013e613212565b606091505b505080955050600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161325e9061485d565b60006040518083038185875af1925050503d806000811461329b576040519150601f19603f3d011682016040523d82523d6000602084013e6132a0565b606091505b505080955050505050505050505b565b600081836132be9190613ca7565b905092915050565b600081836132d49190613d18565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561330357613302614872565b5b6040519080825280602002602001820160405280156133315781602001602082028036833780820191505090505b5090503081600081518110613349576133486148a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341291906148e5565b81600181518110613426576134256148a1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061348b307f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2484611f12565b7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2473ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016134ed959493929190614a15565b600060405180830381600087803b15801561350757600080fd5b505af115801561351b573d6000803e3d6000fd5b505050505050565b600081836135319190614766565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613573578082015181840152602081019050613558565b60008484015250505050565b6000601f19601f8301169050919050565b600061359b82613539565b6135a58185613544565b93506135b5818560208601613555565b6135be8161357f565b840191505092915050565b600060208201905081810360008301526135e38184613590565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061361b826135f0565b9050919050565b61362b81613610565b811461363657600080fd5b50565b60008135905061364881613622565b92915050565b6000819050919050565b6136618161364e565b811461366c57600080fd5b50565b60008135905061367e81613658565b92915050565b6000806040838503121561369b5761369a6135eb565b5b60006136a985828601613639565b92505060206136ba8582860161366f565b9150509250929050565b60008115159050919050565b6136d9816136c4565b82525050565b60006020820190506136f460008301846136d0565b92915050565b6137038161364e565b82525050565b600060208201905061371e60008301846136fa565b92915050565b60008060006060848603121561373d5761373c6135eb565b5b600061374b86828701613639565b935050602061375c86828701613639565b925050604061376d8682870161366f565b9150509250925092565b613780816136c4565b811461378b57600080fd5b50565b60008135905061379d81613777565b92915050565b600080604083850312156137ba576137b96135eb565b5b60006137c885828601613639565b92505060206137d98582860161378e565b9150509250929050565b600060ff82169050919050565b6137f9816137e3565b82525050565b600060208201905061381460008301846137f0565b92915050565b600060808201905061382f60008301876136d0565b61383c60208301866136d0565b61384960408301856136fa565b61385660608301846136fa565b95945050505050565b600060208284031215613875576138746135eb565b5b60006138838482850161366f565b91505092915050565b600080604083850312156138a3576138a26135eb565b5b60006138b18582860161366f565b92505060206138c28582860161366f565b9150509250929050565b6000602082840312156138e2576138e16135eb565b5b60006138f084828501613639565b91505092915050565b600060608201905061390e60008301866136d0565b61391b60208301856136fa565b61392860408301846136fa565b949350505050565b61393981613610565b82525050565b60006020820190506139546000830184613930565b92915050565b600080600060608486031215613973576139726135eb565b5b60006139818682870161378e565b93505060206139928682870161366f565b92505060406139a38682870161366f565b9150509250925092565b600080604083850312156139c4576139c36135eb565b5b60006139d285828601613639565b92505060206139e385828601613639565b9150509250929050565b6000606082019050613a0260008301866136d0565b613a0f60208301856136d0565b613a1c60408301846136d0565b949350505050565b600060c082019050613a3960008301896136fa565b613a4660208301886136fa565b613a5360408301876136fa565b613a6060608301866136fa565b613a6d60808301856136fa565b613a7a60a08301846136fa565b979650505050505050565b6000604082019050613a9a6000830185613930565b613aa76020830184613930565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613af557607f821691505b602082108103613b0857613b07613aae565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613b6a602883613544565b9150613b7582613b0e565b604082019050919050565b60006020820190508181036000830152613b9981613b5d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bd6602083613544565b9150613be182613ba0565b602082019050919050565b60006020820190508181036000830152613c0581613bc9565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613c42602083613544565b9150613c4d82613c0c565b602082019050919050565b60006020820190508181036000830152613c7181613c35565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cb28261364e565b9150613cbd8361364e565b9250828202613ccb8161364e565b91508282048414831517613ce257613ce1613c78565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d238261364e565b9150613d2e8361364e565b925082613d3e57613d3d613ce9565b5b828204905092915050565b6000613d548261364e565b9150613d5f8361364e565b9250828201905080821115613d7757613d76613c78565b5b92915050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613dd9602983613544565b9150613de482613d7d565b604082019050919050565b60006020820190508181036000830152613e0881613dcc565b9050919050565b6000606082019050613e2460008301866136fa565b613e3160208301856136fa565b613e3e60408301846136fa565b949350505050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613ea2602483613544565b9150613ead82613e46565b604082019050919050565b60006020820190508181036000830152613ed181613e95565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613f34602883613544565b9150613f3f82613ed8565b604082019050919050565b60006020820190508181036000830152613f6381613f27565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613fc6603983613544565b9150613fd182613f6a565b604082019050919050565b60006020820190508181036000830152613ff581613fb9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614058602583613544565b915061406382613ffc565b604082019050919050565b600060208201905081810360008301526140878161404b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006140ea603483613544565b91506140f58261408e565b604082019050919050565b60006020820190508181036000830152614119816140dd565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061417c602a83613544565b915061418782614120565b604082019050919050565b600060208201905081810360008301526141ab8161416f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061420e602683613544565b9150614219826141b2565b604082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006142a0602483613544565b91506142ab82614244565b604082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614332602283613544565b915061433d826142d6565b604082019050919050565b6000602082019050818103600083015261436181614325565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006143c4602583613544565b91506143cf82614368565b604082019050919050565b600060208201905081810360008301526143f3816143b7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614456602383613544565b9150614461826143fa565b604082019050919050565b6000602082019050818103600083015261448581614449565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006144e8602283613544565b91506144f38261448c565b604082019050919050565b60006020820190508181036000830152614517816144db565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006145a0604983613544565b91506145ab8261451e565b606082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b6000614632602683613544565b915061463d826145d6565b604082019050919050565b6000602082019050818103600083015261466181614625565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061469e601383613544565b91506146a982614668565b602082019050919050565b600060208201905081810360008301526146cd81614691565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b6000614730602783613544565b915061473b826146d4565b604082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b60006147718261364e565b915061477c8361364e565b925082820390508181111561479457614793613c78565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006147f6602683613544565b91506148018261479a565b604082019050919050565b60006020820190508181036000830152614825816147e9565b9050919050565b600081905092915050565b50565b600061484760008361482c565b915061485282614837565b600082019050919050565b60006148688261483a565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148df81613622565b92915050565b6000602082840312156148fb576148fa6135eb565b5b6000614909848285016148d0565b91505092915050565b6000819050919050565b6000819050919050565b600061494161493c61493784614912565b61491c565b61364e565b9050919050565b61495181614926565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61498c81613610565b82525050565b600061499e8383614983565b60208301905092915050565b6000602082019050919050565b60006149c282614957565b6149cc8185614962565b93506149d783614973565b8060005b83811015614a085781516149ef8882614992565b97506149fa836149aa565b9250506001810190506149db565b5085935050505092915050565b600060a082019050614a2a60008301886136fa565b614a376020830187614948565b8181036040830152614a4981866149b7565b9050614a586060830185613930565b614a6560808301846136fa565b969550505050505056fea264697066735822122055a7e1b29b590a44d8e1c3de69ffb4c23ca5af103dcce8a0d1371654a4784e9164736f6c63430008130033

Deployed Bytecode Sourcemap

25417:21208:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11015:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13248:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12135:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13920:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33155:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11977:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37866:388;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;32224:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14854:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34320:452;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26037:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35021:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32649:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12306:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22354:103;;;;;;;;;;;;;:::i;:::-;;37091:355;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;33628:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21703:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11234:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30547:133;;;;;;;;;;;;;:::i;:::-;;35502:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15643:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12662:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36188:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36554:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30820:153;;;;;;;;;;;;;:::i;:::-;;31438:550;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12925:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40192:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;25536:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22612:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39160:572;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;38486:190;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;30229:163;;;;;;;;;;;;;:::i;:::-;;11015:100;11069:13;11102:5;11095:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11015:100;:::o;13248:194::-;13356:4;13373:39;13382:12;:10;:12::i;:::-;13396:7;13405:6;13373:8;:39::i;:::-;13430:4;13423:11;;13248:194;;;;:::o;12135:108::-;12196:7;12223:12;;12216:19;;12135:108;:::o;13920:529::-;14060:4;14077:36;14087:6;14095:9;14106:6;14077:9;:36::i;:::-;14126:24;14153:11;:19;14165:6;14153:19;;;;;;;;;;;;;;;:33;14173:12;:10;:12::i;:::-;14153:33;;;;;;;;;;;;;;;;14126:60;;14239:6;14219:16;:26;;14197:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14349:57;14358:6;14366:12;:10;:12::i;:::-;14399:6;14380:16;:25;14349:8;:57::i;:::-;14437:4;14430:11;;;13920:529;;;;;:::o;33155:186::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33282:4:::1;33252:19;:27;33272:6;33252:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;33320:6;33302:31;;;33328:4;33302:31;;;;;;:::i;:::-;;;;;;;;33155:186:::0;;:::o;11977:93::-;12035:5;12060:2;12053:9;;11977:93;:::o;37866:388::-;37953:19;37987:26;38028:18;38061:14;38120:13;;;;;;;;;;;38103:30;;38168:20;;;;;;;;;;;38144:44;;38212:9;;38199:22;;38241:5;;38232:14;;37866:388;;;;:::o;32224:218::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32311:1:::1;32301:6;:11;;32293:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32395:4;32378:13;:11;:13::i;:::-;32369:6;:22;;;;:::i;:::-;32368:31;;;;:::i;:::-;32360:5;:39;;;;32415:19;32428:5;;32415:19;;;;;;:::i;:::-;;;;;;;;32224:218:::0;:::o;14854:290::-;14967:4;14984:130;15007:12;:10;:12::i;:::-;15034:7;15093:10;15056:11;:25;15068:12;:10;:12::i;:::-;15056:25;;;;;;;;;;;;;;;:34;15082:7;15056:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14984:8;:130::i;:::-;15132:4;15125:11;;14854:290;;;;:::o;34320:452::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34458:13:::1;34439:16;:32;;;;34499:7;34482:14;:24;;;;34551:14;;34532:16;;:33;;;;:::i;:::-;34517:12;:48;;;;34614:3;34598:12;;:19;;34576:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;34702:62;34717:12;;34731:16;;34749:14;;34702:62;;;;;;;;:::i;:::-;;;;;;;;34320:452:::0;;:::o;26037:34::-;;;;;;;;;;;;;:::o;35021:170::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35125:8:::1;35096:17;:26;35114:7;35096:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;35165:7;35149:34;;;35174:8;35149:34;;;;;;:::i;:::-;;;;;;;;35021:170:::0;;:::o;32649:238::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32740:1:::1;32730:6;:11;;32722:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32832:4;32815:13;:11;:13::i;:::-;32806:6;:22;;;;:::i;:::-;32805:31;;;;:::i;:::-;32793:9;:43;;;;32852:27;32869:9;;32852:27;;;;;;:::i;:::-;;;;;;;;32649:238:::0;:::o;12306:143::-;12396:7;12423:9;:18;12433:7;12423:18;;;;;;;;;;;;;;;;12416:25;;12306:143;;;:::o;22354:103::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22419:30:::1;22446:1;22419:18;:30::i;:::-;22354:103::o:0;37091:355::-;37181:21;37217:25;37257;37329:15;;;;;;;;;;;37310:34;;37375:16;;37355:36;;37422:16;;37402:36;;37091:355;;;:::o;33628:403::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33764:13:::1;33746:15;:31;;;;33804:7;33788:13;:23;;;;33854:13;;33836:15;;:31;;;;:::i;:::-;33822:11;:45;;;;33901:3;33886:11;;:18;;33878:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33965:58;33979:11;;33992:15;;34009:13;;33965:58;;;;;;;;:::i;:::-;;;;;;;;33628:403:::0;;:::o;21703:87::-;21749:7;21776:6;;;;;;;;;;;21769:13;;21703:87;:::o;11234:104::-;11290:13;11323:7;11316:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11234:104;:::o;30547:133::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30621:5:::1;30605:13;;:21;;;;;;;;;;;;;;;;;;30656:15;30642:30;;;;;;;;;;30547:133::o:0;35502:300::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35648:7:::1;35640:15;;:4;:15;;::::0;35618:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35753:41;35782:4;35788:5;35753:28;:41::i;:::-;35502:300:::0;;:::o;15643:475::-;15761:4;15778:24;15805:11;:25;15817:12;:10;:12::i;:::-;15805:25;;;;;;;;;;;;;;;:34;15831:7;15805:34;;;;;;;;;;;;;;;;15778:61;;15892:15;15872:16;:35;;15850:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16008:67;16017:12;:10;:12::i;:::-;16031:7;16059:15;16040:16;:34;16008:8;:67::i;:::-;16106:4;16099:11;;;15643:475;;;;:::o;12662:200::-;12773:4;12790:42;12800:12;:10;:12::i;:::-;12814:9;12825:6;12790:9;:42::i;:::-;12850:4;12843:11;;12662:200;;;;:::o;36188:186::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36312:15:::1;;;;;;;;;;;36278:50;;36301:9;36278:50;;;;;;;;;;;;36357:9;36339:15;;:27;;;;;;;;;;;;;;;;;;36188:186:::0;:::o;36554:178::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36674:13:::1;;;;;;;;;;;36642:46;;36663:9;36642:46;;;;;;;;;;;;36715:9;36699:13;;:25;;;;;;;;;;;;;;;;;;36554:178:::0;:::o;30820:153::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30906:5:::1;30883:20;;:28;;;;;;;;;;;;;;;;;;30949:15;30927:38;;;;;;;;;;30820:153::o:0;31438:550::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31601:1:::1;31593:4;:9;;31571:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;31709:4;31701;:12;;31693:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31791:8;31773:15;;:26;;;;;;;;;;;;;;;;;;31854:5;31846:4;31830:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31829:30;;;;:::i;:::-;31810:16;:49;;;;31914:5;31906:4;31890:13;:11;:13::i;:::-;:20;;;;:::i;:::-;31889:30;;;;:::i;:::-;31870:16;:49;;;;31935:45;31959:8;31969:4;31975;31935:45;;;;;;;;:::i;:::-;;;;;;;;31438:550:::0;;;:::o;12925:176::-;13039:7;13066:11;:18;13078:5;13066:18;;;;;;;;;;;;;;;:27;13085:7;13066:27;;;;;;;;;;;;;;;;13059:34;;12925:176;;;;:::o;40192:448::-;40312:23;40350:25;40390:31;40470:17;:26;40488:7;40470:26;;;;;;;;;;;;;;;;;;;;;;;;;40449:47;;40530:19;:28;40550:7;40530:28;;;;;;;;;;;;;;;;;;;;;;;;;40507:51;;40598:25;:34;40624:7;40598:34;;;;;;;;;;;;;;;;;;;;;;;;;40569:63;;40192:448;;;;;:::o;25536:32::-;;;:::o;22612:238::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22735:1:::1;22715:22;;:8;:22;;::::0;22693:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22814:28;22833:8;22814:18;:28::i;:::-;22612:238:::0;:::o;39160:572::-;39245:20;39280:24;39319:22;39356:21;39392:25;39432:23;39498:11;;39483:26;;39539:15;;39520:34;;39582:13;;39565:30;;39622:12;;39606:28;;39665:16;;39645:36;;39710:14;;39692:32;;39160:572;;;;;;:::o;38486:190::-;38563:24;38589:22;38637:15;;;;;;;;;;;38654:13;;;;;;;;;;;38629:39;;;;38486:190;;:::o;30229:163::-;21934:12;:10;:12::i;:::-;21923:23;;:7;:5;:7::i;:::-;:23;;;21915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30300:4:::1;30283:14;;:21;;;;;;;;;;;;;;;;;;30333:4;30315:15;;:22;;;;;;;;;;;;;;;;;;30368:15;30353:31;;;;;;;;;;30229:163::o:0;10021:98::-;10074:7;10101:10;10094:17;;10021:98;:::o;19426:380::-;19579:1;19562:19;;:5;:19;;;19554:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19660:1;19641:21;;:7;:21;;;19633:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19744:6;19714:11;:18;19726:5;19714:18;;;;;;;;;;;;;;;:27;19733:7;19714:27;;;;;;;;;;;;;;;:36;;;;19782:7;19766:32;;19775:5;19766:32;;;19791:6;19766:32;;;;;;:::i;:::-;;;;;;;;19426:380;;;:::o;40648:4415::-;40796:1;40780:18;;:4;:18;;;40772:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40873:1;40859:16;;:2;:16;;;40851:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40942:1;40932:6;:11;40928:93;;40960:28;40976:4;40982:2;40986:1;40960:15;:28::i;:::-;41003:7;;40928:93;41037:13;;;;;;;;;;;41033:2345;;;41097:7;:5;:7::i;:::-;41089:15;;:4;:15;;;;:49;;;;;41131:7;:5;:7::i;:::-;41125:13;;:2;:13;;;;41089:49;:86;;;;;41173:1;41159:16;;:2;:16;;;;41089:86;:128;;;;;41210:6;41196:21;;:2;:21;;;;41089:128;:158;;;;;41239:8;;;;;;;;;;;41238:9;41089:158;41067:2300;;;41287:14;;;;;;;;;;;41282:232;;41360:17;:23;41378:4;41360:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;41387:17;:21;41405:2;41387:21;;;;;;;;;;;;;;;;;;;;;;;;;41360:48;41326:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;41282:232;41670:20;;;;;;;;;;;41666:629;;;41751:7;:5;:7::i;:::-;41745:13;;:2;:13;;;;:66;;;;;41801:9;41787:24;;:2;:24;;;;41745:66;:117;;;;;41854:7;41840:22;;:2;:22;;;;41745:117;41715:561;;;42026:12;41951:28;:39;41980:9;41951:39;;;;;;;;;;;;;;;;:87;41913:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;42240:12;42198:28;:39;42227:9;42198:39;;;;;;;;;;;;;;;:54;;;;41715:561;41666:629;42369:25;:31;42395:4;42369:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;42405:19;:23;42425:2;42405:23;;;;;;;;;;;;;;;;;;;;;;;;;42404:24;42369:59;42343:1009;;;42515:5;;42505:6;:15;;42471:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;42693:9;;42676:13;42686:2;42676:9;:13::i;:::-;42667:6;:22;;;;:::i;:::-;:35;;42633:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42343:1009;;;42871:25;:29;42897:2;42871:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;42905:19;:25;42925:4;42905:25;;;;;;;;;;;;;;;;;;;;;;;;;42904:26;42871:59;42845:507;;;43017:5;;43007:6;:15;;42973:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42845:507;;;43144:19;:23;43164:2;43144:23;;;;;;;;;;;;;;;;;;;;;;;;;43139:213;;43252:9;;43235:13;43245:2;43235:9;:13::i;:::-;43226:6;:22;;;;:::i;:::-;:35;;43192:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43139:213;42845:507;42343:1009;41067:2300;41033:2345;43390:28;43421:24;43439:4;43421:9;:24::i;:::-;43390:55;;43458:12;43497:16;;43473:20;:40;;43458:55;;43544:7;:39;;;;;43568:15;;;;;;;;;;;43544:39;:65;;;;;43601:8;;;;;;;;;;;43600:9;43544:65;:114;;;;;43627:25;:31;43653:4;43627:31;;;;;;;;;;;;;;;;;;;;;;;;;43626:32;43544:114;:155;;;;;43676:17;:23;43694:4;43676:23;;;;;;;;;;;;;;;;;;;;;;;;;43675:24;43544:155;:194;;;;;43717:17;:21;43735:2;43717:21;;;;;;;;;;;;;;;;;;;;;;;;;43716:22;43544:194;43526:326;;;43776:4;43765:8;;:15;;;;;;;;;;;;;;;;;;43797:10;:8;:10::i;:::-;43835:5;43824:8;;:16;;;;;;;;;;;;;;;;;;43526:326;43864:12;43880:8;;;;;;;;;;;43879:9;43864:24;;43990:17;:23;44008:4;43990:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;44017:17;:21;44035:2;44017:21;;;;;;;;;;;;;;;;;;;;;;;;;43990:48;43986:96;;;44065:5;44055:15;;43986:96;44094:12;44199:7;44195:815;;;44251:25;:29;44277:2;44251:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;44299:1;44284:12;;:16;44251:49;44247:614;;;44328:33;44357:3;44328:24;44339:12;;44328:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;44321:40;;44426:12;;44408:14;;44401:4;:21;;;;:::i;:::-;44400:38;;;;:::i;:::-;44380:16;;:58;;;;;;;:::i;:::-;;;;;;;;44507:12;;44487:16;;44480:4;:23;;;;:::i;:::-;44479:40;;;;:::i;:::-;44457:18;;:62;;;;;;;:::i;:::-;;;;;;;;44247:614;;;44581:25;:31;44607:4;44581:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;44630:1;44616:11;;:15;44581:50;44577:284;;;44659:32;44687:3;44659:23;44670:11;;44659:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;44652:39;;44755:11;;44738:13;;44731:4;:20;;;;:::i;:::-;44730:36;;;;:::i;:::-;44710:16;;:56;;;;;;;:::i;:::-;;;;;;;;44834:11;;44815:15;;44808:4;:22;;;;:::i;:::-;44807:38;;;;:::i;:::-;44785:18;;:60;;;;;;;:::i;:::-;;;;;;;;44577:284;44247:614;44888:1;44881:4;:8;44877:91;;;44910:42;44926:4;44940;44947;44910:15;:42::i;:::-;44877:91;44994:4;44984:14;;;;;:::i;:::-;;;44195:815;45022:33;45038:4;45044:2;45048:6;45022:15;:33::i;:::-;40761:4302;;;;40648:4415;;;;:::o;23010:191::-;23084:16;23103:6;;;;;;;;;;;23084:25;;23129:8;23120:6;;:17;;;;;;;;;;;;;;;;;;23184:8;23153:40;;23174:8;23153:40;;;;;;;;;;;;23073:128;23010:191;:::o;35810:188::-;35927:5;35893:25;:31;35919:4;35893:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35984:5;35950:40;;35978:4;35950:40;;;;;;;;;;;;35810:188;;:::o;16608:770::-;16766:1;16748:20;;:6;:20;;;16740:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16850:1;16829:23;;:9;:23;;;16821:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16905:47;16926:6;16934:9;16945:6;16905:20;:47::i;:::-;16965:21;16989:9;:17;16999:6;16989:17;;;;;;;;;;;;;;;;16965:41;;17056:6;17039:13;:23;;17017:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17200:6;17184:13;:22;17164:9;:17;17174:6;17164:17;;;;;;;;;;;;;;;:42;;;;17252:6;17228:9;:20;17238:9;17228:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17293:9;17276:35;;17285:6;17276:35;;;17304:6;17276:35;;;;;;:::i;:::-;;;;;;;;17324:46;17344:6;17352:9;17363:6;17324:19;:46::i;:::-;16729:649;16608:770;;;:::o;45650:972::-;45689:23;45715:24;45733:4;45715:9;:24::i;:::-;45689:50;;45750:25;45778:15;45750:43;;45804:12;45852:1;45833:15;:20;45829:59;;45870:7;;;;;45829:59;45922:16;;45904:15;:34;45900:101;;;45973:16;;45955:34;;45900:101;46013:26;46042:15;46013:44;;46070:25;46098:21;46070:49;;46132:36;46149:18;46132:16;:36::i;:::-;46181:18;46202:44;46228:17;46202:21;:25;;:44;;;;:::i;:::-;46181:65;;46259:17;46279:79;46330:17;46279:32;46294:16;;46279:10;:14;;:32;;;;:::i;:::-;:36;;:79;;;;:::i;:::-;46259:99;;46392:1;46371:18;:22;;;;46423:1;46404:16;:20;;;;46459:13;;;;;;;;;;;46451:27;;46486:9;46451:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46437:63;;;;;46535:15;;;;;;;;;;;46527:29;;46578:21;46527:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46513:101;;;;;45678:944;;;;;;;45650:972;:::o;3380:98::-;3438:7;3469:1;3465;:5;;;;:::i;:::-;3458:12;;3380:98;;;;:::o;3779:::-;3837:7;3868:1;3864;:5;;;;:::i;:::-;3857:12;;3779:98;;;;:::o;20406:125::-;;;;:::o;21135:124::-;;;;:::o;45071:571::-;45197:21;45235:1;45221:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45197:40;;45266:4;45248;45253:1;45248:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45292:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45282:4;45287:1;45282:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;45321:56;45338:4;45353:9;45365:11;45321:8;:56::i;:::-;45416:9;:60;;;45491:11;45517:1;45561:4;45588;45608:15;45416:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45126:516;45071:571;:::o;3023:98::-;3081:7;3112:1;3108;:5;;;;:::i;:::-;3101:12;;3023: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:116::-;4493:21;4508:5;4493:21;:::i;:::-;4486:5;4483:32;4473:60;;4529:1;4526;4519:12;4473:60;4423:116;:::o;4545:133::-;4588:5;4626:6;4613:20;4604:29;;4642:30;4666:5;4642:30;:::i;:::-;4545:133;;;;:::o;4684:468::-;4749:6;4757;4806:2;4794:9;4785:7;4781:23;4777:32;4774:119;;;4812:79;;:::i;:::-;4774:119;4932:1;4957:53;5002:7;4993:6;4982:9;4978:22;4957:53;:::i;:::-;4947:63;;4903:117;5059:2;5085:50;5127:7;5118:6;5107:9;5103:22;5085:50;:::i;:::-;5075:60;;5030:115;4684:468;;;;;:::o;5158:86::-;5193:7;5233:4;5226:5;5222:16;5211:27;;5158:86;;;:::o;5250:112::-;5333:22;5349:5;5333:22;:::i;:::-;5328:3;5321:35;5250:112;;:::o;5368:214::-;5457:4;5495:2;5484:9;5480:18;5472:26;;5508:67;5572:1;5561:9;5557:17;5548:6;5508:67;:::i;:::-;5368:214;;;;:::o;5588:529::-;5753:4;5791:3;5780:9;5776:19;5768:27;;5805:65;5867:1;5856:9;5852:17;5843:6;5805:65;:::i;:::-;5880:66;5942:2;5931:9;5927:18;5918:6;5880:66;:::i;:::-;5956:72;6024:2;6013:9;6009:18;6000:6;5956:72;:::i;:::-;6038;6106:2;6095:9;6091:18;6082:6;6038:72;:::i;:::-;5588:529;;;;;;;:::o;6123:329::-;6182:6;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6357:1;6382:53;6427:7;6418:6;6407:9;6403:22;6382:53;:::i;:::-;6372:63;;6328:117;6123:329;;;;:::o;6458:474::-;6526:6;6534;6583:2;6571:9;6562:7;6558:23;6554:32;6551:119;;;6589:79;;:::i;:::-;6551:119;6709:1;6734:53;6779:7;6770:6;6759:9;6755:22;6734:53;:::i;:::-;6724:63;;6680:117;6836:2;6862:53;6907:7;6898:6;6887:9;6883:22;6862:53;:::i;:::-;6852:63;;6807:118;6458:474;;;;;:::o;6938:329::-;6997:6;7046:2;7034:9;7025:7;7021:23;7017:32;7014:119;;;7052:79;;:::i;:::-;7014:119;7172:1;7197:53;7242:7;7233:6;7222:9;7218:22;7197:53;:::i;:::-;7187:63;;7143:117;6938:329;;;;:::o;7273:430::-;7416:4;7454:2;7443:9;7439:18;7431:26;;7467:65;7529:1;7518:9;7514:17;7505:6;7467:65;:::i;:::-;7542:72;7610:2;7599:9;7595:18;7586:6;7542:72;:::i;:::-;7624;7692:2;7681:9;7677:18;7668:6;7624:72;:::i;:::-;7273:430;;;;;;:::o;7709:118::-;7796:24;7814:5;7796:24;:::i;:::-;7791:3;7784:37;7709:118;;:::o;7833:222::-;7926:4;7964:2;7953:9;7949:18;7941:26;;7977:71;8045:1;8034:9;8030:17;8021:6;7977:71;:::i;:::-;7833:222;;;;:::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:182::-;13358:34;13354:1;13346:6;13342:14;13335:58;13218:182;:::o;13406:366::-;13548:3;13569:67;13633:2;13628:3;13569:67;:::i;:::-;13562:74;;13645:93;13734:3;13645:93;:::i;:::-;13763:2;13758:3;13754:12;13747:19;;13406:366;;;:::o;13778:419::-;13944:4;13982:2;13971:9;13967:18;13959:26;;14031:9;14025:4;14021:20;14017:1;14006:9;14002:17;13995:47;14059:131;14185:4;14059:131;:::i;:::-;14051:139;;13778:419;;;:::o;14203:180::-;14251:77;14248:1;14241:88;14348:4;14345:1;14338:15;14372:4;14369:1;14362:15;14389:410;14429:7;14452:20;14470:1;14452:20;:::i;:::-;14447:25;;14486:20;14504:1;14486:20;:::i;:::-;14481:25;;14541:1;14538;14534:9;14563:30;14581:11;14563:30;:::i;:::-;14552:41;;14742:1;14733:7;14729:15;14726:1;14723:22;14703:1;14696:9;14676:83;14653:139;;14772:18;;:::i;:::-;14653:139;14437:362;14389:410;;;;:::o;14805:180::-;14853:77;14850:1;14843:88;14950:4;14947:1;14940:15;14974:4;14971:1;14964:15;14991:185;15031:1;15048:20;15066:1;15048:20;:::i;:::-;15043:25;;15082:20;15100:1;15082:20;:::i;:::-;15077:25;;15121:1;15111:35;;15126:18;;:::i;:::-;15111:35;15168:1;15165;15161:9;15156:14;;14991:185;;;;:::o;15182:191::-;15222:3;15241:20;15259:1;15241:20;:::i;:::-;15236:25;;15275:20;15293:1;15275:20;:::i;:::-;15270:25;;15318:1;15315;15311:9;15304:16;;15339:3;15336:1;15333:10;15330:36;;;15346:18;;:::i;:::-;15330:36;15182:191;;;;:::o;15379:228::-;15519:34;15515:1;15507:6;15503:14;15496:58;15588:11;15583:2;15575:6;15571:15;15564:36;15379:228;:::o;15613:366::-;15755:3;15776:67;15840:2;15835:3;15776:67;:::i;:::-;15769:74;;15852:93;15941:3;15852:93;:::i;:::-;15970:2;15965:3;15961:12;15954:19;;15613:366;;;:::o;15985:419::-;16151:4;16189:2;16178:9;16174:18;16166:26;;16238:9;16232:4;16228:20;16224:1;16213:9;16209:17;16202:47;16266:131;16392:4;16266:131;:::i;:::-;16258:139;;15985:419;;;:::o;16410:442::-;16559:4;16597:2;16586:9;16582:18;16574:26;;16610:71;16678:1;16667:9;16663:17;16654:6;16610:71;:::i;:::-;16691:72;16759:2;16748:9;16744:18;16735:6;16691:72;:::i;:::-;16773;16841:2;16830:9;16826:18;16817:6;16773:72;:::i;:::-;16410:442;;;;;;:::o;16858:223::-;16998:34;16994:1;16986:6;16982:14;16975:58;17067:6;17062:2;17054:6;17050:15;17043:31;16858:223;:::o;17087:366::-;17229:3;17250:67;17314:2;17309:3;17250:67;:::i;:::-;17243:74;;17326:93;17415:3;17326:93;:::i;:::-;17444:2;17439:3;17435:12;17428:19;;17087:366;;;:::o;17459:419::-;17625:4;17663:2;17652:9;17648:18;17640:26;;17712:9;17706:4;17702:20;17698:1;17687:9;17683:17;17676:47;17740:131;17866:4;17740:131;:::i;:::-;17732:139;;17459:419;;;:::o;17884:227::-;18024:34;18020:1;18012:6;18008:14;18001:58;18093:10;18088:2;18080:6;18076:15;18069:35;17884:227;:::o;18117:366::-;18259:3;18280:67;18344:2;18339:3;18280:67;:::i;:::-;18273:74;;18356:93;18445:3;18356:93;:::i;:::-;18474:2;18469:3;18465:12;18458:19;;18117:366;;;:::o;18489:419::-;18655:4;18693:2;18682:9;18678:18;18670:26;;18742:9;18736:4;18732:20;18728:1;18717:9;18713:17;18706:47;18770:131;18896:4;18770:131;:::i;:::-;18762:139;;18489:419;;;:::o;18914:244::-;19054:34;19050:1;19042:6;19038:14;19031:58;19123:27;19118:2;19110:6;19106:15;19099:52;18914:244;:::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://55a7e1b29b590a44d8e1c3de69ffb4c23ca5af103dcce8a0d1371654a4784e91
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.