ETH Price: $3,434.75 (-0.67%)
Gas: 20 Gwei

Token

Broke (BROKE)
 

Overview

Max Total Supply

1,000,000 BROKE

Holders

84

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,613.745609129483644492 BROKE

Value
$0.00
0x6b6cced57e0dca05b756355a78c2a60e31a7e421
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Broke

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-15
*/

//SPDX-License-Identifier: MIT

/**
Being Broke is so last year.

Telegram:     https://t.me/BrokeERCPortal
Website:      https://www.brokeerc.com/
Twitter:      https://twitter.com/BrokeERC
*/

pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.sol"; */

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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);
    }
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
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
    );
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
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 updated 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 updated 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 updated 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 {}
}

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
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;
        }
    }
}

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Factory {
    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;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

////// src/IUniswapV2Router02.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Router02 {
    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;
}

/* pragma solidity >=0.8.10; */

/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */

contract Broke is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

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

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

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

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

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("Broke", "BROKE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 3;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 3;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTransactionAmount = 1_000_0 * 1e18; // 1% from total supply maxTransactionAmountTxn
        maxWallet = 1_000_0 * 1e18; // 1% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 10) / 10000; // 0.1% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0x13B9E3A400f64C5c09D61b98446C5969Ef92074b);
        devWallet = address(0x13B9E3A400f64C5c09D61b98446C5969Ef92074b);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        /*
            _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 {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

    //BROKE PROTOCOL ZERO: Upon Renouncing of the contract, please note that the contract
    //will allow the marketing wallet to do ONE THING AND ONLY DO THAT ONE THING ONCE —
    //Which is to decrease tax fees to ZERO!  Once we reach 100k MC we will use the BROKE PROTOCOL ZERO.

    modifier onlyMarketing() {
        require(
            msg.sender == marketingWallet,
            "Caller is not the Marketing Wallet"
        );
        _;
    }

    function removeTaxes() external onlyMarketing {
        sellMarketingFee = 0;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        buyMarketingFee = 0;
        buyLiquidityFee = 0;
        buyDevFee = 0;

        buyTotalFees = 0;
        sellTotalFees = 0;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

    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 (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "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(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        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] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[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] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            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] = uniswapV2Router.WETH();

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            deadAddress,
            block.timestamp
        );
    }

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

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

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

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","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":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556000600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506000601360006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600581526020017f42726f6b650000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f42524f4b4500000000000000000000000000000000000000000000000000000081525081600390805190602001906200012e92919062000b09565b5080600490805190602001906200014792919062000b09565b5050506200016a6200015e620005c960201b60201c565b620005d160201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001968160016200069760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000c23565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca919062000c23565b6040518363ffffffff1660e01b8152600401620002e992919062000c66565b6020604051808303816000875af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000c23565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037760a05160016200069760201b60201c565b6200038c60a05160016200078160201b60201c565b600060039050600080600060039050600080600069d3c21bcecceda1000000905069021e19e0c9bab240000060088190555069021e19e0c9bab2400000600a81905550612710600a82620003e1919062000ccc565b620003ed919062000d5c565b6009819055508660158190555085601681905550846017819055506017546016546015546200041d919062000d94565b62000429919062000d94565b6014819055508360198190555082601a8190555081601b81905550601b54601a5460195462000459919062000d94565b62000465919062000d94565b6018819055507313b9e3a400f64c5c09d61b98446c5969ef92074b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507313b9e3a400f64c5c09d61b98446c5969ef92074b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000537620005296200082260201b60201c565b60016200084c60201b60201c565b6200054a3060016200084c60201b60201c565b6200055f61dead60016200084c60201b60201c565b62000581620005736200082260201b60201c565b60016200069760201b60201c565b620005943060016200069760201b60201c565b620005a961dead60016200069760201b60201c565b620005bb33826200098660201b60201c565b505050505050505062000fb3565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006a7620005c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006cd6200082260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000726576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071d9062000e52565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200085c620005c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008826200082260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d29062000e52565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200097a919062000e91565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f09062000efe565b60405180910390fd5b62000a0d6000838362000aff60201b60201c565b806002600082825462000a21919062000d94565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a78919062000d94565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000adf919062000f31565b60405180910390a362000afb6000838362000b0460201b60201c565b5050565b505050565b505050565b82805462000b179062000f7d565b90600052602060002090601f01602090048101928262000b3b576000855562000b87565b82601f1062000b5657805160ff191683800117855562000b87565b8280016001018555821562000b87579182015b8281111562000b8657825182559160200191906001019062000b69565b5b50905062000b96919062000b9a565b5090565b5b8082111562000bb557600081600090555060010162000b9b565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000beb8262000bbe565b9050919050565b62000bfd8162000bde565b811462000c0957600080fd5b50565b60008151905062000c1d8162000bf2565b92915050565b60006020828403121562000c3c5762000c3b62000bb9565b5b600062000c4c8482850162000c0c565b91505092915050565b62000c608162000bde565b82525050565b600060408201905062000c7d600083018562000c55565b62000c8c602083018462000c55565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cd98262000c93565b915062000ce68362000c93565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d225762000d2162000c9d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d698262000c93565b915062000d768362000c93565b92508262000d895762000d8862000d2d565b5b828204905092915050565b600062000da18262000c93565b915062000dae8362000c93565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000de65762000de562000c9d565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e3a60208362000df1565b915062000e478262000e02565b602082019050919050565b6000602082019050818103600083015262000e6d8162000e2b565b9050919050565b60008115159050919050565b62000e8b8162000e74565b82525050565b600060208201905062000ea8600083018462000e80565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ee6601f8362000df1565b915062000ef38262000eae565b602082019050919050565b6000602082019050818103600083015262000f198162000ed7565b9050919050565b62000f2b8162000c93565b82525050565b600060208201905062000f48600083018462000f20565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f9657607f821691505b6020821081141562000fad5762000fac62000f4e565b5b50919050565b60805160a051615d526200103b6000396000818161140f01528181611cf10152818161283b015281816128f20152818161291f01528181612f630152818161406701528181614120015261414d015260008181610fb201528181612f0b015281816142c3015281816143a4015281816143cb01528181614467015261448e0152615d526000f3fe6080604052600436106103bc5760003560e01c80638a8c523c116101f2578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e25578063f637434214610e4e578063f8b45b0514610e79578063fe72b27a14610ea4576103c3565b8063dd62ed3e14610d67578063e2f4560514610da4578063e884f26014610dcf578063f11a24d314610dfa576103c3565b8063c876d0b9116100dc578063c876d0b914610ca9578063c8c8ebe414610cd4578063d257b34f14610cff578063d85ba06314610d3c576103c3565b8063bbc0c74214610c03578063c024666814610c2e578063c17b5b8c14610c57578063c18bc19514610c80576103c3565b80639ec22c0e11610185578063a4c82a0011610154578063a4c82a0014610b35578063a9059cbb14610b60578063aacebbe314610b9d578063b62496f514610bc6576103c3565b80639ec22c0e14610a775780639fccce3214610aa2578063a0d82dc514610acd578063a457c2d714610af8576103c3565b8063924de9b7116101c1578063924de9b7146109cf57806395d89b41146109f85780639a7a23d614610a235780639c3b4fdc14610a4c576103c3565b80638a8c523c146109375780638da5cb5b1461094e5780638ea5220f1461097957806392136913146109a4576103c3565b8063313ce567116102e257806370a08231116102755780637571336a116102445780637571336a1461088f57806375f0a874146108b85780637bce5a04146108e35780638095d5641461090e576103c3565b806370a08231146107e7578063715018a614610824578063730c18881461083b578063751039fc14610864576103c3565b80634fbee193116102b15780634fbee1931461073d57806369e1ea7f1461077a5780636a486a8e146107915780636ddd1713146107bc576103c3565b8063313ce5671461067f57806339509351146106aa57806349bd5a5e146106e75780634a62bb6514610712576103c3565b8063199ffc721161035a57806323b872dd1161032957806323b872dd146105c157806327c8f835146105fe5780632c3e486c146106295780632e82f1a014610654576103c3565b8063199ffc72146105175780631a8145bb146105425780631f3fed8f1461056d578063203e727e14610598576103c3565b80631694505e116103965780631694505e1461046d57806318160ddd146104985780631816467f146104c3578063184c16c5146104ec576103c3565b806306fdde03146103c8578063095ea7b3146103f357806310d5de5314610430576103c3565b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610ee1565b6040516103ea91906145d6565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190614691565b610f73565b60405161042791906146ec565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190614707565b610f91565b60405161046491906146ec565b60405180910390f35b34801561047957600080fd5b50610482610fb0565b60405161048f9190614793565b60405180910390f35b3480156104a457600080fd5b506104ad610fd4565b6040516104ba91906147bd565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190614707565b610fde565b005b3480156104f857600080fd5b5061050161111a565b60405161050e91906147bd565b60405180910390f35b34801561052357600080fd5b5061052c611120565b60405161053991906147bd565b60405180910390f35b34801561054e57600080fd5b50610557611126565b60405161056491906147bd565b60405180910390f35b34801561057957600080fd5b5061058261112c565b60405161058f91906147bd565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba91906147d8565b611132565b005b3480156105cd57600080fd5b506105e860048036038101906105e39190614805565b611241565b6040516105f591906146ec565b60405180910390f35b34801561060a57600080fd5b50610613611339565b6040516106209190614867565b60405180910390f35b34801561063557600080fd5b5061063e61133f565b60405161064b91906147bd565b60405180910390f35b34801561066057600080fd5b50610669611345565b60405161067691906146ec565b60405180910390f35b34801561068b57600080fd5b50610694611358565b6040516106a1919061489e565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190614691565b611361565b6040516106de91906146ec565b60405180910390f35b3480156106f357600080fd5b506106fc61140d565b6040516107099190614867565b60405180910390f35b34801561071e57600080fd5b50610727611431565b60405161073491906146ec565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190614707565b611444565b60405161077191906146ec565b60405180910390f35b34801561078657600080fd5b5061078f61149a565b005b34801561079d57600080fd5b506107a661156c565b6040516107b391906147bd565b60405180910390f35b3480156107c857600080fd5b506107d1611572565b6040516107de91906146ec565b60405180910390f35b3480156107f357600080fd5b5061080e60048036038101906108099190614707565b611585565b60405161081b91906147bd565b60405180910390f35b34801561083057600080fd5b506108396115cd565b005b34801561084757600080fd5b50610862600480360381019061085d91906148e5565b611655565b005b34801561087057600080fd5b50610879611795565b60405161088691906146ec565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190614938565b611835565b005b3480156108c457600080fd5b506108cd61190c565b6040516108da9190614867565b60405180910390f35b3480156108ef57600080fd5b506108f8611932565b60405161090591906147bd565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190614978565b611938565b005b34801561094357600080fd5b5061094c611a37565b005b34801561095a57600080fd5b50610963611af2565b6040516109709190614867565b60405180910390f35b34801561098557600080fd5b5061098e611b1c565b60405161099b9190614867565b60405180910390f35b3480156109b057600080fd5b506109b9611b42565b6040516109c691906147bd565b60405180910390f35b3480156109db57600080fd5b506109f660048036038101906109f191906149cb565b611b48565b005b348015610a0457600080fd5b50610a0d611be1565b604051610a1a91906145d6565b60405180910390f35b348015610a2f57600080fd5b50610a4a6004803603810190610a459190614938565b611c73565b005b348015610a5857600080fd5b50610a61611d8c565b604051610a6e91906147bd565b60405180910390f35b348015610a8357600080fd5b50610a8c611d92565b604051610a9991906147bd565b60405180910390f35b348015610aae57600080fd5b50610ab7611d98565b604051610ac491906147bd565b60405180910390f35b348015610ad957600080fd5b50610ae2611d9e565b604051610aef91906147bd565b60405180910390f35b348015610b0457600080fd5b50610b1f6004803603810190610b1a9190614691565b611da4565b604051610b2c91906146ec565b60405180910390f35b348015610b4157600080fd5b50610b4a611e8f565b604051610b5791906147bd565b60405180910390f35b348015610b6c57600080fd5b50610b876004803603810190610b829190614691565b611e95565b604051610b9491906146ec565b60405180910390f35b348015610ba957600080fd5b50610bc46004803603810190610bbf9190614707565b611eb3565b005b348015610bd257600080fd5b50610bed6004803603810190610be89190614707565b611fef565b604051610bfa91906146ec565b60405180910390f35b348015610c0f57600080fd5b50610c1861200f565b604051610c2591906146ec565b60405180910390f35b348015610c3a57600080fd5b50610c556004803603810190610c509190614938565b612022565b005b348015610c6357600080fd5b50610c7e6004803603810190610c799190614978565b612147565b005b348015610c8c57600080fd5b50610ca76004803603810190610ca291906147d8565b612246565b005b348015610cb557600080fd5b50610cbe612355565b604051610ccb91906146ec565b60405180910390f35b348015610ce057600080fd5b50610ce9612368565b604051610cf691906147bd565b60405180910390f35b348015610d0b57600080fd5b50610d266004803603810190610d2191906147d8565b61236e565b604051610d3391906146ec565b60405180910390f35b348015610d4857600080fd5b50610d516124c3565b604051610d5e91906147bd565b60405180910390f35b348015610d7357600080fd5b50610d8e6004803603810190610d8991906149f8565b6124c9565b604051610d9b91906147bd565b60405180910390f35b348015610db057600080fd5b50610db9612550565b604051610dc691906147bd565b60405180910390f35b348015610ddb57600080fd5b50610de4612556565b604051610df191906146ec565b60405180910390f35b348015610e0657600080fd5b50610e0f6125f6565b604051610e1c91906147bd565b60405180910390f35b348015610e3157600080fd5b50610e4c6004803603810190610e479190614707565b6125fc565b005b348015610e5a57600080fd5b50610e636126f4565b604051610e7091906147bd565b60405180910390f35b348015610e8557600080fd5b50610e8e6126fa565b604051610e9b91906147bd565b60405180910390f35b348015610eb057600080fd5b50610ecb6004803603810190610ec691906147d8565b612700565b604051610ed891906146ec565b60405180910390f35b606060038054610ef090614a67565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1c90614a67565b8015610f695780601f10610f3e57610100808354040283529160200191610f69565b820191906000526020600020905b815481529060010190602001808311610f4c57829003601f168201915b5050505050905090565b6000610f87610f806129d8565b84846129e0565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610fe66129d8565b73ffffffffffffffffffffffffffffffffffffffff16611004611af2565b73ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190614ae5565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b61113a6129d8565b73ffffffffffffffffffffffffffffffffffffffff16611158611af2565b73ffffffffffffffffffffffffffffffffffffffff16146111ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a590614ae5565b60405180910390fd5b670de0b6b3a76400006103e860016111c4610fd4565b6111ce9190614b34565b6111d89190614bbd565b6111e29190614bbd565b811015611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90614c60565b60405180910390fd5b670de0b6b3a7640000816112389190614b34565b60088190555050565b600061124e848484612bab565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112996129d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614cf2565b60405180910390fd5b61132d856113256129d8565b8584036129e0565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061140361136e6129d8565b84846001600061137c6129d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9190614d12565b6129e0565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461152a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152190614dda565b60405180910390fd5b60006019819055506000601a819055506000601b8190555060006015819055506000601681905550600060178190555060006014819055506000601881905550565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115d56129d8565b73ffffffffffffffffffffffffffffffffffffffff166115f3611af2565b73ffffffffffffffffffffffffffffffffffffffff1614611649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164090614ae5565b60405180910390fd5b6116536000613943565b565b61165d6129d8565b73ffffffffffffffffffffffffffffffffffffffff1661167b611af2565b73ffffffffffffffffffffffffffffffffffffffff16146116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c890614ae5565b60405180910390fd5b610258831015611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d90614e6c565b60405180910390fd5b6103e88211158015611729575060008210155b611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f90614efe565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061179f6129d8565b73ffffffffffffffffffffffffffffffffffffffff166117bd611af2565b73ffffffffffffffffffffffffffffffffffffffff1614611813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180a90614ae5565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61183d6129d8565b73ffffffffffffffffffffffffffffffffffffffff1661185b611af2565b73ffffffffffffffffffffffffffffffffffffffff16146118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890614ae5565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6119406129d8565b73ffffffffffffffffffffffffffffffffffffffff1661195e611af2565b73ffffffffffffffffffffffffffffffffffffffff16146119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab90614ae5565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546119dc9190614d12565b6119e69190614d12565b60148190555060636014541115611a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2990614f6a565b60405180910390fd5b505050565b611a3f6129d8565b73ffffffffffffffffffffffffffffffffffffffff16611a5d611af2565b73ffffffffffffffffffffffffffffffffffffffff1614611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa90614ae5565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611b506129d8565b73ffffffffffffffffffffffffffffffffffffffff16611b6e611af2565b73ffffffffffffffffffffffffffffffffffffffff1614611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb90614ae5565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611bf090614a67565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1c90614a67565b8015611c695780601f10611c3e57610100808354040283529160200191611c69565b820191906000526020600020905b815481529060010190602001808311611c4c57829003601f168201915b5050505050905090565b611c7b6129d8565b73ffffffffffffffffffffffffffffffffffffffff16611c99611af2565b73ffffffffffffffffffffffffffffffffffffffff1614611cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce690614ae5565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7590614ffc565b60405180910390fd5b611d888282613a09565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611db36129d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e679061508e565b60405180910390fd5b611e84611e7b6129d8565b858584036129e0565b600191505092915050565b600e5481565b6000611ea9611ea26129d8565b8484612bab565b6001905092915050565b611ebb6129d8565b73ffffffffffffffffffffffffffffffffffffffff16611ed9611af2565b73ffffffffffffffffffffffffffffffffffffffff1614611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690614ae5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61202a6129d8565b73ffffffffffffffffffffffffffffffffffffffff16612048611af2565b73ffffffffffffffffffffffffffffffffffffffff161461209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590614ae5565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161213b91906146ec565b60405180910390a25050565b61214f6129d8565b73ffffffffffffffffffffffffffffffffffffffff1661216d611af2565b73ffffffffffffffffffffffffffffffffffffffff16146121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614ae5565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a546019546121eb9190614d12565b6121f59190614d12565b60188190555060636018541115612241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223890614f6a565b60405180910390fd5b505050565b61224e6129d8565b73ffffffffffffffffffffffffffffffffffffffff1661226c611af2565b73ffffffffffffffffffffffffffffffffffffffff16146122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b990614ae5565b60405180910390fd5b670de0b6b3a76400006103e860056122d8610fd4565b6122e29190614b34565b6122ec9190614bbd565b6122f69190614bbd565b811015612338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232f90615120565b60405180910390fd5b670de0b6b3a76400008161234c9190614b34565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006123786129d8565b73ffffffffffffffffffffffffffffffffffffffff16612396611af2565b73ffffffffffffffffffffffffffffffffffffffff16146123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e390614ae5565b60405180910390fd5b620186a060016123fa610fd4565b6124049190614b34565b61240e9190614bbd565b821015612450576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612447906151b2565b60405180910390fd5b6103e8600561245d610fd4565b6124679190614b34565b6124719190614bbd565b8211156124b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124aa90615244565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006125606129d8565b73ffffffffffffffffffffffffffffffffffffffff1661257e611af2565b73ffffffffffffffffffffffffffffffffffffffff16146125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb90614ae5565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b6126046129d8565b73ffffffffffffffffffffffffffffffffffffffff16612622611af2565b73ffffffffffffffffffffffffffffffffffffffff1614612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266f90614ae5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126df906152d6565b60405180910390fd5b6126f181613943565b50565b601a5481565b600a5481565b600061270a6129d8565b73ffffffffffffffffffffffffffffffffffffffff16612728611af2565b73ffffffffffffffffffffffffffffffffffffffff161461277e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277590614ae5565b60405180910390fd5b600f5460105461278e9190614d12565b42116127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c690615342565b60405180910390fd5b6103e8821115612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b906153d4565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016128769190614867565b602060405180830381865afa158015612893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b79190615409565b905060006128e26127106128d48685613aaa90919063ffffffff16565b613ac090919063ffffffff16565b9050600081111561291b5761291a7f000000000000000000000000000000000000000000000000000000000000000061dead83613ad6565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561298857600080fd5b505af115801561299c573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a47906154a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab79061553a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b9e91906147bd565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c12906155cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c829061565e565b60405180910390fd5b6000811415612ca557612ca083836000613ad6565b61393e565b601160009054906101000a900460ff161561336857612cc2611af2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d305750612d00611af2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d695750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612da3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dbc5750600560149054906101000a900460ff16155b1561336757601160019054906101000a900460ff16612eb657601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e765750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eac906156ca565b60405180910390fd5b5b601360009054906101000a900460ff161561307e57612ed3611af2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f5a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fb257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561307d5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302f90615782565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131215750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131c85760085481111561316b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316290615814565b60405180910390fd5b600a5461317783611585565b826131829190614d12565b11156131c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ba90615880565b60405180910390fd5b613366565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561326b5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132ba576008548111156132b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ac90615912565b60405180910390fd5b613365565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661336457600a5461331783611585565b826133229190614d12565b1115613363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335a90615880565b60405180910390fd5b5b5b5b5b5b600061337330611585565b9050600060095482101590508080156133985750601160029054906101000a900460ff165b80156133b15750600560149054906101000a900460ff16155b80156134075750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561345d5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134b35750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134f7576001600560146101000a81548160ff0219169083151502179055506134db613d57565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff1615801561355d5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156135755750600c60009054906101000a900460ff165b80156135905750600d54600e5461358c9190614d12565b4210155b80156135e65750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135f5576135f361403e565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136ab5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136b557600090505b6000811561392e57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561371857506000601854115b156137e557613745606461373760185488613aaa90919063ffffffff16565b613ac090919063ffffffff16565b9050601854601a54826137589190614b34565b6137629190614bbd565b601d60008282546137739190614d12565b92505081905550601854601b548261378b9190614b34565b6137959190614bbd565b601e60008282546137a69190614d12565b92505081905550601854601954826137be9190614b34565b6137c89190614bbd565b601c60008282546137d99190614d12565b9250508190555061390a565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561384057506000601454115b156139095761386d606461385f60145488613aaa90919063ffffffff16565b613ac090919063ffffffff16565b9050601454601654826138809190614b34565b61388a9190614bbd565b601d600082825461389b9190614d12565b92505081905550601454601754826138b39190614b34565b6138bd9190614bbd565b601e60008282546138ce9190614d12565b92505081905550601454601554826138e69190614b34565b6138f09190614bbd565b601c60008282546139019190614d12565b925050819055505b5b600081111561391f5761391e873083613ad6565b5b808561392b9190615932565b94505b613939878787613ad6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613ab89190614b34565b905092915050565b60008183613ace9190614bbd565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3d906155cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bad9061565e565b60405180910390fd5b613bc1838383614204565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3e906159d8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613cda9190614d12565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d3e91906147bd565b60405180910390a3613d51848484614209565b50505050565b6000613d6230611585565b90506000601e54601c54601d54613d799190614d12565b613d839190614d12565b9050600080831480613d955750600082145b15613da25750505061403c565b6014600954613db19190614b34565b831115613dca576014600954613dc79190614b34565b92505b6000600283601d5486613ddd9190614b34565b613de79190614bbd565b613df19190614bbd565b90506000613e08828661420e90919063ffffffff16565b90506000479050613e1882614224565b6000613e2d824761420e90919063ffffffff16565b90506000613e5887613e4a601c5485613aaa90919063ffffffff16565b613ac090919063ffffffff16565b90506000613e8388613e75601e5486613aaa90919063ffffffff16565b613ac090919063ffffffff16565b90506000818385613e949190615932565b613e9e9190615932565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613efe90615a29565b60006040518083038185875af1925050503d8060008114613f3b576040519150601f19603f3d011682016040523d82523d6000602084013e613f40565b606091505b505080985050600087118015613f565750600081115b15613fa357613f658782614461565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613f9a93929190615a3e565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fe990615a29565b60006040518083038185875af1925050503d8060008114614026576040519150601f19603f3d011682016040523d82523d6000602084013e61402b565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016140a29190614867565b602060405180830381865afa1580156140bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140e39190615409565b90506000614110612710614102600b5485613aaa90919063ffffffff16565b613ac090919063ffffffff16565b90506000811115614149576141487f000000000000000000000000000000000000000000000000000000000000000061dead83613ad6565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156141b657600080fd5b505af11580156141ca573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b6000818361421c9190615932565b905092915050565b6000600267ffffffffffffffff81111561424157614240615a75565b5b60405190808252806020026020018201604052801561426f5781602001602082028036833780820191505090505b509050308160008151811061428757614286615aa4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561432c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143509190615ae8565b8160018151811061436457614363615aa4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143c9307f0000000000000000000000000000000000000000000000000000000000000000846129e0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161442b959493929190615c0e565b600060405180830381600087803b15801561444557600080fd5b505af1158015614459573d6000803e3d6000fd5b505050505050565b61448c307f0000000000000000000000000000000000000000000000000000000000000000846129e0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016144f396959493929190615c68565b60606040518083038185885af1158015614511573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145369190615cc9565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561457757808201518184015260208101905061455c565b83811115614586576000848401525b50505050565b6000601f19601f8301169050919050565b60006145a88261453d565b6145b28185614548565b93506145c2818560208601614559565b6145cb8161458c565b840191505092915050565b600060208201905081810360008301526145f0818461459d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614628826145fd565b9050919050565b6146388161461d565b811461464357600080fd5b50565b6000813590506146558161462f565b92915050565b6000819050919050565b61466e8161465b565b811461467957600080fd5b50565b60008135905061468b81614665565b92915050565b600080604083850312156146a8576146a76145f8565b5b60006146b685828601614646565b92505060206146c78582860161467c565b9150509250929050565b60008115159050919050565b6146e6816146d1565b82525050565b600060208201905061470160008301846146dd565b92915050565b60006020828403121561471d5761471c6145f8565b5b600061472b84828501614646565b91505092915050565b6000819050919050565b600061475961475461474f846145fd565b614734565b6145fd565b9050919050565b600061476b8261473e565b9050919050565b600061477d82614760565b9050919050565b61478d81614772565b82525050565b60006020820190506147a86000830184614784565b92915050565b6147b78161465b565b82525050565b60006020820190506147d260008301846147ae565b92915050565b6000602082840312156147ee576147ed6145f8565b5b60006147fc8482850161467c565b91505092915050565b60008060006060848603121561481e5761481d6145f8565b5b600061482c86828701614646565b935050602061483d86828701614646565b925050604061484e8682870161467c565b9150509250925092565b6148618161461d565b82525050565b600060208201905061487c6000830184614858565b92915050565b600060ff82169050919050565b61489881614882565b82525050565b60006020820190506148b3600083018461488f565b92915050565b6148c2816146d1565b81146148cd57600080fd5b50565b6000813590506148df816148b9565b92915050565b6000806000606084860312156148fe576148fd6145f8565b5b600061490c8682870161467c565b935050602061491d8682870161467c565b925050604061492e868287016148d0565b9150509250925092565b6000806040838503121561494f5761494e6145f8565b5b600061495d85828601614646565b925050602061496e858286016148d0565b9150509250929050565b600080600060608486031215614991576149906145f8565b5b600061499f8682870161467c565b93505060206149b08682870161467c565b92505060406149c18682870161467c565b9150509250925092565b6000602082840312156149e1576149e06145f8565b5b60006149ef848285016148d0565b91505092915050565b60008060408385031215614a0f57614a0e6145f8565b5b6000614a1d85828601614646565b9250506020614a2e85828601614646565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a7f57607f821691505b60208210811415614a9357614a92614a38565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614acf602083614548565b9150614ada82614a99565b602082019050919050565b60006020820190508181036000830152614afe81614ac2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b3f8261465b565b9150614b4a8361465b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b8357614b82614b05565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc88261465b565b9150614bd38361465b565b925082614be357614be2614b8e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614c4a602f83614548565b9150614c5582614bee565b604082019050919050565b60006020820190508181036000830152614c7981614c3d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614cdc602883614548565b9150614ce782614c80565b604082019050919050565b60006020820190508181036000830152614d0b81614ccf565b9050919050565b6000614d1d8261465b565b9150614d288361465b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d5d57614d5c614b05565b5b828201905092915050565b7f43616c6c6572206973206e6f7420746865204d61726b6574696e672057616c6c60008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dc4602283614548565b9150614dcf82614d68565b604082019050919050565b60006020820190508181036000830152614df381614db7565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614e56603383614548565b9150614e6182614dfa565b604082019050919050565b60006020820190508181036000830152614e8581614e49565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614ee8603083614548565b9150614ef382614e8c565b604082019050919050565b60006020820190508181036000830152614f1781614edb565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614f54601d83614548565b9150614f5f82614f1e565b602082019050919050565b60006020820190508181036000830152614f8381614f47565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fe6603983614548565b9150614ff182614f8a565b604082019050919050565b6000602082019050818103600083015261501581614fd9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000615078602583614548565b91506150838261501c565b604082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061510a602483614548565b9150615115826150ae565b604082019050919050565b60006020820190508181036000830152615139816150fd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061519c603583614548565b91506151a782615140565b604082019050919050565b600060208201905081810360008301526151cb8161518f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061522e603483614548565b9150615239826151d2565b604082019050919050565b6000602082019050818103600083015261525d81615221565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006152c0602683614548565b91506152cb82615264565b604082019050919050565b600060208201905081810360008301526152ef816152b3565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061532c602083614548565b9150615337826152f6565b602082019050919050565b6000602082019050818103600083015261535b8161531f565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006153be602a83614548565b91506153c982615362565b604082019050919050565b600060208201905081810360008301526153ed816153b1565b9050919050565b60008151905061540381614665565b92915050565b60006020828403121561541f5761541e6145f8565b5b600061542d848285016153f4565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615492602483614548565b915061549d82615436565b604082019050919050565b600060208201905081810360008301526154c181615485565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615524602283614548565b915061552f826154c8565b604082019050919050565b6000602082019050818103600083015261555381615517565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155b6602583614548565b91506155c18261555a565b604082019050919050565b600060208201905081810360008301526155e5816155a9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615648602383614548565b9150615653826155ec565b604082019050919050565b600060208201905081810360008301526156778161563b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006156b4601683614548565b91506156bf8261567e565b602082019050919050565b600060208201905081810360008301526156e3816156a7565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061576c604983614548565b9150615777826156ea565b606082019050919050565b6000602082019050818103600083015261579b8161575f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006157fe603583614548565b9150615809826157a2565b604082019050919050565b6000602082019050818103600083015261582d816157f1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061586a601383614548565b915061587582615834565b602082019050919050565b600060208201905081810360008301526158998161585d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006158fc603683614548565b9150615907826158a0565b604082019050919050565b6000602082019050818103600083015261592b816158ef565b9050919050565b600061593d8261465b565b91506159488361465b565b92508282101561595b5761595a614b05565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006159c2602683614548565b91506159cd82615966565b604082019050919050565b600060208201905081810360008301526159f1816159b5565b9050919050565b600081905092915050565b50565b6000615a136000836159f8565b9150615a1e82615a03565b600082019050919050565b6000615a3482615a06565b9150819050919050565b6000606082019050615a5360008301866147ae565b615a6060208301856147ae565b615a6d60408301846147ae565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615ae28161462f565b92915050565b600060208284031215615afe57615afd6145f8565b5b6000615b0c84828501615ad3565b91505092915050565b6000819050919050565b6000615b3a615b35615b3084615b15565b614734565b61465b565b9050919050565b615b4a81615b1f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b858161461d565b82525050565b6000615b978383615b7c565b60208301905092915050565b6000602082019050919050565b6000615bbb82615b50565b615bc58185615b5b565b9350615bd083615b6c565b8060005b83811015615c01578151615be88882615b8b565b9750615bf383615ba3565b925050600181019050615bd4565b5085935050505092915050565b600060a082019050615c2360008301886147ae565b615c306020830187615b41565b8181036040830152615c428186615bb0565b9050615c516060830185614858565b615c5e60808301846147ae565b9695505050505050565b600060c082019050615c7d6000830189614858565b615c8a60208301886147ae565b615c976040830187615b41565b615ca46060830186615b41565b615cb16080830185614858565b615cbe60a08301846147ae565b979650505050505050565b600080600060608486031215615ce257615ce16145f8565b5b6000615cf0868287016153f4565b9350506020615d01868287016153f4565b9250506040615d12868287016153f4565b915050925092509256fea264697066735822122065e82cafefb6272a5f1250f9f225472aaf7a3af8ff167411933f4c1828d416bf64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103bc5760003560e01c80638a8c523c116101f2578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610e25578063f637434214610e4e578063f8b45b0514610e79578063fe72b27a14610ea4576103c3565b8063dd62ed3e14610d67578063e2f4560514610da4578063e884f26014610dcf578063f11a24d314610dfa576103c3565b8063c876d0b9116100dc578063c876d0b914610ca9578063c8c8ebe414610cd4578063d257b34f14610cff578063d85ba06314610d3c576103c3565b8063bbc0c74214610c03578063c024666814610c2e578063c17b5b8c14610c57578063c18bc19514610c80576103c3565b80639ec22c0e11610185578063a4c82a0011610154578063a4c82a0014610b35578063a9059cbb14610b60578063aacebbe314610b9d578063b62496f514610bc6576103c3565b80639ec22c0e14610a775780639fccce3214610aa2578063a0d82dc514610acd578063a457c2d714610af8576103c3565b8063924de9b7116101c1578063924de9b7146109cf57806395d89b41146109f85780639a7a23d614610a235780639c3b4fdc14610a4c576103c3565b80638a8c523c146109375780638da5cb5b1461094e5780638ea5220f1461097957806392136913146109a4576103c3565b8063313ce567116102e257806370a08231116102755780637571336a116102445780637571336a1461088f57806375f0a874146108b85780637bce5a04146108e35780638095d5641461090e576103c3565b806370a08231146107e7578063715018a614610824578063730c18881461083b578063751039fc14610864576103c3565b80634fbee193116102b15780634fbee1931461073d57806369e1ea7f1461077a5780636a486a8e146107915780636ddd1713146107bc576103c3565b8063313ce5671461067f57806339509351146106aa57806349bd5a5e146106e75780634a62bb6514610712576103c3565b8063199ffc721161035a57806323b872dd1161032957806323b872dd146105c157806327c8f835146105fe5780632c3e486c146106295780632e82f1a014610654576103c3565b8063199ffc72146105175780631a8145bb146105425780631f3fed8f1461056d578063203e727e14610598576103c3565b80631694505e116103965780631694505e1461046d57806318160ddd146104985780631816467f146104c3578063184c16c5146104ec576103c3565b806306fdde03146103c8578063095ea7b3146103f357806310d5de5314610430576103c3565b366103c357005b600080fd5b3480156103d457600080fd5b506103dd610ee1565b6040516103ea91906145d6565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190614691565b610f73565b60405161042791906146ec565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190614707565b610f91565b60405161046491906146ec565b60405180910390f35b34801561047957600080fd5b50610482610fb0565b60405161048f9190614793565b60405180910390f35b3480156104a457600080fd5b506104ad610fd4565b6040516104ba91906147bd565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190614707565b610fde565b005b3480156104f857600080fd5b5061050161111a565b60405161050e91906147bd565b60405180910390f35b34801561052357600080fd5b5061052c611120565b60405161053991906147bd565b60405180910390f35b34801561054e57600080fd5b50610557611126565b60405161056491906147bd565b60405180910390f35b34801561057957600080fd5b5061058261112c565b60405161058f91906147bd565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba91906147d8565b611132565b005b3480156105cd57600080fd5b506105e860048036038101906105e39190614805565b611241565b6040516105f591906146ec565b60405180910390f35b34801561060a57600080fd5b50610613611339565b6040516106209190614867565b60405180910390f35b34801561063557600080fd5b5061063e61133f565b60405161064b91906147bd565b60405180910390f35b34801561066057600080fd5b50610669611345565b60405161067691906146ec565b60405180910390f35b34801561068b57600080fd5b50610694611358565b6040516106a1919061489e565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190614691565b611361565b6040516106de91906146ec565b60405180910390f35b3480156106f357600080fd5b506106fc61140d565b6040516107099190614867565b60405180910390f35b34801561071e57600080fd5b50610727611431565b60405161073491906146ec565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f9190614707565b611444565b60405161077191906146ec565b60405180910390f35b34801561078657600080fd5b5061078f61149a565b005b34801561079d57600080fd5b506107a661156c565b6040516107b391906147bd565b60405180910390f35b3480156107c857600080fd5b506107d1611572565b6040516107de91906146ec565b60405180910390f35b3480156107f357600080fd5b5061080e60048036038101906108099190614707565b611585565b60405161081b91906147bd565b60405180910390f35b34801561083057600080fd5b506108396115cd565b005b34801561084757600080fd5b50610862600480360381019061085d91906148e5565b611655565b005b34801561087057600080fd5b50610879611795565b60405161088691906146ec565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190614938565b611835565b005b3480156108c457600080fd5b506108cd61190c565b6040516108da9190614867565b60405180910390f35b3480156108ef57600080fd5b506108f8611932565b60405161090591906147bd565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190614978565b611938565b005b34801561094357600080fd5b5061094c611a37565b005b34801561095a57600080fd5b50610963611af2565b6040516109709190614867565b60405180910390f35b34801561098557600080fd5b5061098e611b1c565b60405161099b9190614867565b60405180910390f35b3480156109b057600080fd5b506109b9611b42565b6040516109c691906147bd565b60405180910390f35b3480156109db57600080fd5b506109f660048036038101906109f191906149cb565b611b48565b005b348015610a0457600080fd5b50610a0d611be1565b604051610a1a91906145d6565b60405180910390f35b348015610a2f57600080fd5b50610a4a6004803603810190610a459190614938565b611c73565b005b348015610a5857600080fd5b50610a61611d8c565b604051610a6e91906147bd565b60405180910390f35b348015610a8357600080fd5b50610a8c611d92565b604051610a9991906147bd565b60405180910390f35b348015610aae57600080fd5b50610ab7611d98565b604051610ac491906147bd565b60405180910390f35b348015610ad957600080fd5b50610ae2611d9e565b604051610aef91906147bd565b60405180910390f35b348015610b0457600080fd5b50610b1f6004803603810190610b1a9190614691565b611da4565b604051610b2c91906146ec565b60405180910390f35b348015610b4157600080fd5b50610b4a611e8f565b604051610b5791906147bd565b60405180910390f35b348015610b6c57600080fd5b50610b876004803603810190610b829190614691565b611e95565b604051610b9491906146ec565b60405180910390f35b348015610ba957600080fd5b50610bc46004803603810190610bbf9190614707565b611eb3565b005b348015610bd257600080fd5b50610bed6004803603810190610be89190614707565b611fef565b604051610bfa91906146ec565b60405180910390f35b348015610c0f57600080fd5b50610c1861200f565b604051610c2591906146ec565b60405180910390f35b348015610c3a57600080fd5b50610c556004803603810190610c509190614938565b612022565b005b348015610c6357600080fd5b50610c7e6004803603810190610c799190614978565b612147565b005b348015610c8c57600080fd5b50610ca76004803603810190610ca291906147d8565b612246565b005b348015610cb557600080fd5b50610cbe612355565b604051610ccb91906146ec565b60405180910390f35b348015610ce057600080fd5b50610ce9612368565b604051610cf691906147bd565b60405180910390f35b348015610d0b57600080fd5b50610d266004803603810190610d2191906147d8565b61236e565b604051610d3391906146ec565b60405180910390f35b348015610d4857600080fd5b50610d516124c3565b604051610d5e91906147bd565b60405180910390f35b348015610d7357600080fd5b50610d8e6004803603810190610d8991906149f8565b6124c9565b604051610d9b91906147bd565b60405180910390f35b348015610db057600080fd5b50610db9612550565b604051610dc691906147bd565b60405180910390f35b348015610ddb57600080fd5b50610de4612556565b604051610df191906146ec565b60405180910390f35b348015610e0657600080fd5b50610e0f6125f6565b604051610e1c91906147bd565b60405180910390f35b348015610e3157600080fd5b50610e4c6004803603810190610e479190614707565b6125fc565b005b348015610e5a57600080fd5b50610e636126f4565b604051610e7091906147bd565b60405180910390f35b348015610e8557600080fd5b50610e8e6126fa565b604051610e9b91906147bd565b60405180910390f35b348015610eb057600080fd5b50610ecb6004803603810190610ec691906147d8565b612700565b604051610ed891906146ec565b60405180910390f35b606060038054610ef090614a67565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1c90614a67565b8015610f695780601f10610f3e57610100808354040283529160200191610f69565b820191906000526020600020905b815481529060010190602001808311610f4c57829003601f168201915b5050505050905090565b6000610f87610f806129d8565b84846129e0565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610fe66129d8565b73ffffffffffffffffffffffffffffffffffffffff16611004611af2565b73ffffffffffffffffffffffffffffffffffffffff161461105a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105190614ae5565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b61113a6129d8565b73ffffffffffffffffffffffffffffffffffffffff16611158611af2565b73ffffffffffffffffffffffffffffffffffffffff16146111ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a590614ae5565b60405180910390fd5b670de0b6b3a76400006103e860016111c4610fd4565b6111ce9190614b34565b6111d89190614bbd565b6111e29190614bbd565b811015611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90614c60565b60405180910390fd5b670de0b6b3a7640000816112389190614b34565b60088190555050565b600061124e848484612bab565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112996129d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614cf2565b60405180910390fd5b61132d856113256129d8565b8584036129e0565b60019150509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061140361136e6129d8565b84846001600061137c6129d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113fe9190614d12565b6129e0565b6001905092915050565b7f000000000000000000000000f545921d299c073afca5e58de33be1367901615181565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461152a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152190614dda565b60405180910390fd5b60006019819055506000601a819055506000601b8190555060006015819055506000601681905550600060178190555060006014819055506000601881905550565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115d56129d8565b73ffffffffffffffffffffffffffffffffffffffff166115f3611af2565b73ffffffffffffffffffffffffffffffffffffffff1614611649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164090614ae5565b60405180910390fd5b6116536000613943565b565b61165d6129d8565b73ffffffffffffffffffffffffffffffffffffffff1661167b611af2565b73ffffffffffffffffffffffffffffffffffffffff16146116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c890614ae5565b60405180910390fd5b610258831015611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170d90614e6c565b60405180910390fd5b6103e88211158015611729575060008210155b611768576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175f90614efe565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b600061179f6129d8565b73ffffffffffffffffffffffffffffffffffffffff166117bd611af2565b73ffffffffffffffffffffffffffffffffffffffff1614611813576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180a90614ae5565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61183d6129d8565b73ffffffffffffffffffffffffffffffffffffffff1661185b611af2565b73ffffffffffffffffffffffffffffffffffffffff16146118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a890614ae5565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6119406129d8565b73ffffffffffffffffffffffffffffffffffffffff1661195e611af2565b73ffffffffffffffffffffffffffffffffffffffff16146119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab90614ae5565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546119dc9190614d12565b6119e69190614d12565b60148190555060636014541115611a32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2990614f6a565b60405180910390fd5b505050565b611a3f6129d8565b73ffffffffffffffffffffffffffffffffffffffff16611a5d611af2565b73ffffffffffffffffffffffffffffffffffffffff1614611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa90614ae5565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b611b506129d8565b73ffffffffffffffffffffffffffffffffffffffff16611b6e611af2565b73ffffffffffffffffffffffffffffffffffffffff1614611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb90614ae5565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611bf090614a67565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1c90614a67565b8015611c695780601f10611c3e57610100808354040283529160200191611c69565b820191906000526020600020905b815481529060010190602001808311611c4c57829003601f168201915b5050505050905090565b611c7b6129d8565b73ffffffffffffffffffffffffffffffffffffffff16611c99611af2565b73ffffffffffffffffffffffffffffffffffffffff1614611cef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce690614ae5565b60405180910390fd5b7f000000000000000000000000f545921d299c073afca5e58de33be1367901615173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7590614ffc565b60405180910390fd5b611d888282613a09565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611db36129d8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e679061508e565b60405180910390fd5b611e84611e7b6129d8565b858584036129e0565b600191505092915050565b600e5481565b6000611ea9611ea26129d8565b8484612bab565b6001905092915050565b611ebb6129d8565b73ffffffffffffffffffffffffffffffffffffffff16611ed9611af2565b73ffffffffffffffffffffffffffffffffffffffff1614611f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2690614ae5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b61202a6129d8565b73ffffffffffffffffffffffffffffffffffffffff16612048611af2565b73ffffffffffffffffffffffffffffffffffffffff161461209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590614ae5565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161213b91906146ec565b60405180910390a25050565b61214f6129d8565b73ffffffffffffffffffffffffffffffffffffffff1661216d611af2565b73ffffffffffffffffffffffffffffffffffffffff16146121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90614ae5565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a546019546121eb9190614d12565b6121f59190614d12565b60188190555060636018541115612241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223890614f6a565b60405180910390fd5b505050565b61224e6129d8565b73ffffffffffffffffffffffffffffffffffffffff1661226c611af2565b73ffffffffffffffffffffffffffffffffffffffff16146122c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b990614ae5565b60405180910390fd5b670de0b6b3a76400006103e860056122d8610fd4565b6122e29190614b34565b6122ec9190614bbd565b6122f69190614bbd565b811015612338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232f90615120565b60405180910390fd5b670de0b6b3a76400008161234c9190614b34565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006123786129d8565b73ffffffffffffffffffffffffffffffffffffffff16612396611af2565b73ffffffffffffffffffffffffffffffffffffffff16146123ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e390614ae5565b60405180910390fd5b620186a060016123fa610fd4565b6124049190614b34565b61240e9190614bbd565b821015612450576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612447906151b2565b60405180910390fd5b6103e8600561245d610fd4565b6124679190614b34565b6124719190614bbd565b8211156124b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124aa90615244565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006125606129d8565b73ffffffffffffffffffffffffffffffffffffffff1661257e611af2565b73ffffffffffffffffffffffffffffffffffffffff16146125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb90614ae5565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b6126046129d8565b73ffffffffffffffffffffffffffffffffffffffff16612622611af2565b73ffffffffffffffffffffffffffffffffffffffff1614612678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266f90614ae5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156126e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126df906152d6565b60405180910390fd5b6126f181613943565b50565b601a5481565b600a5481565b600061270a6129d8565b73ffffffffffffffffffffffffffffffffffffffff16612728611af2565b73ffffffffffffffffffffffffffffffffffffffff161461277e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277590614ae5565b60405180910390fd5b600f5460105461278e9190614d12565b42116127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c690615342565b60405180910390fd5b6103e8821115612814576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280b906153d4565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000f545921d299c073afca5e58de33be136790161516040518263ffffffff1660e01b81526004016128769190614867565b602060405180830381865afa158015612893573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b79190615409565b905060006128e26127106128d48685613aaa90919063ffffffff16565b613ac090919063ffffffff16565b9050600081111561291b5761291a7f000000000000000000000000f545921d299c073afca5e58de33be1367901615161dead83613ad6565b5b60007f000000000000000000000000f545921d299c073afca5e58de33be1367901615190508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561298857600080fd5b505af115801561299c573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a47906154a8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab79061553a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b9e91906147bd565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c12906155cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c829061565e565b60405180910390fd5b6000811415612ca557612ca083836000613ad6565b61393e565b601160009054906101000a900460ff161561336857612cc2611af2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d305750612d00611af2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d695750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612da3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dbc5750600560149054906101000a900460ff16155b1561336757601160019054906101000a900460ff16612eb657601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e765750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eac906156ca565b60405180910390fd5b5b601360009054906101000a900460ff161561307e57612ed3611af2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f5a57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fb257507f000000000000000000000000f545921d299c073afca5e58de33be1367901615173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561307d5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302f90615782565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131215750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131c85760085481111561316b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316290615814565b60405180910390fd5b600a5461317783611585565b826131829190614d12565b11156131c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ba90615880565b60405180910390fd5b613366565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561326b5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132ba576008548111156132b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ac90615912565b60405180910390fd5b613365565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661336457600a5461331783611585565b826133229190614d12565b1115613363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335a90615880565b60405180910390fd5b5b5b5b5b5b600061337330611585565b9050600060095482101590508080156133985750601160029054906101000a900460ff165b80156133b15750600560149054906101000a900460ff16155b80156134075750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561345d5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134b35750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134f7576001600560146101000a81548160ff0219169083151502179055506134db613d57565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff1615801561355d5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156135755750600c60009054906101000a900460ff165b80156135905750600d54600e5461358c9190614d12565b4210155b80156135e65750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135f5576135f361403e565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136ab5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156136b557600090505b6000811561392e57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561371857506000601854115b156137e557613745606461373760185488613aaa90919063ffffffff16565b613ac090919063ffffffff16565b9050601854601a54826137589190614b34565b6137629190614bbd565b601d60008282546137739190614d12565b92505081905550601854601b548261378b9190614b34565b6137959190614bbd565b601e60008282546137a69190614d12565b92505081905550601854601954826137be9190614b34565b6137c89190614bbd565b601c60008282546137d99190614d12565b9250508190555061390a565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561384057506000601454115b156139095761386d606461385f60145488613aaa90919063ffffffff16565b613ac090919063ffffffff16565b9050601454601654826138809190614b34565b61388a9190614bbd565b601d600082825461389b9190614d12565b92505081905550601454601754826138b39190614b34565b6138bd9190614bbd565b601e60008282546138ce9190614d12565b92505081905550601454601554826138e69190614b34565b6138f09190614bbd565b601c60008282546139019190614d12565b925050819055505b5b600081111561391f5761391e873083613ad6565b5b808561392b9190615932565b94505b613939878787613ad6565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613ab89190614b34565b905092915050565b60008183613ace9190614bbd565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3d906155cc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bad9061565e565b60405180910390fd5b613bc1838383614204565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c3e906159d8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613cda9190614d12565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d3e91906147bd565b60405180910390a3613d51848484614209565b50505050565b6000613d6230611585565b90506000601e54601c54601d54613d799190614d12565b613d839190614d12565b9050600080831480613d955750600082145b15613da25750505061403c565b6014600954613db19190614b34565b831115613dca576014600954613dc79190614b34565b92505b6000600283601d5486613ddd9190614b34565b613de79190614bbd565b613df19190614bbd565b90506000613e08828661420e90919063ffffffff16565b90506000479050613e1882614224565b6000613e2d824761420e90919063ffffffff16565b90506000613e5887613e4a601c5485613aaa90919063ffffffff16565b613ac090919063ffffffff16565b90506000613e8388613e75601e5486613aaa90919063ffffffff16565b613ac090919063ffffffff16565b90506000818385613e949190615932565b613e9e9190615932565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613efe90615a29565b60006040518083038185875af1925050503d8060008114613f3b576040519150601f19603f3d011682016040523d82523d6000602084013e613f40565b606091505b505080985050600087118015613f565750600081115b15613fa357613f658782614461565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613f9a93929190615a3e565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613fe990615a29565b60006040518083038185875af1925050503d8060008114614026576040519150601f19603f3d011682016040523d82523d6000602084013e61402b565b606091505b505080985050505050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000f545921d299c073afca5e58de33be136790161516040518263ffffffff1660e01b81526004016140a29190614867565b602060405180830381865afa1580156140bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140e39190615409565b90506000614110612710614102600b5485613aaa90919063ffffffff16565b613ac090919063ffffffff16565b90506000811115614149576141487f000000000000000000000000f545921d299c073afca5e58de33be1367901615161dead83613ad6565b5b60007f000000000000000000000000f545921d299c073afca5e58de33be1367901615190508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156141b657600080fd5b505af11580156141ca573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b6000818361421c9190615932565b905092915050565b6000600267ffffffffffffffff81111561424157614240615a75565b5b60405190808252806020026020018201604052801561426f5781602001602082028036833780820191505090505b509050308160008151811061428757614286615aa4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561432c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143509190615ae8565b8160018151811061436457614363615aa4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506143c9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846129e0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161442b959493929190615c0e565b600060405180830381600087803b15801561444557600080fd5b505af1158015614459573d6000803e3d6000fd5b505050505050565b61448c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846129e0565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016144f396959493929190615c68565b60606040518083038185885af1158015614511573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145369190615cc9565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561457757808201518184015260208101905061455c565b83811115614586576000848401525b50505050565b6000601f19601f8301169050919050565b60006145a88261453d565b6145b28185614548565b93506145c2818560208601614559565b6145cb8161458c565b840191505092915050565b600060208201905081810360008301526145f0818461459d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614628826145fd565b9050919050565b6146388161461d565b811461464357600080fd5b50565b6000813590506146558161462f565b92915050565b6000819050919050565b61466e8161465b565b811461467957600080fd5b50565b60008135905061468b81614665565b92915050565b600080604083850312156146a8576146a76145f8565b5b60006146b685828601614646565b92505060206146c78582860161467c565b9150509250929050565b60008115159050919050565b6146e6816146d1565b82525050565b600060208201905061470160008301846146dd565b92915050565b60006020828403121561471d5761471c6145f8565b5b600061472b84828501614646565b91505092915050565b6000819050919050565b600061475961475461474f846145fd565b614734565b6145fd565b9050919050565b600061476b8261473e565b9050919050565b600061477d82614760565b9050919050565b61478d81614772565b82525050565b60006020820190506147a86000830184614784565b92915050565b6147b78161465b565b82525050565b60006020820190506147d260008301846147ae565b92915050565b6000602082840312156147ee576147ed6145f8565b5b60006147fc8482850161467c565b91505092915050565b60008060006060848603121561481e5761481d6145f8565b5b600061482c86828701614646565b935050602061483d86828701614646565b925050604061484e8682870161467c565b9150509250925092565b6148618161461d565b82525050565b600060208201905061487c6000830184614858565b92915050565b600060ff82169050919050565b61489881614882565b82525050565b60006020820190506148b3600083018461488f565b92915050565b6148c2816146d1565b81146148cd57600080fd5b50565b6000813590506148df816148b9565b92915050565b6000806000606084860312156148fe576148fd6145f8565b5b600061490c8682870161467c565b935050602061491d8682870161467c565b925050604061492e868287016148d0565b9150509250925092565b6000806040838503121561494f5761494e6145f8565b5b600061495d85828601614646565b925050602061496e858286016148d0565b9150509250929050565b600080600060608486031215614991576149906145f8565b5b600061499f8682870161467c565b93505060206149b08682870161467c565b92505060406149c18682870161467c565b9150509250925092565b6000602082840312156149e1576149e06145f8565b5b60006149ef848285016148d0565b91505092915050565b60008060408385031215614a0f57614a0e6145f8565b5b6000614a1d85828601614646565b9250506020614a2e85828601614646565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a7f57607f821691505b60208210811415614a9357614a92614a38565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614acf602083614548565b9150614ada82614a99565b602082019050919050565b60006020820190508181036000830152614afe81614ac2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b3f8261465b565b9150614b4a8361465b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b8357614b82614b05565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc88261465b565b9150614bd38361465b565b925082614be357614be2614b8e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614c4a602f83614548565b9150614c5582614bee565b604082019050919050565b60006020820190508181036000830152614c7981614c3d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614cdc602883614548565b9150614ce782614c80565b604082019050919050565b60006020820190508181036000830152614d0b81614ccf565b9050919050565b6000614d1d8261465b565b9150614d288361465b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d5d57614d5c614b05565b5b828201905092915050565b7f43616c6c6572206973206e6f7420746865204d61726b6574696e672057616c6c60008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000614dc4602283614548565b9150614dcf82614d68565b604082019050919050565b60006020820190508181036000830152614df381614db7565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b6000614e56603383614548565b9150614e6182614dfa565b604082019050919050565b60006020820190508181036000830152614e8581614e49565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b6000614ee8603083614548565b9150614ef382614e8c565b604082019050919050565b60006020820190508181036000830152614f1781614edb565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000614f54601d83614548565b9150614f5f82614f1e565b602082019050919050565b60006020820190508181036000830152614f8381614f47565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fe6603983614548565b9150614ff182614f8a565b604082019050919050565b6000602082019050818103600083015261501581614fd9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000615078602583614548565b91506150838261501c565b604082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061510a602483614548565b9150615115826150ae565b604082019050919050565b60006020820190508181036000830152615139816150fd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061519c603583614548565b91506151a782615140565b604082019050919050565b600060208201905081810360008301526151cb8161518f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061522e603483614548565b9150615239826151d2565b604082019050919050565b6000602082019050818103600083015261525d81615221565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006152c0602683614548565b91506152cb82615264565b604082019050919050565b600060208201905081810360008301526152ef816152b3565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b600061532c602083614548565b9150615337826152f6565b602082019050919050565b6000602082019050818103600083015261535b8161531f565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b60006153be602a83614548565b91506153c982615362565b604082019050919050565b600060208201905081810360008301526153ed816153b1565b9050919050565b60008151905061540381614665565b92915050565b60006020828403121561541f5761541e6145f8565b5b600061542d848285016153f4565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615492602483614548565b915061549d82615436565b604082019050919050565b600060208201905081810360008301526154c181615485565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000615524602283614548565b915061552f826154c8565b604082019050919050565b6000602082019050818103600083015261555381615517565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155b6602583614548565b91506155c18261555a565b604082019050919050565b600060208201905081810360008301526155e5816155a9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615648602383614548565b9150615653826155ec565b604082019050919050565b600060208201905081810360008301526156778161563b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006156b4601683614548565b91506156bf8261567e565b602082019050919050565b600060208201905081810360008301526156e3816156a7565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061576c604983614548565b9150615777826156ea565b606082019050919050565b6000602082019050818103600083015261579b8161575f565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006157fe603583614548565b9150615809826157a2565b604082019050919050565b6000602082019050818103600083015261582d816157f1565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061586a601383614548565b915061587582615834565b602082019050919050565b600060208201905081810360008301526158998161585d565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006158fc603683614548565b9150615907826158a0565b604082019050919050565b6000602082019050818103600083015261592b816158ef565b9050919050565b600061593d8261465b565b91506159488361465b565b92508282101561595b5761595a614b05565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006159c2602683614548565b91506159cd82615966565b604082019050919050565b600060208201905081810360008301526159f1816159b5565b9050919050565b600081905092915050565b50565b6000615a136000836159f8565b9150615a1e82615a03565b600082019050919050565b6000615a3482615a06565b9150819050919050565b6000606082019050615a5360008301866147ae565b615a6060208301856147ae565b615a6d60408301846147ae565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615ae28161462f565b92915050565b600060208284031215615afe57615afd6145f8565b5b6000615b0c84828501615ad3565b91505092915050565b6000819050919050565b6000615b3a615b35615b3084615b15565b614734565b61465b565b9050919050565b615b4a81615b1f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b858161461d565b82525050565b6000615b978383615b7c565b60208301905092915050565b6000602082019050919050565b6000615bbb82615b50565b615bc58185615b5b565b9350615bd083615b6c565b8060005b83811015615c01578151615be88882615b8b565b9750615bf383615ba3565b925050600181019050615bd4565b5085935050505092915050565b600060a082019050615c2360008301886147ae565b615c306020830187615b41565b8181036040830152615c428186615bb0565b9050615c516060830185614858565b615c5e60808301846147ae565b9695505050505050565b600060c082019050615c7d6000830189614858565b615c8a60208301886147ae565b615c976040830187615b41565b615ca46060830186615b41565b615cb16080830185614858565b615cbe60a08301846147ae565b979650505050505050565b600080600060608486031215615ce257615ce16145f8565b5b6000615cf0868287016153f4565b9350506020615d01868287016153f4565b9250506040615d12868287016153f4565b915050925092509256fea264697066735822122065e82cafefb6272a5f1250f9f225472aaf7a3af8ff167411933f4c1828d416bf64736f6c634300080a0033

Deployed Bytecode Sourcemap

33607:20139:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9868:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12176:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35235:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33682:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10988:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43074:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34248:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34062:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35019:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34979;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40388:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12868:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33785:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34158:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34118:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10830:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13806:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33740:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34346:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43239:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39162:282;;;;;;;;;;;;;:::i;:::-;;34834:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34426:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11159:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2987:103;;;;;;;;;;;;;:::i;:::-;;51328:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39496:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40935:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33877:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34727;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41306:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38532:155;;;;;;;;;;;;;:::i;:::-;;2336:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33914:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34869:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41198:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10087:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42327:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34801:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34302:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35059:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34945:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14606:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34210:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11549:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42835:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35456:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34386:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42137:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41717:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40671:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34644:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33947:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39883:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34693:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11828:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33989:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39678:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34764:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3245:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34907:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34029:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52687:1056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9868:100;9922:13;9955:5;9948:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9868:100;:::o;12176:210::-;12295:4;12317:39;12326:12;:10;:12::i;:::-;12340:7;12349:6;12317:8;:39::i;:::-;12374:4;12367:11;;12176:210;;;;:::o;35235:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;33682:51::-;;;:::o;10988:108::-;11049:7;11076:12;;11069:19;;10988:108;:::o;43074:157::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43181:9:::1;;;;;;;;;;;43153:38;;43170:9;43153:38;;;;;;;;;;;;43214:9;43202;;:21;;;;;;;;;;;;;;;;;;43074:157:::0;:::o;34248:47::-;;;;:::o;34062:36::-;;;;:::o;35019:33::-;;;;:::o;34979:::-;;;;:::o;40388:275::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40525:4:::1;40517;40512:1;40496:13;:11;:13::i;:::-;:17;;;;:::i;:::-;40495:26;;;;:::i;:::-;40494:35;;;;:::i;:::-;40484:6;:45;;40462:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;40648:6;40638;:17;;;;:::i;:::-;40615:20;:40;;;;40388:275:::0;:::o;12868:529::-;13008:4;13025:36;13035:6;13043:9;13054:6;13025:9;:36::i;:::-;13074:24;13101:11;:19;13113:6;13101:19;;;;;;;;;;;;;;;:33;13121:12;:10;:12::i;:::-;13101:33;;;;;;;;;;;;;;;;13074:60;;13187:6;13167:16;:26;;13145:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;13297:57;13306:6;13314:12;:10;:12::i;:::-;13347:6;13328:16;:25;13297:8;:57::i;:::-;13385:4;13378:11;;;12868:529;;;;;:::o;33785:53::-;33831:6;33785:53;:::o;34158:45::-;;;;:::o;34118:33::-;;;;;;;;;;;;;:::o;10830:93::-;10888:5;10913:2;10906:9;;10830:93;:::o;13806:297::-;13921:4;13943:130;13966:12;:10;:12::i;:::-;13993:7;14052:10;14015:11;:25;14027:12;:10;:12::i;:::-;14015:25;;;;;;;;;;;;;;;:34;14041:7;14015:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13943:8;:130::i;:::-;14091:4;14084:11;;13806:297;;;;:::o;33740:38::-;;;:::o;34346:33::-;;;;;;;;;;;;;:::o;43239:126::-;43305:4;43329:19;:28;43349:7;43329:28;;;;;;;;;;;;;;;;;;;;;;;;;43322:35;;43239:126;;;:::o;39162:282::-;39057:15;;;;;;;;;;;39043:29;;:10;:29;;;39021:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;39238:1:::1;39219:16;:20;;;;39269:1;39250:16;:20;;;;39294:1;39281:10;:14;;;;39324:1;39306:15;:19;;;;39354:1;39336:15;:19;;;;39378:1;39366:9;:13;;;;39407:1;39392:12;:16;;;;39435:1;39419:13;:17;;;;39162:282::o:0;34834:28::-;;;;:::o;34426:31::-;;;;;;;;;;;;;:::o;11159:177::-;11278:7;11310:9;:18;11320:7;11310:18;;;;;;;;;;;;;;;;11303:25;;11159:177;;;:::o;2987:103::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3052:30:::1;3079:1;3052:18;:30::i;:::-;2987:103::o:0;51328:555::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51530:3:::1;51507:19;:26;;51485:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;51657:4;51645:8;:16;;:33;;;;;51677:1;51665:8;:13;;51645:33;51623:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;51783:19;51765:15;:37;;;;51832:8;51813:16;:27;;;;51867:8;51851:13;;:24;;;;;;;;;;;;;;;;;;51328:555:::0;;;:::o;39496:121::-;39548:4;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39582:5:::1;39565:14;;:22;;;;;;;;;;;;;;;;;;39605:4;39598:11;;39496:121:::0;:::o;40935:167::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41090:4:::1;41048:31;:39;41080:6;41048:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40935:167:::0;;:::o;33877:30::-;;;;;;;;;;;;;:::o;34727:::-;;;;:::o;41306:403::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41474:13:::1;41456:15;:31;;;;41516:13;41498:15;:31;;;;41552:7;41540:9;:19;;;;41621:9;;41603:15;;41585;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;41570:12;:60;;;;41665:2;41649:12;;:18;;41641:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;41306:403:::0;;;:::o;38532:155::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38603:4:::1;38587:13;;:20;;;;;;;;;;;;;;;;;;38632:4;38618:11;;:18;;;;;;;;;;;;;;;;;;38664:15;38647:14;:32;;;;38532:155::o:0;2336:87::-;2382:7;2409:6;;;;;;;;;;;2402:13;;2336:87;:::o;33914:24::-;;;;;;;;;;;;;:::o;34869:31::-;;;;:::o;41198:100::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41283:7:::1;41269:11;;:21;;;;;;;;;;;;;;;;;;41198:100:::0;:::o;10087:104::-;10143:13;10176:7;10169:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10087:104;:::o;42327:304::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42471:13:::1;42463:21;;:4;:21;;;;42441:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;42582:41;42611:4;42617:5;42582:28;:41::i;:::-;42327:304:::0;;:::o;34801:24::-;;;;:::o;34302:35::-;;;;:::o;35059:27::-;;;;:::o;34945:25::-;;;;:::o;14606:482::-;14726:4;14748:24;14775:11;:25;14787:12;:10;:12::i;:::-;14775:25;;;;;;;;;;;;;;;:34;14801:7;14775:34;;;;;;;;;;;;;;;;14748:61;;14862:15;14842:16;:35;;14820:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14978:67;14987:12;:10;:12::i;:::-;15001:7;15029:15;15010:16;:34;14978:8;:67::i;:::-;15076:4;15069:11;;;14606:482;;;;:::o;34210:29::-;;;;:::o;11549:216::-;11671:4;11693:42;11703:12;:10;:12::i;:::-;11717:9;11728:6;11693:9;:42::i;:::-;11753:4;11746:11;;11549:216;;;;:::o;42835:231::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42995:15:::1;;;;;;;;;;;42952:59;;42975:18;42952:59;;;;;;;;;;;;43040:18;43022:15;;:36;;;;;;;;;;;;;;;;;;42835:231:::0;:::o;35456:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;34386:33::-;;;;;;;;;;;;;:::o;42137:182::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42253:8:::1;42222:19;:28;42242:7;42222:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;42293:7;42277:34;;;42302:8;42277:34;;;;;;:::i;:::-;;;;;;;;42137:182:::0;;:::o;41717:412::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41887:13:::1;41868:16;:32;;;;41930:13;41911:16;:32;;;;41967:7;41954:10;:20;;;;42039:10;;42020:16;;42001;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41985:13;:64;;;;42085:2;42068:13;;:19;;42060:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;41717:412:::0;;;:::o;40671:256::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40811:4:::1;40803;40798:1;40782:13;:11;:13::i;:::-;:17;;;;:::i;:::-;40781:26;;;;:::i;:::-;40780:35;;;;:::i;:::-;40770:6;:45;;40748:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;40912:6;40902;:17;;;;:::i;:::-;40890:9;:29;;;;40671:256:::0;:::o;34644:40::-;;;;;;;;;;;;;:::o;33947:35::-;;;;:::o;39883:497::-;39991:4;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40070:6:::1;40065:1;40049:13;:11;:13::i;:::-;:17;;;;:::i;:::-;40048:28;;;;:::i;:::-;40035:9;:41;;40013:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;40225:4;40220:1;40204:13;:11;:13::i;:::-;:17;;;;:::i;:::-;40203:26;;;;:::i;:::-;40190:9;:39;;40168:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;40341:9;40320:18;:30;;;;40368:4;40361:11;;39883:497:::0;;;:::o;34693:27::-;;;;:::o;11828:201::-;11962:7;11994:11;:18;12006:5;11994:18;;;;;;;;;;;;;;;:27;12013:7;11994:27;;;;;;;;;;;;;;;;11987:34;;11828:201;;;;:::o;33989:33::-;;;;:::o;39678:135::-;39738:4;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39778:5:::1;39755:20;;:28;;;;;;;;;;;;;;;;;;39801:4;39794:11;;39678:135:::0;:::o;34764:30::-;;;;:::o;3245:238::-;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3368:1:::1;3348:22;;:8;:22;;;;3326:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3447:28;3466:8;3447:18;:28::i;:::-;3245:238:::0;:::o;34907:31::-;;;;:::o;34029:24::-;;;;:::o;52687:1056::-;52798:4;2567:12;:10;:12::i;:::-;2556:23;;:7;:5;:7::i;:::-;:23;;;2548:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52883:19:::1;;52860:20;;:42;;;;:::i;:::-;52842:15;:60;52820:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;52992:4;52981:7;:15;;52973:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;53077:15;53054:20;:38;;;;53147:28;53178:4;:14;;;53193:13;53178:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53147:60;;53257:20;53280:44;53318:5;53280:33;53305:7;53280:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;53257:67;;53444:1;53429:12;:16;53425:110;;;53462:61;53478:13;53501:6;53510:12;53462:15;:61::i;:::-;53425:110;53610:19;53647:13;53610:51;;53672:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;53699:14;;;;;;;;;;53731:4;53724:11;;;;;52687:1056:::0;;;:::o;984:98::-;1037:7;1064:10;1057:17;;984:98;:::o;18396:380::-;18549:1;18532:19;;:5;:19;;;;18524:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18630:1;18611:21;;:7;:21;;;;18603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18714:6;18684:11;:18;18696:5;18684:18;;;;;;;;;;;;;;;:27;18703:7;18684:27;;;;;;;;;;;;;;;:36;;;;18752:7;18736:32;;18745:5;18736:32;;;18761:6;18736:32;;;;;;:::i;:::-;;;;;;;;18396:380;;;:::o;43423:5011::-;43571:1;43555:18;;:4;:18;;;;43547:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43648:1;43634:16;;:2;:16;;;;43626:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43717:1;43707:6;:11;43703:93;;;43735:28;43751:4;43757:2;43761:1;43735:15;:28::i;:::-;43778:7;;43703:93;43812:14;;;;;;;;;;;43808:2487;;;43873:7;:5;:7::i;:::-;43865:15;;:4;:15;;;;:49;;;;;43907:7;:5;:7::i;:::-;43901:13;;:2;:13;;;;43865:49;:86;;;;;43949:1;43935:16;;:2;:16;;;;43865:86;:128;;;;;43986:6;43972:21;;:2;:21;;;;43865:128;:158;;;;;44015:8;;;;;;;;;;;44014:9;43865:158;43843:2441;;;44063:13;;;;;;;;;;;44058:223;;44135:19;:25;44155:4;44135:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44164:19;:23;44184:2;44164:23;;;;;;;;;;;;;;;;;;;;;;;;;44135:52;44101:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;44058:223;44437:20;;;;;;;;;;;44433:641;;;44518:7;:5;:7::i;:::-;44512:13;;:2;:13;;;;:72;;;;;44568:15;44554:30;;:2;:30;;;;44512:72;:129;;;;;44627:13;44613:28;;:2;:28;;;;44512:129;44482:573;;;44805:12;44730:28;:39;44759:9;44730:39;;;;;;;;;;;;;;;;:87;44692:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;45019:12;44977:28;:39;45006:9;44977:39;;;;;;;;;;;;;;;:54;;;;44482:573;44433:641;45148:25;:31;45174:4;45148:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;45205:31;:35;45237:2;45205:35;;;;;;;;;;;;;;;;;;;;;;;;;45204:36;45148:92;45122:1147;;;45327:20;;45317:6;:30;;45283:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;45535:9;;45518:13;45528:2;45518:9;:13::i;:::-;45509:6;:22;;;;:::i;:::-;:35;;45475:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;45122:1147;;;45713:25;:29;45739:2;45713:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;45768:31;:37;45800:4;45768:37;;;;;;;;;;;;;;;;;;;;;;;;;45767:38;45713:92;45687:582;;;45892:20;;45882:6;:30;;45848:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;45687:582;;;46049:31;:35;46081:2;46049:35;;;;;;;;;;;;;;;;;;;;;;;;;46044:225;;46169:9;;46152:13;46162:2;46152:9;:13::i;:::-;46143:6;:22;;;;:::i;:::-;:35;;46109:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;46044:225;45687:582;45122:1147;43843:2441;43808:2487;46307:28;46338:24;46356:4;46338:9;:24::i;:::-;46307:55;;46375:12;46414:18;;46390:20;:42;;46375:57;;46463:7;:35;;;;;46487:11;;;;;;;;;;;46463:35;:61;;;;;46516:8;;;;;;;;;;;46515:9;46463:61;:110;;;;;46542:25;:31;46568:4;46542:31;;;;;;;;;;;;;;;;;;;;;;;;;46541:32;46463:110;:153;;;;;46591:19;:25;46611:4;46591:25;;;;;;;;;;;;;;;;;;;;;;;;;46590:26;46463:153;:194;;;;;46634:19;:23;46654:2;46634:23;;;;;;;;;;;;;;;;;;;;;;;;;46633:24;46463:194;46445:326;;;46695:4;46684:8;;:15;;;;;;;;;;;;;;;;;;46716:10;:8;:10::i;:::-;46754:5;46743:8;;:16;;;;;;;;;;;;;;;;;;46445:326;46802:8;;;;;;;;;;;46801:9;:55;;;;;46827:25;:29;46853:2;46827:29;;;;;;;;;;;;;;;;;;;;;;;;;46801:55;:85;;;;;46873:13;;;;;;;;;;;46801:85;:153;;;;;46939:15;;46922:14;;:32;;;;:::i;:::-;46903:15;:51;;46801:153;:196;;;;;46972:19;:25;46992:4;46972:25;;;;;;;;;;;;;;;;;;;;;;;;;46971:26;46801:196;46783:282;;;47024:29;:27;:29::i;:::-;;46783:282;47077:12;47093:8;;;;;;;;;;;47092:9;47077:24;;47203:19;:25;47223:4;47203:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;47232:19;:23;47252:2;47232:23;;;;;;;;;;;;;;;;;;;;;;;;;47203:52;47199:100;;;47282:5;47272:15;;47199:100;47311:12;47416:7;47412:969;;;47468:25;:29;47494:2;47468:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;47517:1;47501:13;;:17;47468:50;47464:768;;;47546:34;47576:3;47546:25;47557:13;;47546:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;47539:41;;47649:13;;47629:16;;47622:4;:23;;;;:::i;:::-;47621:41;;;;:::i;:::-;47599:18;;:63;;;;;;;:::i;:::-;;;;;;;;47719:13;;47705:10;;47698:4;:17;;;;:::i;:::-;47697:35;;;;:::i;:::-;47681:12;;:51;;;;;;;:::i;:::-;;;;;;;;47801:13;;47781:16;;47774:4;:23;;;;:::i;:::-;47773:41;;;;:::i;:::-;47751:18;;:63;;;;;;;:::i;:::-;;;;;;;;47464:768;;;47876:25;:31;47902:4;47876:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;47926:1;47911:12;;:16;47876:51;47872:360;;;47955:33;47984:3;47955:24;47966:12;;47955:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;47948:40;;48056:12;;48037:15;;48030:4;:22;;;;:::i;:::-;48029:39;;;;:::i;:::-;48007:18;;:61;;;;;;;:::i;:::-;;;;;;;;48124:12;;48111:9;;48104:4;:16;;;;:::i;:::-;48103:33;;;;:::i;:::-;48087:12;;:49;;;;;;;:::i;:::-;;;;;;;;48204:12;;48185:15;;48178:4;:22;;;;:::i;:::-;48177:39;;;;:::i;:::-;48155:18;;:61;;;;;;;:::i;:::-;;;;;;;;47872:360;47464:768;48259:1;48252:4;:8;48248:91;;;48281:42;48297:4;48311;48318;48281:15;:42::i;:::-;48248:91;48365:4;48355:14;;;;;:::i;:::-;;;47412:969;48393:33;48409:4;48415:2;48419:6;48393:15;:33::i;:::-;43536:4898;;;;43423:5011;;;;:::o;3643:191::-;3717:16;3736:6;;;;;;;;;;;3717:25;;3762:8;3753:6;;:17;;;;;;;;;;;;;;;;;;3817:8;3786:40;;3807:8;3786:40;;;;;;;;;;;;3706:128;3643:191;:::o;42639:188::-;42756:5;42722:25;:31;42748:4;42722:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;42813:5;42779:40;;42807:4;42779:40;;;;;;;;;;;;42639:188;;:::o;24009:98::-;24067:7;24098:1;24094;:5;;;;:::i;:::-;24087:12;;24009:98;;;;:::o;24408:::-;24466:7;24497:1;24493;:5;;;;:::i;:::-;24486:12;;24408:98;;;;:::o;15578:770::-;15736:1;15718:20;;:6;:20;;;;15710:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15820:1;15799:23;;:9;:23;;;;15791:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15875:47;15896:6;15904:9;15915:6;15875:20;:47::i;:::-;15935:21;15959:9;:17;15969:6;15959:17;;;;;;;;;;;;;;;;15935:41;;16026:6;16009:13;:23;;15987:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;16170:6;16154:13;:22;16134:9;:17;16144:6;16134:17;;;;;;;;;;;;;;;:42;;;;16222:6;16198:9;:20;16208:9;16198:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16263:9;16246:35;;16255:6;16246:35;;;16274:6;16246:35;;;;;;:::i;:::-;;;;;;;;16294:46;16314:6;16322:9;16333:6;16294:19;:46::i;:::-;15699:649;15578:770;;;:::o;49564:1756::-;49603:23;49629:24;49647:4;49629:9;:24::i;:::-;49603:50;;49664:25;49760:12;;49726:18;;49692;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;49664:108;;49783:12;49831:1;49812:15;:20;:46;;;;49857:1;49836:17;:22;49812:46;49808:85;;;49875:7;;;;;49808:85;49948:2;49927:18;;:23;;;;:::i;:::-;49909:15;:41;49905:115;;;50006:2;49985:18;;:23;;;;:::i;:::-;49967:41;;49905:115;50081:23;50194:1;50161:17;50126:18;;50108:15;:36;;;;:::i;:::-;50107:71;;;;:::i;:::-;:88;;;;:::i;:::-;50081:114;;50206:26;50235:36;50255:15;50235;:19;;:36;;;;:::i;:::-;50206:65;;50284:25;50312:21;50284:49;;50346:36;50363:18;50346:16;:36::i;:::-;50395:18;50416:44;50442:17;50416:21;:25;;:44;;;;:::i;:::-;50395:65;;50473:23;50499:81;50552:17;50499:34;50514:18;;50499:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;50473:107;;50591:17;50611:51;50644:17;50611:28;50626:12;;50611:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;50591:71;;50675:23;50732:9;50714:15;50701:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;50675:66;;50775:1;50754:18;:22;;;;50808:1;50787:18;:22;;;;50835:1;50820:12;:16;;;;50871:9;;;;;;;;;;;50863:23;;50894:9;50863:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50849:59;;;;;50943:1;50925:15;:19;:42;;;;;50966:1;50948:15;:19;50925:42;50921:278;;;50984:46;50997:15;51014;50984:12;:46::i;:::-;51050:137;51083:18;51120:15;51154:18;;51050:137;;;;;;;;:::i;:::-;;;;;;;;50921:278;51233:15;;;;;;;;;;;51225:29;;51276:21;51225:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51211:101;;;;;49592:1728;;;;;;;;;;49564:1756;:::o;51891:788::-;51948:4;51982:15;51965:14;:32;;;;52052:28;52083:4;:14;;;52098:13;52083:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52052:60;;52162:20;52185:77;52246:5;52185:42;52210:16;;52185:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;52162:100;;52382:1;52367:12;:16;52363:110;;;52400:61;52416:13;52439:6;52448:12;52400:15;:61::i;:::-;52363:110;52548:19;52585:13;52548:51;;52610:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52637:12;;;;;;;;;;52667:4;52660:11;;;;;51891:788;:::o;19376:125::-;;;;:::o;20105:124::-;;;;:::o;23652:98::-;23710:7;23741:1;23737;:5;;;;:::i;:::-;23730:12;;23652:98;;;;:::o;48442:589::-;48568:21;48606:1;48592:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48568:40;;48637:4;48619;48624:1;48619:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;48663:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48653:4;48658:1;48653:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;48698:62;48715:4;48730:15;48748:11;48698:8;:62::i;:::-;48799:15;:66;;;48880:11;48906:1;48950:4;48977;48997:15;48799:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48497:534;48442:589;:::o;49039:517::-;49187:62;49204:4;49219:15;49237:11;49187:8;:62::i;:::-;49292:15;:31;;;49331:9;49364:4;49384:11;49410:1;49453;33831:6;49522:15;49292:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;49039:517;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:619::-;8332:6;8340;8348;8397:2;8385:9;8376:7;8372:23;8368:32;8365:119;;;8403:79;;:::i;:::-;8365:119;8523:1;8548:53;8593:7;8584:6;8573:9;8569:22;8548:53;:::i;:::-;8538:63;;8494:117;8650:2;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8621:118;8778:2;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8749:118;8255:619;;;;;:::o;8880:323::-;8936:6;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:50;9178:7;9169:6;9158:9;9154:22;9136:50;:::i;:::-;9126:60;;9082:114;8880:323;;;;:::o;9209:474::-;9277:6;9285;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9587:2;9613:53;9658:7;9649:6;9638:9;9634:22;9613:53;:::i;:::-;9603:63;;9558:118;9209:474;;;;;:::o;9689:180::-;9737:77;9734:1;9727:88;9834:4;9831:1;9824:15;9858:4;9855:1;9848:15;9875:320;9919:6;9956:1;9950:4;9946:12;9936:22;;10003:1;9997:4;9993:12;10024:18;10014:81;;10080:4;10072:6;10068:17;10058:27;;10014:81;10142:2;10134:6;10131:14;10111:18;10108:38;10105:84;;;10161:18;;:::i;:::-;10105:84;9926:269;9875:320;;;:::o;10201:182::-;10341:34;10337:1;10329:6;10325:14;10318:58;10201:182;:::o;10389:366::-;10531:3;10552:67;10616:2;10611:3;10552:67;:::i;:::-;10545:74;;10628:93;10717:3;10628:93;:::i;:::-;10746:2;10741:3;10737:12;10730:19;;10389:366;;;:::o;10761:419::-;10927:4;10965:2;10954:9;10950:18;10942:26;;11014:9;11008:4;11004:20;11000:1;10989:9;10985:17;10978:47;11042:131;11168:4;11042:131;:::i;:::-;11034:139;;10761:419;;;:::o;11186:180::-;11234:77;11231:1;11224:88;11331:4;11328:1;11321:15;11355:4;11352:1;11345:15;11372:348;11412:7;11435:20;11453:1;11435:20;:::i;:::-;11430:25;;11469:20;11487:1;11469:20;:::i;:::-;11464:25;;11657:1;11589:66;11585:74;11582:1;11579:81;11574:1;11567:9;11560:17;11556:105;11553:131;;;11664:18;;:::i;:::-;11553:131;11712:1;11709;11705:9;11694:20;;11372:348;;;;:::o;11726:180::-;11774:77;11771:1;11764:88;11871:4;11868:1;11861:15;11895:4;11892:1;11885:15;11912:185;11952:1;11969:20;11987:1;11969:20;:::i;:::-;11964:25;;12003:20;12021:1;12003:20;:::i;:::-;11998:25;;12042:1;12032:35;;12047:18;;:::i;:::-;12032:35;12089:1;12086;12082:9;12077:14;;11912:185;;;;:::o;12103:234::-;12243:34;12239:1;12231:6;12227:14;12220:58;12312:17;12307:2;12299:6;12295:15;12288:42;12103:234;:::o;12343:366::-;12485:3;12506:67;12570:2;12565:3;12506:67;:::i;:::-;12499:74;;12582:93;12671:3;12582:93;:::i;:::-;12700:2;12695:3;12691:12;12684:19;;12343:366;;;:::o;12715:419::-;12881:4;12919:2;12908:9;12904:18;12896:26;;12968:9;12962:4;12958:20;12954:1;12943:9;12939:17;12932:47;12996:131;13122:4;12996:131;:::i;:::-;12988:139;;12715:419;;;:::o;13140:227::-;13280:34;13276:1;13268:6;13264:14;13257:58;13349:10;13344:2;13336:6;13332:15;13325:35;13140:227;:::o;13373:366::-;13515:3;13536:67;13600:2;13595:3;13536:67;:::i;:::-;13529:74;;13612:93;13701:3;13612:93;:::i;:::-;13730:2;13725:3;13721:12;13714:19;;13373:366;;;:::o;13745:419::-;13911:4;13949:2;13938:9;13934:18;13926:26;;13998:9;13992:4;13988:20;13984:1;13973:9;13969:17;13962:47;14026:131;14152:4;14026:131;:::i;:::-;14018:139;;13745:419;;;:::o;14170:305::-;14210:3;14229:20;14247:1;14229:20;:::i;:::-;14224:25;;14263:20;14281:1;14263:20;:::i;:::-;14258:25;;14417:1;14349:66;14345:74;14342:1;14339:81;14336:107;;;14423:18;;:::i;:::-;14336:107;14467:1;14464;14460:9;14453:16;;14170:305;;;;:::o;14481:221::-;14621:34;14617:1;14609:6;14605:14;14598:58;14690:4;14685:2;14677:6;14673:15;14666:29;14481:221;:::o;14708:366::-;14850:3;14871:67;14935:2;14930:3;14871:67;:::i;:::-;14864:74;;14947:93;15036:3;14947:93;:::i;:::-;15065:2;15060:3;15056:12;15049:19;;14708:366;;;:::o;15080:419::-;15246:4;15284:2;15273:9;15269:18;15261:26;;15333:9;15327:4;15323:20;15319:1;15308:9;15304:17;15297:47;15361:131;15487:4;15361:131;:::i;:::-;15353:139;;15080:419;;;:::o;15505:238::-;15645:34;15641:1;15633:6;15629:14;15622:58;15714:21;15709:2;15701:6;15697:15;15690:46;15505:238;:::o;15749:366::-;15891:3;15912:67;15976:2;15971:3;15912:67;:::i;:::-;15905:74;;15988:93;16077:3;15988:93;:::i;:::-;16106:2;16101:3;16097:12;16090:19;;15749:366;;;:::o;16121:419::-;16287:4;16325:2;16314:9;16310:18;16302:26;;16374:9;16368:4;16364:20;16360:1;16349:9;16345:17;16338:47;16402:131;16528:4;16402:131;:::i;:::-;16394:139;;16121:419;;;:::o;16546:235::-;16686:34;16682:1;16674:6;16670:14;16663:58;16755:18;16750:2;16742:6;16738:15;16731:43;16546:235;:::o;16787:366::-;16929:3;16950:67;17014:2;17009:3;16950:67;:::i;:::-;16943:74;;17026:93;17115:3;17026:93;:::i;:::-;17144:2;17139:3;17135:12;17128:19;;16787:366;;;:::o;17159:419::-;17325:4;17363:2;17352:9;17348:18;17340:26;;17412:9;17406:4;17402:20;17398:1;17387:9;17383:17;17376:47;17440:131;17566:4;17440:131;:::i;:::-;17432:139;;17159:419;;;:::o;17584:179::-;17724:31;17720:1;17712:6;17708:14;17701:55;17584:179;:::o;17769:366::-;17911:3;17932:67;17996:2;17991:3;17932:67;:::i;:::-;17925:74;;18008:93;18097:3;18008:93;:::i;:::-;18126:2;18121:3;18117:12;18110:19;;17769:366;;;:::o;18141:419::-;18307:4;18345:2;18334:9;18330:18;18322:26;;18394:9;18388:4;18384:20;18380:1;18369:9;18365:17;18358:47;18422:131;18548:4;18422:131;:::i;:::-;18414:139;;18141:419;;;:::o;18566:244::-;18706:34;18702:1;18694:6;18690:14;18683:58;18775:27;18770:2;18762:6;18758:15;18751:52;18566:244;:::o;18816:366::-;18958:3;18979:67;19043:2;19038:3;18979:67;:::i;:::-;18972:74;;19055:93;19144:3;19055:93;:::i;:::-;19173:2;19168:3;19164:12;19157:19;;18816:366;;;:::o;19188:419::-;19354:4;19392:2;19381:9;19377:18;19369:26;;19441:9;19435:4;19431:20;19427:1;19416:9;19412:17;19405:47;19469:131;19595:4;19469:131;:::i;:::-;19461:139;;19188:419;;;:::o;19613:224::-;19753:34;19749:1;19741:6;19737:14;19730:58;19822:7;19817:2;19809:6;19805:15;19798:32;19613:224;:::o;19843:366::-;19985:3;20006:67;20070:2;20065:3;20006:67;:::i;:::-;19999:74;;20082:93;20171:3;20082:93;:::i;:::-;20200:2;20195:3;20191:12;20184:19;;19843:366;;;:::o;20215:419::-;20381:4;20419:2;20408:9;20404:18;20396:26;;20468:9;20462:4;20458:20;20454:1;20443:9;20439:17;20432:47;20496:131;20622:4;20496:131;:::i;:::-;20488:139;;20215:419;;;:::o;20640:223::-;20780:34;20776:1;20768:6;20764:14;20757:58;20849:6;20844:2;20836:6;20832:15;20825:31;20640:223;:::o;20869:366::-;21011:3;21032:67;21096:2;21091:3;21032:67;:::i;:::-;21025:74;;21108:93;21197:3;21108:93;:::i;:::-;21226:2;21221:3;21217:12;21210:19;;20869:366;;;:::o;21241:419::-;21407:4;21445:2;21434:9;21430:18;21422:26;;21494:9;21488:4;21484:20;21480:1;21469:9;21465:17;21458:47;21522:131;21648:4;21522:131;:::i;:::-;21514:139;;21241:419;;;:::o;21666:240::-;21806:34;21802:1;21794:6;21790:14;21783:58;21875:23;21870:2;21862:6;21858:15;21851:48;21666:240;:::o;21912:366::-;22054:3;22075:67;22139:2;22134:3;22075:67;:::i;:::-;22068:74;;22151:93;22240:3;22151:93;:::i;:::-;22269:2;22264:3;22260:12;22253:19;;21912:366;;;:::o;22284:419::-;22450:4;22488:2;22477:9;22473:18;22465:26;;22537:9;22531:4;22527:20;22523:1;22512:9;22508:17;22501:47;22565:131;22691:4;22565:131;:::i;:::-;22557:139;;22284:419;;;:::o;22709:239::-;22849:34;22845:1;22837:6;22833:14;22826:58;22918:22;22913:2;22905:6;22901:15;22894:47;22709:239;:::o;22954:366::-;23096:3;23117:67;23181:2;23176:3;23117:67;:::i;:::-;23110:74;;23193:93;23282:3;23193:93;:::i;:::-;23311:2;23306:3;23302:12;23295:19;;22954:366;;;:::o;23326:419::-;23492:4;23530:2;23519:9;23515:18;23507:26;;23579:9;23573:4;23569:20;23565:1;23554:9;23550:17;23543:47;23607:131;23733:4;23607:131;:::i;:::-;23599:139;;23326:419;;;:::o;23751:225::-;23891:34;23887:1;23879:6;23875:14;23868:58;23960:8;23955:2;23947:6;23943:15;23936:33;23751:225;:::o;23982:366::-;24124:3;24145:67;24209:2;24204:3;24145:67;:::i;:::-;24138:74;;24221:93;24310:3;24221:93;:::i;:::-;24339:2;24334:3;24330:12;24323:19;;23982:366;;;:::o;24354:419::-;24520:4;24558:2;24547:9;24543:18;24535:26;;24607:9;24601:4;24597:20;24593:1;24582:9;24578:17;24571:47;24635:131;24761:4;24635:131;:::i;:::-;24627:139;;24354:419;;;:::o;24779:182::-;24919:34;24915:1;24907:6;24903:14;24896:58;24779:182;:::o;24967:366::-;25109:3;25130:67;25194:2;25189:3;25130:67;:::i;:::-;25123:74;;25206:93;25295:3;25206:93;:::i;:::-;25324:2;25319:3;25315:12;25308:19;;24967:366;;;:::o;25339:419::-;25505:4;25543:2;25532:9;25528:18;25520:26;;25592:9;25586:4;25582:20;25578:1;25567:9;25563:17;25556:47;25620:131;25746:4;25620:131;:::i;:::-;25612:139;;25339:419;;;:::o;25764:229::-;25904:34;25900:1;25892:6;25888:14;25881:58;25973:12;25968:2;25960:6;25956:15;25949:37;25764:229;:::o;25999:366::-;26141:3;26162:67;26226:2;26221:3;26162:67;:::i;:::-;26155:74;;26238:93;26327:3;26238:93;:::i;:::-;26356:2;26351:3;26347:12;26340:19;;25999:366;;;:::o;26371:419::-;26537:4;26575:2;26564:9;26560:18;26552:26;;26624:9;26618:4;26614:20;26610:1;26599:9;26595:17;26588:47;26652:131;26778:4;26652:131;:::i;:::-;26644:139;;26371:419;;;:::o;26796:143::-;26853:5;26884:6;26878:13;26869:22;;26900:33;26927:5;26900:33;:::i;:::-;26796:143;;;;:::o;26945:351::-;27015:6;27064:2;27052:9;27043:7;27039:23;27035:32;27032:119;;;27070:79;;:::i;:::-;27032:119;27190:1;27215:64;27271:7;27262:6;27251:9;27247:22;27215:64;:::i;:::-;27205:74;;27161:128;26945:351;;;;:::o;27302:223::-;27442:34;27438:1;27430:6;27426:14;27419:58;27511:6;27506:2;27498:6;27494:15;27487:31;27302:223;:::o;27531:366::-;27673:3;27694:67;27758:2;27753:3;27694:67;:::i;:::-;27687:74;;27770:93;27859:3;27770:93;:::i;:::-;27888:2;27883:3;27879:12;27872:19;;27531:366;;;:::o;27903:419::-;28069:4;28107:2;28096:9;28092:18;28084:26;;28156:9;28150:4;28146:20;28142:1;28131:9;28127:17;28120:47;28184:131;28310:4;28184:131;:::i;:::-;28176:139;;27903:419;;;:::o;28328:221::-;28468:34;28464:1;28456:6;28452:14;28445:58;28537:4;28532:2;28524:6;28520:15;28513:29;28328:221;:::o;28555:366::-;28697:3;28718:67;28782:2;28777:3;28718:67;:::i;:::-;28711:74;;28794:93;28883:3;28794:93;:::i;:::-;28912:2;28907:3;28903:12;28896:19;;28555:366;;;:::o;28927:419::-;29093:4;29131:2;29120:9;29116:18;29108:26;;29180:9;29174:4;29170:20;29166:1;29155:9;29151:17;29144:47;29208:131;29334:4;29208:131;:::i;:::-;29200:139;;28927:419;;;:::o;29352:224::-;29492:34;29488:1;29480:6;29476:14;29469:58;29561:7;29556:2;29548:6;29544:15;29537:32;29352:224;:::o;29582:366::-;29724:3;29745:67;29809:2;29804:3;29745:67;:::i;:::-;29738:74;;29821:93;29910:3;29821:93;:::i;:::-;29939:2;29934:3;29930:12;29923:19;;29582:366;;;:::o;29954:419::-;30120:4;30158:2;30147:9;30143:18;30135:26;;30207:9;30201:4;30197:20;30193:1;30182:9;30178:17;30171:47;30235:131;30361:4;30235:131;:::i;:::-;30227:139;;29954:419;;;:::o;30379:222::-;30519:34;30515:1;30507:6;30503:14;30496:58;30588:5;30583:2;30575:6;30571:15;30564:30;30379:222;:::o;30607:366::-;30749:3;30770:67;30834:2;30829:3;30770:67;:::i;:::-;30763:74;;30846:93;30935:3;30846:93;:::i;:::-;30964:2;30959:3;30955:12;30948:19;;30607:366;;;:::o;30979:419::-;31145:4;31183:2;31172:9;31168:18;31160:26;;31232:9;31226:4;31222:20;31218:1;31207:9;31203:17;31196:47;31260:131;31386:4;31260:131;:::i;:::-;31252:139;;30979:419;;;:::o;31404:172::-;31544:24;31540:1;31532:6;31528:14;31521:48;31404:172;:::o;31582:366::-;31724:3;31745:67;31809:2;31804:3;31745:67;:::i;:::-;31738:74;;31821:93;31910:3;31821:93;:::i;:::-;31939:2;31934:3;31930:12;31923:19;;31582:366;;;:::o;31954:419::-;32120:4;32158:2;32147:9;32143:18;32135:26;;32207:9;32201:4;32197:20;32193:1;32182:9;32178:17;32171:47;32235:131;32361:4;32235:131;:::i;:::-;32227:139;;31954:419;;;:::o;32379:297::-;32519:34;32515:1;32507:6;32503:14;32496:58;32588:34;32583:2;32575:6;32571:15;32564:59;32657:11;32652:2;32644:6;32640:15;32633:36;32379:297;:::o;32682:366::-;32824:3;32845:67;32909:2;32904:3;32845:67;:::i;:::-;32838:74;;32921:93;33010:3;32921:93;:::i;:::-;33039:2;33034:3;33030:12;33023:19;;32682:366;;;:::o;33054:419::-;33220:4;33258:2;33247:9;33243:18;33235:26;;33307:9;33301:4;33297:20;33293:1;33282:9;33278:17;33271:47;33335:131;33461:4;33335:131;:::i;:::-;33327:139;;33054:419;;;:::o;33479:240::-;33619:34;33615:1;33607:6;33603:14;33596:58;33688:23;33683:2;33675:6;33671:15;33664:48;33479:240;:::o;33725:366::-;33867:3;33888:67;33952:2;33947:3;33888:67;:::i;:::-;33881:74;;33964:93;34053:3;33964:93;:::i;:::-;34082:2;34077:3;34073:12;34066:19;;33725:366;;;:::o;34097:419::-;34263:4;34301:2;34290:9;34286:18;34278:26;;34350:9;34344:4;34340:20;34336:1;34325:9;34321:17;34314:47;34378:131;34504:4;34378:131;:::i;:::-;34370:139;;34097:419;;;:::o;34522:169::-;34662:21;34658:1;34650:6;34646:14;34639:45;34522:169;:::o;34697:366::-;34839:3;34860:67;34924:2;34919:3;34860:67;:::i;:::-;34853:74;;34936:93;35025:3;34936:93;:::i;:::-;35054:2;35049:3;35045:12;35038:19;;34697:366;;;:::o;35069:419::-;35235:4;35273:2;35262:9;35258:18;35250:26;;35322:9;35316:4;35312:20;35308:1;35297:9;35293:17;35286:47;35350:131;35476:4;35350:131;:::i;:::-;35342:139;;35069:419;;;:::o;35494:241::-;35634:34;35630:1;35622:6;35618:14;35611:58;35703:24;35698:2;35690:6;35686:15;35679:49;35494:241;:::o;35741:366::-;35883:3;35904:67;35968:2;35963:3;35904:67;:::i;:::-;35897:74;;35980:93;36069:3;35980:93;:::i;:::-;36098:2;36093:3;36089:12;36082:19;;35741:366;;;:::o;36113:419::-;36279:4;36317:2;36306:9;36302:18;36294:26;;36366:9;36360:4;36356:20;36352:1;36341:9;36337:17;36330:47;36394:131;36520:4;36394:131;:::i;:::-;36386:139;;36113:419;;;:::o;36538:191::-;36578:4;36598:20;36616:1;36598:20;:::i;:::-;36593:25;;36632:20;36650:1;36632:20;:::i;:::-;36627:25;;36671:1;36668;36665:8;36662:34;;;36676:18;;:::i;:::-;36662:34;36721:1;36718;36714:9;36706:17;;36538:191;;;;:::o;36735:225::-;36875:34;36871:1;36863:6;36859:14;36852:58;36944:8;36939:2;36931:6;36927:15;36920:33;36735:225;:::o;36966:366::-;37108:3;37129:67;37193:2;37188:3;37129:67;:::i;:::-;37122:74;;37205:93;37294:3;37205:93;:::i;:::-;37323:2;37318:3;37314:12;37307:19;;36966:366;;;:::o;37338:419::-;37504:4;37542:2;37531:9;37527:18;37519:26;;37591:9;37585:4;37581:20;37577:1;37566:9;37562:17;37555:47;37619:131;37745:4;37619:131;:::i;:::-;37611:139;;37338:419;;;:::o;37763:147::-;37864:11;37901:3;37886:18;;37763:147;;;;:::o;37916:114::-;;:::o;38036:398::-;38195:3;38216:83;38297:1;38292:3;38216:83;:::i;:::-;38209:90;;38308:93;38397:3;38308:93;:::i;:::-;38426:1;38421:3;38417:11;38410:18;;38036:398;;;:::o;38440:379::-;38624:3;38646:147;38789:3;38646:147;:::i;:::-;38639:154;;38810:3;38803:10;;38440:379;;;:::o;38825:442::-;38974:4;39012:2;39001:9;38997:18;38989:26;;39025:71;39093:1;39082:9;39078:17;39069:6;39025:71;:::i;:::-;39106:72;39174:2;39163:9;39159:18;39150:6;39106:72;:::i;:::-;39188;39256:2;39245:9;39241:18;39232:6;39188:72;:::i;:::-;38825:442;;;;;;:::o;39273:180::-;39321:77;39318:1;39311:88;39418:4;39415:1;39408:15;39442:4;39439:1;39432:15;39459:180;39507:77;39504:1;39497:88;39604:4;39601:1;39594:15;39628:4;39625:1;39618:15;39645:143;39702:5;39733:6;39727:13;39718:22;;39749:33;39776:5;39749:33;:::i;:::-;39645:143;;;;:::o;39794:351::-;39864:6;39913:2;39901:9;39892:7;39888:23;39884:32;39881:119;;;39919:79;;:::i;:::-;39881:119;40039:1;40064:64;40120:7;40111:6;40100:9;40096:22;40064:64;:::i;:::-;40054:74;;40010:128;39794:351;;;;:::o;40151:85::-;40196:7;40225:5;40214:16;;40151:85;;;:::o;40242:158::-;40300:9;40333:61;40351:42;40360:32;40386:5;40360:32;:::i;:::-;40351:42;:::i;:::-;40333:61;:::i;:::-;40320:74;;40242:158;;;:::o;40406:147::-;40501:45;40540:5;40501:45;:::i;:::-;40496:3;40489:58;40406:147;;:::o;40559:114::-;40626:6;40660:5;40654:12;40644:22;;40559:114;;;:::o;40679:184::-;40778:11;40812:6;40807:3;40800:19;40852:4;40847:3;40843:14;40828:29;;40679:184;;;;:::o;40869:132::-;40936:4;40959:3;40951:11;;40989:4;40984:3;40980:14;40972:22;;40869:132;;;:::o;41007:108::-;41084:24;41102:5;41084:24;:::i;:::-;41079:3;41072:37;41007:108;;:::o;41121:179::-;41190:10;41211:46;41253:3;41245:6;41211:46;:::i;:::-;41289:4;41284:3;41280:14;41266:28;;41121:179;;;;:::o;41306:113::-;41376:4;41408;41403:3;41399:14;41391:22;;41306:113;;;:::o;41455:732::-;41574:3;41603:54;41651:5;41603:54;:::i;:::-;41673:86;41752:6;41747:3;41673:86;:::i;:::-;41666:93;;41783:56;41833:5;41783:56;:::i;:::-;41862:7;41893:1;41878:284;41903:6;41900:1;41897:13;41878:284;;;41979:6;41973:13;42006:63;42065:3;42050:13;42006:63;:::i;:::-;41999:70;;42092:60;42145:6;42092:60;:::i;:::-;42082:70;;41938:224;41925:1;41922;41918:9;41913:14;;41878:284;;;41882:14;42178:3;42171:10;;41579:608;;;41455:732;;;;:::o;42193:831::-;42456:4;42494:3;42483:9;42479:19;42471:27;;42508:71;42576:1;42565:9;42561:17;42552:6;42508:71;:::i;:::-;42589:80;42665:2;42654:9;42650:18;42641:6;42589:80;:::i;:::-;42716:9;42710:4;42706:20;42701:2;42690:9;42686:18;42679:48;42744:108;42847:4;42838:6;42744:108;:::i;:::-;42736:116;;42862:72;42930:2;42919:9;42915:18;42906:6;42862:72;:::i;:::-;42944:73;43012:3;43001:9;42997:19;42988:6;42944:73;:::i;:::-;42193:831;;;;;;;;:::o;43030:807::-;43279:4;43317:3;43306:9;43302:19;43294:27;;43331:71;43399:1;43388:9;43384:17;43375:6;43331:71;:::i;:::-;43412:72;43480:2;43469:9;43465:18;43456:6;43412:72;:::i;:::-;43494:80;43570:2;43559:9;43555:18;43546:6;43494:80;:::i;:::-;43584;43660:2;43649:9;43645:18;43636:6;43584:80;:::i;:::-;43674:73;43742:3;43731:9;43727:19;43718:6;43674:73;:::i;:::-;43757;43825:3;43814:9;43810:19;43801:6;43757:73;:::i;:::-;43030:807;;;;;;;;;:::o;43843:663::-;43931:6;43939;43947;43996:2;43984:9;43975:7;43971:23;43967:32;43964:119;;;44002:79;;:::i;:::-;43964:119;44122:1;44147:64;44203:7;44194:6;44183:9;44179:22;44147:64;:::i;:::-;44137:74;;44093:128;44260:2;44286:64;44342:7;44333:6;44322:9;44318:22;44286:64;:::i;:::-;44276:74;;44231:129;44399:2;44425:64;44481:7;44472:6;44461:9;44457:22;44425:64;:::i;:::-;44415:74;;44370:129;43843:663;;;;;:::o

Swarm Source

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