Token Pegasus

 

Overview ERC20

Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
1,165,072,898.744279 PGS

Holders:
323 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Pegasus is a NFT Collection.

Market

Volume (24H):$3.41
Market Capitalization:$0.00
Circulating Supply:0.00 PGS
Market Data Source: Coinmarketcap


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

Contract Source Code Verified (Exact Match)

Contract Name:
Pegasus

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-06
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.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 subtraction 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;
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (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;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @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);
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - 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 {}
}

// File: Pegasus.sol

//SPDX-License-Identifier: MIT



pragma solidity >=0.8.9 <0.9.0;







library SafeMathInt {

    int256 private constant MIN_INT256 = int256(1) << 255;

    int256 private constant MAX_INT256 = ~(int256(1) << 255);



    function mul(int256 a, int256 b) internal pure returns (int256) {

        int256 c = a * b;



        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));

        require((b == 0) || (c / b == a));

        return c;

    }



    function div(int256 a, int256 b) internal pure returns (int256) {

        require(b != -1 || a != MIN_INT256);



        return a / b;

    }



    function sub(int256 a, int256 b) internal pure returns (int256) {

        int256 c = a - b;

        require((b >= 0 && c <= a) || (b < 0 && c > a));

        return c;

    }



    function add(int256 a, int256 b) internal pure returns (int256) {

        int256 c = a + b;

        require((b >= 0 && c >= a) || (b < 0 && c < a));

        return c;

    }



    function abs(int256 a) internal pure returns (int256) {

        require(a != MIN_INT256);

        return a < 0 ? -a : a;

    }

}



interface IDEXFactory {

    function createPair(address tokenA, address tokenB)

        external

        returns (address pair);

}



interface IPair {

    function sync() external;

}



interface IDEXRouter {

    function factory() external pure returns (address);



    function WETH() external pure returns (address);



    function addLiquidity(

        address tokenA,

        address tokenB,

        uint256 amountADesired,

        uint256 amountBDesired,

        uint256 amountAMin,

        uint256 amountBMin,

        address to,

        uint256 deadline

    )

        external

        returns (

            uint256 amountA,

            uint256 amountB,

            uint256 liquidity

        );



    function addLiquidityETH(

        address token,

        uint256 amountTokenDesired,

        uint256 amountTokenMin,

        uint256 amountETHMin,

        address to,

        uint256 deadline

    )

        external

        payable

        returns (

            uint256 amountToken,

            uint256 amountETH,

            uint256 liquidity

        );



    function swapExactTokensForTokensSupportingFeeOnTransferTokens(

        uint256 amountIn,

        uint256 amountOutMin,

        address[] calldata path,

        address to,

        uint256 deadline

    ) external;



    function swapExactETHForTokensSupportingFeeOnTransferTokens(

        uint256 amountOutMin,

        address[] calldata path,

        address to,

        uint256 deadline

    ) external payable;



    function swapExactTokensForETHSupportingFeeOnTransferTokens(

        uint256 amountIn,

        uint256 amountOutMin,

        address[] calldata path,

        address to,

        uint256 deadline

    ) external;

}



abstract contract ERC20Detailed is IERC20 {

    string private _name;

    string private _symbol;

    uint8 private _decimals;



    constructor(

        string memory _tokenName,

        string memory _tokenSymbol,

        uint8 _tokenDecimals

    ) {

        _name = _tokenName;

        _symbol = _tokenSymbol;

        _decimals = _tokenDecimals;

    }



    function name() public view returns (string memory) {

        return _name;

    }



    function symbol() public view returns (string memory) {

        return _symbol;

    }



    function decimals() public view returns (uint8) {

        return _decimals;

    }

}



contract Pegasus is ERC20Detailed, Ownable {

    using SafeMath for uint256;

    using SafeMathInt for int256;



    uint256 private constant DECIMALS = 18;

    uint256 private constant MAX_SUPPLY = type(uint128).max;

    uint256 private constant MAX_UINT256 = type(uint256).max;

    uint256 private constant INITIAL_FRAGMENTS_SUPPLY =

        1 * 10**9 * 10**DECIMALS;

    uint256 private constant TOTAL_GONS =

        MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);



    uint256 private totalTokenSupply;



    function totalSupply() external view override returns (uint256) {

        return totalTokenSupply;

    }



    uint256 private gonsPerFragment;



    mapping(address => uint256) private gonBalance;

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



    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;

    address private constant ZERO = 0x0000000000000000000000000000000000000000;



    IDEXRouter public defaultRouter;

    address public defaultPair;



    mapping(address => bool) allowedTransferList;

    mapping(address => bool) feeExemptList;

    mapping(address => bool) blacklist;

    mapping(address => bool) swapPairList;



    function setAllowTransfer(address _addr, bool _value) external onlyOwner {

        allowedTransferList[_addr] = _value;

    }



    function isAllowTransfer(address _addr) public view returns (bool) {

        return allowedTransferList[_addr];

    }



    function setFeeExempt(address _addr, bool _value) public onlyOwner {

        feeExemptList[_addr] = _value;

    }



    function isFeeExempt(address _addr) public view returns (bool) {

        return feeExemptList[_addr];

    }



    function setBlacklist(address _addr, bool _value) external onlyOwner {

        blacklist[_addr] = _value;

    }



    function isBlacklist(address _addr) public view returns (bool) {

        return blacklist[_addr];

    }



    function setSwapPair(address _addr, bool _value) public onlyOwner {

        swapPairList[_addr] = _value;

    }



    function isSwapPair(address _addr) public view returns (bool) {

        return swapPairList[_addr];

    }



    constructor() ERC20Detailed("Pegasus", "PGS", uint8(DECIMALS)) {

        defaultRouter = IDEXRouter(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);

        defaultPair = IDEXFactory(defaultRouter.factory()).createPair(

            defaultRouter.WETH(),

            address(this)

        );



        allowedFragments[address(this)][address(defaultRouter)] = MAX_UINT256;



        totalTokenSupply = INITIAL_FRAGMENTS_SUPPLY;

        gonsPerFragment = TOTAL_GONS.div(INITIAL_FRAGMENTS_SUPPLY);

        gonBalance[msg.sender] = TOTAL_GONS;



        setFeeExempt(msg.sender, true);

        setFeeExempt(address(this), true);



        setSwapPair(defaultPair, true);



        emit Transfer(address(0x0), msg.sender, totalTokenSupply);

    }



    // Fee actors

    address public buybackReceiver = 0xb6B733c7B1aD837983fcA1A2169f7a157927f4b6;

    address public gamificationReceiver =

        0x3492632D53db73919Fdd2F2ba47e20fB99f331D8;

    address public liquidityReceiver =

        0x9c3AA103472956EbCcA1F155F18C4420b3164942;

    address public treasuryReceiver =

        0x3Bd85A236FD9636dC1dF1248513567Ec301D01e3;



    function setFeeReceivers(

        address _buybackReceiver,

        address _gamificationReceiver,

        address _liquidityReceiver,

        address _treasuryReceiver

    ) external onlyOwner {

        buybackReceiver = _buybackReceiver;

        gamificationReceiver = _gamificationReceiver;

        liquidityReceiver = _liquidityReceiver;

        treasuryReceiver = _treasuryReceiver;

    }



    //Fee parameters

    uint256 private constant FEE_DENOMINATOR = 100;



    uint256 private constant MAX_TOTAL_BUY_FEE = 20;

    uint256 public buyBackBuyFee = 1;

    uint256 public liquidityBuyFee = 1;

    uint256 public treasuryBuyFee = 1;

    uint256 public gamificationBuyFee = 0;

    uint256 public totalBuyFee = 3;



    uint256 private constant MAX_TOTAL_SELL_FEE = 30;

    uint256 public buyBackSellFee = 2;

    uint256 public liquiditySellFee = 2;

    uint256 public treasurySellFee = 2;

    uint256 public gamificationSellFee = 0;

    uint256 public totalSellFee = 6;



    function setBuyFees(

        uint256 _buybackFee,

        uint256 _gamificationFee,

        uint256 _liquidityFee,

        uint256 _treasuryFee

    ) external onlyOwner {

        uint256 _totalFee = _buybackFee

            .add(_gamificationFee)

            .add(_liquidityFee)

            .add(_treasuryFee);

        require(

            _totalFee <= MAX_TOTAL_BUY_FEE,

            "Sum of buy fees exceeds max value"

        );

        buyBackBuyFee = _buybackFee;

        gamificationBuyFee = _gamificationFee;

        liquidityBuyFee = _liquidityFee;

        treasuryBuyFee = _treasuryFee;

        totalBuyFee = _totalFee;

    }



    function setSellFees(

        uint256 _buybackFee,

        uint256 _gamificationFee,

        uint256 _liquidityFee,

        uint256 _treasuryFee

    ) external onlyOwner {

        uint256 _totalFee = _buybackFee

            .add(_gamificationFee)

            .add(_liquidityFee)

            .add(_treasuryFee);

        require(

            _totalFee <= MAX_TOTAL_SELL_FEE,

            "Sum of sell fees exceeds max value"

        );

        buyBackSellFee = _buybackFee;

        gamificationSellFee = _gamificationFee;

        liquiditySellFee = _liquidityFee;

        treasurySellFee = _treasuryFee;

        totalSellFee = _totalFee;

    }



    // Fee collection logic

    function takeFee(

        address sender,

        address recipient,

        uint256 gonAmount

    ) internal returns (uint256) {

        uint256 fee = totalBuyFee;

        if (isSwapPair(recipient)) {

            fee = totalSellFee;

        }



        uint256 feeAmount = gonAmount.mul(fee).div(FEE_DENOMINATOR);



        gonBalance[address(this)] = gonBalance[address(this)].add(feeAmount);

        emit Transfer(sender, address(this), feeAmount.div(gonsPerFragment));



        return gonAmount.sub(feeAmount);

    }



    // Fee collection parameters

    bool swapBackEnabled = true;

    bool liquidityEnabled = true;

    uint256 gonSwapThreshold = TOTAL_GONS.div(1000).mul(10);



    function setSwapBackSettings(

        bool _swapBackEnabled,

        bool _liquidityEnabled,

        uint256 _num,

        uint256 _denom

    ) external onlyOwner {

        swapBackEnabled = _swapBackEnabled;

        liquidityEnabled = _liquidityEnabled;

        gonSwapThreshold = TOTAL_GONS.div(_denom).mul(_num);

    }



    bool inSwap = false;



    modifier swapping() {

        inSwap = true;

        _;

        inSwap = false;

    }



    // Fee distribution logic

    function shouldSwapBack() internal view returns (bool) {

        return

            !isSwapPair(msg.sender) &&

            swapBackEnabled &&

            !inSwap &&

            gonBalance[address(this)] >= gonSwapThreshold;

    }



    function swapBack() internal swapping {

        uint256 contractTokenBalance = gonBalance[address(this)].div(

            gonsPerFragment

        );



        uint256 totalFee = totalBuyFee.add(totalSellFee);



        uint256 treasuryTransferAmount = contractTokenBalance

            .mul((treasuryBuyFee.add(treasurySellFee)))

            .div(totalFee);

        if (treasuryTransferAmount > 0) {

            _swapAndSend(treasuryTransferAmount, treasuryReceiver);

        }



        uint256 buybackTransferAmount = contractTokenBalance

            .mul((buyBackBuyFee.add(buyBackSellFee)))

            .div(totalFee);

        if (buybackTransferAmount > 0) {

            _swapAndSend(buybackTransferAmount, buybackReceiver);

        }



        uint256 gamificationTransferAmount = contractTokenBalance

            .mul((gamificationBuyFee.add(gamificationSellFee)))

            .div(totalFee);

        if (gamificationTransferAmount > 0) {

            _swapAndSend(gamificationTransferAmount, gamificationReceiver);

        }



        uint256 dynamicLiquidityFee = liquidityEnabled

            ? liquidityBuyFee.add(liquiditySellFee)

            : 0;

        uint256 liquidityTransferAmount = contractTokenBalance

            .mul(dynamicLiquidityFee)

            .div(totalFee);

        if (liquidityTransferAmount > 0) {

            _addLiquidity(liquidityTransferAmount, liquidityReceiver);

        }



        emit SwapBack(

            contractTokenBalance,

            buybackTransferAmount,

            gamificationTransferAmount,

            liquidityTransferAmount,

            treasuryTransferAmount

        );

    }



    function _swapAndSend(uint256 _tokenAmount, address _receiver) private {

        address[] memory path = new address[](2);

        path[0] = address(this);

        path[1] = defaultRouter.WETH();



        defaultRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(

            _tokenAmount,

            0,

            path,

            _receiver,

            block.timestamp

        );

    }



    function _addLiquidity(uint256 _tokenAmount, address _receiver) private {

        uint256 coinBalance = address(this).balance;

        _swapAndSend(_tokenAmount.div(2), address(this));

        uint256 coinBalanceDifference = address(this).balance.sub(coinBalance);



        defaultRouter.addLiquidityETH{value: coinBalanceDifference}(

            address(this),

            _tokenAmount.div(2),

            0,

            0,

            _receiver,

            block.timestamp

        );

    }



    // Rebase parameters and actors

    uint256 private constant REWARD_YIELD_DENOMINATOR = 10000000000;

    uint256 public rewardYield = 2634548;

    uint256 public rebaseFrequency = 1800;

    uint256 public nextRebase = block.timestamp + rebaseFrequency;



    function setRebaseParameters(

        uint256 _rewardYield,

        uint256 _rebaseFrequency,

        uint256 _nextRebase

    ) external onlyOwner {

        rewardYield = _rewardYield;

        rebaseFrequency = _rebaseFrequency;

        nextRebase = _nextRebase;

    }



    address public rebaseExecutor = 0x5E8d7Cee43a4Dd8CC741d7d131F87a62eEdb9F42;



    function setRebaseExecutor(address _rebaseExecutor) external onlyOwner {

        rebaseExecutor = _rebaseExecutor;

    }



    modifier isExecutor() {

        require(msg.sender == rebaseExecutor);

        _;

    }



    function rebase(uint256 epoch, int256 supplyDelta) external onlyOwner {

        require(!inSwap, "Currently in swap, try again later.");

        _rebase(epoch, supplyDelta);

    }



    function executorRebase() external isExecutor {

        require(!inSwap, "Currently in swap, try again later.");



        uint256 epoch = block.timestamp;

        require(

            nextRebase <= block.timestamp,

            "Too soon since last automatic rebase."

        );



        int256 supplyDelta = int256(

            totalTokenSupply.mul(rewardYield).div(REWARD_YIELD_DENOMINATOR)

        );



        _rebase(epoch, supplyDelta);

    }



    function _rebase(uint256 epoch, int256 supplyDelta) private {

        if (supplyDelta < 0) {

            totalTokenSupply = totalTokenSupply.sub(uint256(-supplyDelta));

        } else {

            totalTokenSupply = totalTokenSupply.add(uint256(supplyDelta));

        }



        if (totalTokenSupply > MAX_SUPPLY) {

            totalTokenSupply = MAX_SUPPLY;

        }



        gonsPerFragment = TOTAL_GONS.div(totalTokenSupply);

        IPair(defaultPair).sync();



        nextRebase = epoch + rebaseFrequency;



        emit LogRebase(epoch, totalTokenSupply);

    }



    // Approval and transfer logic

    function allowance(address owner, address spender)

        external

        view

        override

        returns (uint256)

    {

        return allowedFragments[owner][spender];

    }



    function balanceOf(address who) external view override returns (uint256) {

        return gonBalance[who].div(gonsPerFragment);

    }



    function approve(address spender, uint256 value)

        external

        override

        returns (bool)

    {

        allowedFragments[msg.sender][spender] = value;

        emit Approval(msg.sender, spender, value);

        return true;

    }



    function increaseAllowance(address spender, uint256 addedValue)

        external

        returns (bool)

    {

        allowedFragments[msg.sender][spender] = allowedFragments[msg.sender][

            spender

        ].add(addedValue);

        emit Approval(

            msg.sender,

            spender,

            allowedFragments[msg.sender][spender]

        );

        return true;

    }



    function decreaseAllowance(address spender, uint256 subtractedValue)

        external

        returns (bool)

    {

        uint256 oldValue = allowedFragments[msg.sender][spender];

        if (subtractedValue >= oldValue) {

            allowedFragments[msg.sender][spender] = 0;

        } else {

            allowedFragments[msg.sender][spender] = oldValue.sub(

                subtractedValue

            );

        }

        emit Approval(

            msg.sender,

            spender,

            allowedFragments[msg.sender][spender]

        );

        return true;

    }



    modifier validRecipient(address to) {

        require(to != address(0x0));

        _;

    }



    function transfer(address to, uint256 amount)

        external

        override

        validRecipient(to)

        initialDistributionLock

        returns (bool)

    {

        return _transferFrom(msg.sender, to, amount);

    }



    function transferFrom(

        address from,

        address to,

        uint256 value

    )

        external

        override

        validRecipient(to)

        initialDistributionLock

        returns (bool)

    {

        if (allowedFragments[from][msg.sender] != MAX_UINT256) {

            allowedFragments[from][msg.sender] = allowedFragments[from][

                msg.sender

            ].sub(value, "Insufficient Allowance");

        }

        return _transferFrom(from, to, value);

    }



    function _transferFrom(

        address _sender,

        address _recipient,

        uint256 _amount

    ) internal returns (bool) {

        require(!isBlacklist(_sender), "Sender is blacklisted");

        require(!isBlacklist(_recipient), "Recipient is blacklisted");



        if (inSwap) {

            return _basicTransfer(_sender, _recipient, _amount);

        }



        if (shouldSwapBack()) {

            swapBack();

        }



        uint256 _gonAmount = _amount.mul(gonsPerFragment);

        gonBalance[_sender] = gonBalance[_sender].sub(_gonAmount);



        uint256 _gonAmountReceived = (

            ((isSwapPair(_sender) || isSwapPair(_recipient)) &&

                (!isFeeExempt(_sender)))

                ? takeFee(_sender, _recipient, _gonAmount)

                : _gonAmount

        );



        gonBalance[_recipient] = gonBalance[_recipient].add(_gonAmountReceived);

        emit Transfer(

            _sender,

            _recipient,

            _gonAmountReceived.div(gonsPerFragment)

        );

        return true;

    }



    function _basicTransfer(

        address from,

        address to,

        uint256 amount

    ) internal returns (bool) {

        uint256 gonAmount = amount.mul(gonsPerFragment);

        gonBalance[from] = gonBalance[from].sub(gonAmount);

        gonBalance[to] = gonBalance[to].add(gonAmount);

        return true;

    }



    // Utilities

    function sendPresale(

        address[] calldata recipients,

        uint256[] calldata values

    ) external onlyOwner {

        for (uint256 i = 0; i < recipients.length; i++) {

            _transferFrom(msg.sender, recipients[i], values[i]);

        }

    }



    bool initialDistributionFinished = false;



    modifier initialDistributionLock() {

        require(

            initialDistributionFinished ||

                msg.sender == owner() ||

                isAllowTransfer(msg.sender)

        );

        _;

    }



    function setInitialDistributionFinished() external onlyOwner {

        initialDistributionFinished = true;

    }



    function getCirculatingSupply() external view returns (uint256) {

        return

            (TOTAL_GONS.sub(gonBalance[DEAD]).sub(gonBalance[ZERO])).div(

                gonsPerFragment

            );

    }



    function manualSync() external {

        IPair(defaultPair).sync();

    }



    function isInSwap() external view returns (bool) {

        return inSwap;

    }



    function swapPendingAmount() external view returns (uint256) {

        return gonBalance[address(this)].div(gonsPerFragment);

    }



    function swapThreshold() external view returns (uint256) {

        return gonSwapThreshold.div(gonsPerFragment);

    }



    function withdraw(address _receiver, uint256 _amount) external onlyOwner {

        payable(_receiver).transfer(_amount);

    }



    function rescueToken(address _tokenAddress, uint256 _amount)

        external

        onlyOwner

    {

        ERC20Detailed(_tokenAddress).transfer(msg.sender, _amount);

    }



    receive() external payable {}



    event SwapBack(

        uint256 contractTokenBalance,

        uint256 buybackTransferAmount,

        uint256 gamificationTransferAmount,

        uint256 liquidityTransferAmount,

        uint256 treasuryTransferAmount

    );

    event LogRebase(uint256 indexed epoch, uint256 totalSupply);

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"contractTokenBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buybackTransferAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gamificationTransferAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityTransferAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryTransferAmount","type":"uint256"}],"name":"SwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackReceiver","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":"defaultPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultRouter","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executorRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gamificationBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gamificationReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gamificationSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_addr","type":"address"}],"name":"isAllowTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isInSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isSwapPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"int256","name":"supplyDelta","type":"int256"}],"name":"rebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebaseExecutor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"sendPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAllowTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_gamificationFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_buybackReceiver","type":"address"},{"internalType":"address","name":"_gamificationReceiver","type":"address"},{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_treasuryReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rebaseExecutor","type":"address"}],"name":"setRebaseExecutor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardYield","type":"uint256"},{"internalType":"uint256","name":"_rebaseFrequency","type":"uint256"},{"internalType":"uint256","name":"_nextRebase","type":"uint256"}],"name":"setRebaseParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_gamificationFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapBackEnabled","type":"bool"},{"internalType":"bool","name":"_liquidityEnabled","type":"bool"},{"internalType":"uint256","name":"_num","type":"uint256"},{"internalType":"uint256","name":"_denom","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setSwapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapPendingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","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":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"treasuryBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasurySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273b6b733c7b1ad837983fca1a2169f7a157927f4b6600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733492632d53db73919fdd2f2ba47e20fb99f331d8600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739c3aa103472956ebcca1f155f18c4420b3164942600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733bd85a236fd9636dc1df1248513567ec301d01e3601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601155600160125560016013556000601455600360155560026016556002601755600260185560006019556006601a556001601b60006101000a81548160ff0219169083151502179055506001601b60016101000a81548160ff02191690831515021790555062000270600a6200025c6103e86012600a620001dd919062000d83565b633b9aca00620001ee919062000dd4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200021b919062000e4e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000248919062000e86565b6200096760201b620026f81790919060201c565b6200097f60201b6200270e1790919060201c565b601c556000601d60006101000a81548160ff02191690831515021790555062283334601e55610708601f55601f5442620002ab919062000ec1565b602055735e8d7cee43a4dd8cc741d7d131f87a62eedb9f42602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000602160146101000a81548160ff0219169083151502179055503480156200032b57600080fd5b506040518060400160405280600781526020017f50656761737573000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f504753000000000000000000000000000000000000000000000000000000000081525060128260009081620003ab91906200116c565b508160019081620003bd91906200116c565b5080600260006101000a81548160ff021916908360ff160217905550505050620003fc620003f06200099760201b60201c565b6200099f60201b60201c565b731b02da8cb0d097eb8d57a175b88c7d8b47997506600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e59190620012bd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200056e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005949190620012bd565b306040518363ffffffff1660e01b8152600401620005b492919062001300565b6020604051808303816000875af1158015620005d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005fa9190620012bd565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506012600a6200070d919062000d83565b633b9aca006200071e919062000dd4565b600381905550620007d86012600a62000738919062000d83565b633b9aca0062000749919062000dd4565b6012600a62000759919062000d83565b633b9aca006200076a919062000dd4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000797919062000e4e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620007c4919062000e86565b6200096760201b620026f81790919060201c565b6004819055506012600a620007ee919062000d83565b633b9aca00620007ff919062000dd4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200082c919062000e4e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000859919062000e86565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620008af33600162000a6560201b60201c565b620008c230600162000a6560201b60201c565b620008f7600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000ad060201b60201c565b3373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6003546040516200095991906200133e565b60405180910390a362001416565b600081836200097791906200135b565b905092915050565b600081836200098f919062000dd4565b905092915050565b600033905090565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000a7562000b3b60201b60201c565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b62000ae062000b3b60201b60201c565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b62000b4b6200099760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000b7162000bcc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bc190620013f4565b60405180910390fd5b565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000c845780860481111562000c5c5762000c5b62000bf6565b5b600185161562000c6c5780820291505b808102905062000c7c8562000c25565b945062000c3c565b94509492505050565b60008262000c9f576001905062000d72565b8162000caf576000905062000d72565b816001811462000cc8576002811462000cd35762000d09565b600191505062000d72565b60ff84111562000ce85762000ce762000bf6565b5b8360020a91508482111562000d025762000d0162000bf6565b5b5062000d72565b5060208310610133831016604e8410600b841016171562000d435782820a90508381111562000d3d5762000d3c62000bf6565b5b62000d72565b62000d52848484600162000c32565b9250905081840481111562000d6c5762000d6b62000bf6565b5b81810290505b9392505050565b6000819050919050565b600062000d908262000d79565b915062000d9d8362000d79565b925062000dcc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c8d565b905092915050565b600062000de18262000d79565b915062000dee8362000d79565b925082820262000dfe8162000d79565b9150828204841483151762000e185762000e1762000bf6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e5b8262000d79565b915062000e688362000d79565b92508262000e7b5762000e7a62000e1f565b5b828206905092915050565b600062000e938262000d79565b915062000ea08362000d79565b925082820390508181111562000ebb5762000eba62000bf6565b5b92915050565b600062000ece8262000d79565b915062000edb8362000d79565b925082820190508082111562000ef65762000ef562000bf6565b5b92915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f7e57607f821691505b60208210810362000f945762000f9362000f36565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ffe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000fbf565b6200100a868362000fbf565b95508019841693508086168417925050509392505050565b6000819050919050565b60006200104d62001047620010418462000d79565b62001022565b62000d79565b9050919050565b6000819050919050565b62001069836200102c565b62001081620010788262001054565b84845462000fcc565b825550505050565b600090565b6200109862001089565b620010a58184846200105e565b505050565b5b81811015620010cd57620010c16000826200108e565b600181019050620010ab565b5050565b601f8211156200111c57620010e68162000f9a565b620010f18462000faf565b8101602085101562001101578190505b62001119620011108562000faf565b830182620010aa565b50505b505050565b600082821c905092915050565b6000620011416000198460080262001121565b1980831691505092915050565b60006200115c83836200112e565b9150826002028217905092915050565b620011778262000efc565b67ffffffffffffffff81111562001193576200119262000f07565b5b6200119f825462000f65565b620011ac828285620010d1565b600060209050601f831160018114620011e45760008415620011cf578287015190505b620011db85826200114e565b8655506200124b565b601f198416620011f48662000f9a565b60005b828110156200121e57848901518255600182019150602085019450602081019050620011f7565b868310156200123e57848901516200123a601f8916826200112e565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620012858262001258565b9050919050565b620012978162001278565b8114620012a357600080fd5b50565b600081519050620012b7816200128c565b92915050565b600060208284031215620012d657620012d562001253565b5b6000620012e684828501620012a6565b91505092915050565b620012fa8162001278565b82525050565b6000604082019050620013176000830185620012ef565b620013266020830184620012ef565b9392505050565b620013388162000d79565b82525050565b60006020820190506200135560008301846200132d565b92915050565b6000620013688262000d79565b9150620013758362000d79565b92508262001388576200138762000e1f565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620013dc60208362001393565b9150620013e982620013a4565b602082019050919050565b600060208201905081810360008301526200140f81620013cd565b9050919050565b6149da80620014266000396000f3fe6080604052600436106103905760003560e01c80636be63855116101dc578063a9059cbb11610102578063d32a8f67116100a0578063ed0d21371161006f578063ed0d213714610d35578063f2fb570814610d60578063f2fde38b14610d8b578063f3fef3a314610db457610397565b8063d32a8f6714610c67578063d37e219d14610c92578063dd62ed3e14610cbb578063e796cebe14610cf857610397565b8063c05e8fa1116100dc578063c05e8fa114610bbb578063cc4a478414610be6578063cc99689914610c11578063ccb6135814610c3c57610397565b8063a9059cbb14610b16578063b31e822b14610b53578063bc7e68a314610b9057610397565b8063855b159b1161017a57806395d89b411161014957806395d89b4114610a5a5780639c0c48b114610a855780639d9241ec14610aae578063a457c2d714610ad957610397565b8063855b159b146109c457806389375abf146109db5780638da5cb5b14610a065780638ebfc79614610a3157610397565b8063715018a6116101b6578063715018a614610944578063753d02a11461095b5780637a43e23f146109725780638348a2881461099b57610397565b80636be63855146108b35780636c5b2855146108de57806370a082311461090757610397565b8063264d26dd116102c1578063395093511161025f57806354a1dfc91161022e57806354a1dfc91461080b57806359b107b9146108345780635c3697141461085f5780635de8dcdd1461088857610397565b8063395093511461073d5780633c8e556d1461077a5780633f4218e0146107a357806352df107f146107e057610397565b80632c10508c1161029b5780632c10508c14610681578063313ce567146106ac578063333e99db146106d757806333f3d6281461071457610397565b8063264d26dd146106145780632b112e491461063f5780632be6937d1461066a57610397565b80630bec05ce1161032e578063178d9b8e11610308578063178d9b8e1461055857806318160ddd146105815780631df59e2f146105ac57806323b872dd146105d757610397565b80630bec05ce146104db57806314cce6df14610506578063153b0d1e1461052f57610397565b806308b1fd8f1161036a57806308b1fd8f1461041d578063095ea7b314610448578063099d0d30146104855780630af08314146104b057610397565b80630445b6671461039c5780630531fb91146103c757806306fdde03146103f257610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610ddd565b6040516103be919061371c565b60405180910390f35b3480156103d357600080fd5b506103dc610dfb565b6040516103e99190613778565b60405180910390f35b3480156103fe57600080fd5b50610407610e21565b6040516104149190613823565b60405180910390f35b34801561042957600080fd5b50610432610eb3565b60405161043f9190613778565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a91906138a7565b610ed9565b60405161047c9190613902565b60405180910390f35b34801561049157600080fd5b5061049a610fcb565b6040516104a7919061371c565b60405180910390f35b3480156104bc57600080fd5b506104c5610fd1565b6040516104d2919061371c565b60405180910390f35b3480156104e757600080fd5b506104f0610fd7565b6040516104fd919061371c565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613949565b610fdd565b005b34801561053b57600080fd5b5061055660048036038101906105519190613949565b611040565b005b34801561056457600080fd5b5061057f600480360381019061057a9190613989565b6110a3565b005b34801561058d57600080fd5b50610596611154565b6040516105a3919061371c565b60405180910390f35b3480156105b857600080fd5b506105c161115e565b6040516105ce9190613778565b60405180910390f35b3480156105e357600080fd5b506105fe60048036038101906105f991906139f0565b611184565b60405161060b9190613902565b60405180910390f35b34801561062057600080fd5b50610629611425565b6040516106369190613778565b60405180910390f35b34801561064b57600080fd5b5061065461144b565b604051610661919061371c565b60405180910390f35b34801561067657600080fd5b5061067f61157d565b005b34801561068d57600080fd5b506106966115a2565b6040516106a3919061371c565b60405180910390f35b3480156106b857600080fd5b506106c16115a8565b6040516106ce9190613a5f565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190613a7a565b6115bf565b60405161070b9190613902565b60405180910390f35b34801561072057600080fd5b5061073b600480360381019061073691906138a7565b611615565b005b34801561074957600080fd5b50610764600480360381019061075f91906138a7565b6116a0565b6040516107719190613902565b60405180910390f35b34801561078657600080fd5b506107a1600480360381019061079c9190613aa7565b61189c565b005b3480156107af57600080fd5b506107ca60048036038101906107c59190613a7a565b6119ae565b6040516107d79190613902565b60405180910390f35b3480156107ec57600080fd5b506107f5611a04565b6040516108029190613b6d565b60405180910390f35b34801561081757600080fd5b50610832600480360381019061082d9190613b88565b611a2a565b005b34801561084057600080fd5b50610849611b09565b604051610856919061371c565b60405180910390f35b34801561086b57600080fd5b5061088660048036038101906108819190613a7a565b611b0f565b005b34801561089457600080fd5b5061089d611b5b565b6040516108aa919061371c565b60405180910390f35b3480156108bf57600080fd5b506108c8611bb6565b6040516108d5919061371c565b60405180910390f35b3480156108ea57600080fd5b5061090560048036038101906109009190613989565b611bbc565b005b34801561091357600080fd5b5061092e60048036038101906109299190613a7a565b611c6d565b60405161093b919061371c565b60405180910390f35b34801561095057600080fd5b50610959611cca565b005b34801561096757600080fd5b50610970611cde565b005b34801561097e57600080fd5b5061099960048036038101906109949190613c25565b611d62565b005b3480156109a757600080fd5b506109c260048036038101906109bd9190613949565b611dc8565b005b3480156109d057600080fd5b506109d9611e2b565b005b3480156109e757600080fd5b506109f0611f5f565b6040516109fd919061371c565b60405180910390f35b348015610a1257600080fd5b50610a1b611f65565b604051610a289190613778565b60405180910390f35b348015610a3d57600080fd5b50610a586004803603810190610a539190613949565b611f8f565b005b348015610a6657600080fd5b50610a6f611ff2565b604051610a7c9190613823565b60405180910390f35b348015610a9157600080fd5b50610aac6004803603810190610aa79190613c65565b612084565b005b348015610aba57600080fd5b50610ac36120a6565b604051610ad0919061371c565b60405180910390f35b348015610ae557600080fd5b50610b006004803603810190610afb91906138a7565b6120ac565b604051610b0d9190613902565b60405180910390f35b348015610b2257600080fd5b50610b3d6004803603810190610b3891906138a7565b61233c565b604051610b4a9190613902565b60405180910390f35b348015610b5f57600080fd5b50610b7a6004803603810190610b759190613a7a565b6123f2565b604051610b879190613902565b60405180910390f35b348015610b9c57600080fd5b50610ba5612448565b604051610bb2919061371c565b60405180910390f35b348015610bc757600080fd5b50610bd061244e565b604051610bdd919061371c565b60405180910390f35b348015610bf257600080fd5b50610bfb612454565b604051610c08919061371c565b60405180910390f35b348015610c1d57600080fd5b50610c2661245a565b604051610c339190613902565b60405180910390f35b348015610c4857600080fd5b50610c51612471565b604051610c5e919061371c565b60405180910390f35b348015610c7357600080fd5b50610c7c612477565b604051610c899190613778565b60405180910390f35b348015610c9e57600080fd5b50610cb96004803603810190610cb49190613d73565b61249d565b005b348015610cc757600080fd5b50610ce26004803603810190610cdd9190613df4565b612519565b604051610cef919061371c565b60405180910390f35b348015610d0457600080fd5b50610d1f6004803603810190610d1a9190613a7a565b6125a0565b604051610d2c9190613902565b60405180910390f35b348015610d4157600080fd5b50610d4a6125f6565b604051610d57919061371c565b60405180910390f35b348015610d6c57600080fd5b50610d756125fc565b604051610d829190613778565b60405180910390f35b348015610d9757600080fd5b50610db26004803603810190610dad9190613a7a565b612622565b005b348015610dc057600080fd5b50610ddb6004803603810190610dd691906138a7565b6126a5565b005b6000610df6600454601c546126f890919063ffffffff16565b905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060008054610e3090613e63565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5c90613e63565b8015610ea95780601f10610e7e57610100808354040283529160200191610ea9565b820191906000526020600020905b815481529060010190602001808311610e8c57829003601f168201915b5050505050905090565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610fb9919061371c565b60405180910390a36001905092915050565b60175481565b601e5481565b60145481565b610fe5612724565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611048612724565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6110ab612724565b60006110e4826110d6856110c8888a6127a290919063ffffffff16565b6127a290919063ffffffff16565b6127a290919063ffffffff16565b9050601481111561112a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112190613f06565b60405180910390fd5b84601181905550836014819055508260128190555081601381905550806015819055505050505050565b6000600354905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111c057600080fd5b602160149054906101000a900460ff168061120d57506111de611f65565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b8061121d575061121c336123f2565b5b61122657600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114105761138f836040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b89092919063ffffffff16565b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61141b85858561280d565b9150509392505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061157860045461156a600560008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461155c6005600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546012600a6114e99190614088565b633b9aca006114f891906140d3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6115239190614144565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61154e9190614175565b612aed90919063ffffffff16565b612aed90919063ffffffff16565b6126f890919063ffffffff16565b905090565b611585612724565b6001602160146101000a81548160ff021916908315150217905550565b60135481565b6000600260009054906101000a900460ff16905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61161d612724565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016116589291906141a9565b6020604051808303816000875af1158015611677573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169b91906141e7565b505050565b600061173182600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127a290919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405161188a919061371c565b60405180910390a36001905092915050565b6118a4612724565b83600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611a32612724565b83601b60006101000a81548160ff02191690831515021790555082601b60016101000a81548160ff021916908315150217905550611afd82611aef836012600a611a7c9190614088565b633b9aca00611a8b91906140d3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611ab69190614144565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611ae19190614175565b6126f890919063ffffffff16565b61270e90919063ffffffff16565b601c8190555050505050565b60155481565b611b17612724565b80602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611bb1600454600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f890919063ffffffff16565b905090565b60165481565b611bc4612724565b6000611bfd82611bef85611be1888a6127a290919063ffffffff16565b6127a290919063ffffffff16565b6127a290919063ffffffff16565b9050601e811115611c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3a90614286565b60405180910390fd5b8460168190555083601981905550826017819055508160188190555080601a819055505050505050565b6000611cc3600454600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f890919063ffffffff16565b9050919050565b611cd2612724565b611cdc6000612b03565b565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d4857600080fd5b505af1158015611d5c573d6000803e3d6000fd5b50505050565b611d6a612724565b601d60009054906101000a900460ff1615611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190614318565b60405180910390fd5b611dc48282612bc9565b5050565b611dd0612724565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e8557600080fd5b601d60009054906101000a900460ff1615611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90614318565b60405180910390fd5b6000429050426020541115611f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f16906143aa565b60405180910390fd5b6000611f4f6402540be400611f41601e5460035461270e90919063ffffffff16565b6126f890919063ffffffff16565b9050611f5b8282612bc9565b5050565b601f5481565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f97612724565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60606001805461200190613e63565b80601f016020809104026020016040519081016040528092919081815260200182805461202d90613e63565b801561207a5780601f1061204f5761010080835404028352916020019161207a565b820191906000526020600020905b81548152906001019060200180831161205d57829003601f168201915b5050505050905090565b61208c612724565b82601e8190555081601f8190555080602081905550505050565b601a5481565b600080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083106121bc576000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612250565b6121cf8382612aed90919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051612329919061371c565b60405180910390a3600191505092915050565b600082600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361237857600080fd5b602160149054906101000a900460ff16806123c55750612396611f65565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806123d557506123d4336123f2565b5b6123de57600080fd5b6123e933858561280d565b91505092915050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60205481565b60115481565b60195481565b6000601d60009054906101000a900460ff16905090565b60125481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124a5612724565b60005b84849050811015612512576124fe338686848181106124ca576124c96143ca565b5b90506020020160208101906124df9190613a7a565b8585858181106124f2576124f16143ca565b5b9050602002013561280d565b50808061250a906143f9565b9150506124a8565b5050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61262a612724565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612699576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612690906144b3565b60405180910390fd5b6126a281612b03565b50565b6126ad612724565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156126f3573d6000803e3d6000fd5b505050565b6000818361270691906144d3565b905092915050565b6000818361271c91906140d3565b905092915050565b61272c612dae565b73ffffffffffffffffffffffffffffffffffffffff1661274a611f65565b73ffffffffffffffffffffffffffffffffffffffff16146127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614550565b60405180910390fd5b565b600081836127b09190614570565b905092915050565b6000838311158290612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f79190613823565b60405180910390fd5b5082840390509392505050565b6000612818846115bf565b15612858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284f906145f0565b60405180910390fd5b612861836115bf565b156128a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128989061465c565b60405180910390fd5b601d60009054906101000a900460ff16156128c8576128c1848484612db6565b9050612ae6565b6128d0612f06565b156128de576128dd612f95565b5b60006128f56004548461270e90919063ffffffff16565b905061294981600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aed90919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612997866125a0565b806129a757506129a6856125a0565b5b80156129b957506129b7866119ae565b155b6129c357816129cf565b6129ce86868461327b565b5b9050612a2381600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127a290919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef612aca600454856126f890919063ffffffff16565b604051612ad7919061371c565b60405180910390a36001925050505b9392505050565b60008183612afb9190614175565b905092915050565b6000600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000811215612bfb57612bf081612bdf9061467c565b600354612aed90919063ffffffff16565b600381905550612c17565b612c10816003546127a290919063ffffffff16565b6003819055505b6fffffffffffffffffffffffffffffffff80166003541115612c4d576fffffffffffffffffffffffffffffffff80166003819055505b612cd46003546012600a612c619190614088565b633b9aca00612c7091906140d3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612c9b9190614144565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612cc69190614175565b6126f890919063ffffffff16565b600481905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d4457600080fd5b505af1158015612d58573d6000803e3d6000fd5b50505050601f5482612d6a9190614570565b602081905550817f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2600354604051612da2919061371c565b60405180910390a25050565b600033905090565b600080612dce6004548461270e90919063ffffffff16565b9050612e2281600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aed90919063ffffffff16565b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eb781600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127a290919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060019150509392505050565b6000612f11336125a0565b158015612f2a5750601b60009054906101000a900460ff165b8015612f435750601d60009054906101000a900460ff16155b8015612f905750601c54600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601d60006101000a81548160ff0219169083151502179055506000613006600454600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f890919063ffffffff16565b90506000613021601a546015546127a290919063ffffffff16565b90506000613060826130526130436018546013546127a290919063ffffffff16565b8661270e90919063ffffffff16565b6126f890919063ffffffff16565b905060008111156130985761309781601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133ed565b5b60006130d5836130c76130b86016546011546127a290919063ffffffff16565b8761270e90919063ffffffff16565b6126f890919063ffffffff16565b9050600081111561310d5761310c81600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133ed565b5b600061314a8461313c61312d6019546014546127a290919063ffffffff16565b8861270e90919063ffffffff16565b6126f890919063ffffffff16565b905060008111156131825761318181600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166133ed565b5b6000601b60019054906101000a900460ff1661319f5760006131b7565b6131b66017546012546127a290919063ffffffff16565b5b905060006131e0866131d2848a61270e90919063ffffffff16565b6126f890919063ffffffff16565b905060008111156132185761321781600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613604565b5b7fc20fef046873ad0c4038f9a82bc41b1ae19370c40e6a6c9584298f0aeca30438878585848960405161324f9594939291906146c4565b60405180910390a1505050505050506000601d60006101000a81548160ff021916908315150217905550565b600080601554905061328c846125a0565b1561329757601a5490505b60006132bf60646132b1848761270e90919063ffffffff16565b6126f890919063ffffffff16565b905061331381600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127a290919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6133ba600454856126f890919063ffffffff16565b6040516133c7919061371c565b60405180910390a36133e28185612aed90919063ffffffff16565b925050509392505050565b6000600267ffffffffffffffff81111561340a57613409614717565b5b6040519080825280602002602001820160405280156134385781602001602082028036833780820191505090505b50905030816000815181106134505761344f6143ca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061351b919061475b565b8160018151811061352f5761352e6143ca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b81526004016135cd959493929190614881565b600060405180830381600087803b1580156135e757600080fd5b505af11580156135fb573d6000803e3d6000fd5b50505050505050565b60004790506136266136206002856126f890919063ffffffff16565b306133ed565b600061363b8247612aed90919063ffffffff16565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982306136916002896126f890919063ffffffff16565b60008089426040518863ffffffff1660e01b81526004016136b7969594939291906148db565b60606040518083038185885af11580156136d5573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906136fa9190614951565b50505050505050565b6000819050919050565b61371681613703565b82525050565b6000602082019050613731600083018461370d565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061376282613737565b9050919050565b61377281613757565b82525050565b600060208201905061378d6000830184613769565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137cd5780820151818401526020810190506137b2565b60008484015250505050565b6000601f19601f8301169050919050565b60006137f582613793565b6137ff818561379e565b935061380f8185602086016137af565b613818816137d9565b840191505092915050565b6000602082019050818103600083015261383d81846137ea565b905092915050565b600080fd5b600080fd5b61385881613757565b811461386357600080fd5b50565b6000813590506138758161384f565b92915050565b61388481613703565b811461388f57600080fd5b50565b6000813590506138a18161387b565b92915050565b600080604083850312156138be576138bd613845565b5b60006138cc85828601613866565b92505060206138dd85828601613892565b9150509250929050565b60008115159050919050565b6138fc816138e7565b82525050565b600060208201905061391760008301846138f3565b92915050565b613926816138e7565b811461393157600080fd5b50565b6000813590506139438161391d565b92915050565b600080604083850312156139605761395f613845565b5b600061396e85828601613866565b925050602061397f85828601613934565b9150509250929050565b600080600080608085870312156139a3576139a2613845565b5b60006139b187828801613892565b94505060206139c287828801613892565b93505060406139d387828801613892565b92505060606139e487828801613892565b91505092959194509250565b600080600060608486031215613a0957613a08613845565b5b6000613a1786828701613866565b9350506020613a2886828701613866565b9250506040613a3986828701613892565b9150509250925092565b600060ff82169050919050565b613a5981613a43565b82525050565b6000602082019050613a746000830184613a50565b92915050565b600060208284031215613a9057613a8f613845565b5b6000613a9e84828501613866565b91505092915050565b60008060008060808587031215613ac157613ac0613845565b5b6000613acf87828801613866565b9450506020613ae087828801613866565b9350506040613af187828801613866565b9250506060613b0287828801613866565b91505092959194509250565b6000819050919050565b6000613b33613b2e613b2984613737565b613b0e565b613737565b9050919050565b6000613b4582613b18565b9050919050565b6000613b5782613b3a565b9050919050565b613b6781613b4c565b82525050565b6000602082019050613b826000830184613b5e565b92915050565b60008060008060808587031215613ba257613ba1613845565b5b6000613bb087828801613934565b9450506020613bc187828801613934565b9350506040613bd287828801613892565b9250506060613be387828801613892565b91505092959194509250565b6000819050919050565b613c0281613bef565b8114613c0d57600080fd5b50565b600081359050613c1f81613bf9565b92915050565b60008060408385031215613c3c57613c3b613845565b5b6000613c4a85828601613892565b9250506020613c5b85828601613c10565b9150509250929050565b600080600060608486031215613c7e57613c7d613845565b5b6000613c8c86828701613892565b9350506020613c9d86828701613892565b9250506040613cae86828701613892565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112613cdd57613cdc613cb8565b5b8235905067ffffffffffffffff811115613cfa57613cf9613cbd565b5b602083019150836020820283011115613d1657613d15613cc2565b5b9250929050565b60008083601f840112613d3357613d32613cb8565b5b8235905067ffffffffffffffff811115613d5057613d4f613cbd565b5b602083019150836020820283011115613d6c57613d6b613cc2565b5b9250929050565b60008060008060408587031215613d8d57613d8c613845565b5b600085013567ffffffffffffffff811115613dab57613daa61384a565b5b613db787828801613cc7565b9450945050602085013567ffffffffffffffff811115613dda57613dd961384a565b5b613de687828801613d1d565b925092505092959194509250565b60008060408385031215613e0b57613e0a613845565b5b6000613e1985828601613866565b9250506020613e2a85828601613866565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e7b57607f821691505b602082108103613e8e57613e8d613e34565b5b50919050565b7f53756d206f662062757920666565732065786365656473206d61782076616c7560008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ef060218361379e565b9150613efb82613e94565b604082019050919050565b60006020820190508181036000830152613f1f81613ee3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613fac57808604811115613f8857613f87613f26565b5b6001851615613f975780820291505b8081029050613fa585613f55565b9450613f6c565b94509492505050565b600082613fc55760019050614081565b81613fd35760009050614081565b8160018114613fe95760028114613ff357614022565b6001915050614081565b60ff84111561400557614004613f26565b5b8360020a91508482111561401c5761401b613f26565b5b50614081565b5060208310610133831016604e8410600b84101617156140575782820a90508381111561405257614051613f26565b5b614081565b6140648484846001613f62565b9250905081840481111561407b5761407a613f26565b5b81810290505b9392505050565b600061409382613703565b915061409e83613703565b92506140cb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613fb5565b905092915050565b60006140de82613703565b91506140e983613703565b92508282026140f781613703565b9150828204841483151761410e5761410d613f26565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061414f82613703565b915061415a83613703565b92508261416a57614169614115565b5b828206905092915050565b600061418082613703565b915061418b83613703565b92508282039050818111156141a3576141a2613f26565b5b92915050565b60006040820190506141be6000830185613769565b6141cb602083018461370d565b9392505050565b6000815190506141e18161391d565b92915050565b6000602082840312156141fd576141fc613845565b5b600061420b848285016141d2565b91505092915050565b7f53756d206f662073656c6c20666565732065786365656473206d61782076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b600061427060228361379e565b915061427b82614214565b604082019050919050565b6000602082019050818103600083015261429f81614263565b9050919050565b7f43757272656e746c7920696e20737761702c2074727920616761696e206c617460008201527f65722e0000000000000000000000000000000000000000000000000000000000602082015250565b600061430260238361379e565b915061430d826142a6565b604082019050919050565b60006020820190508181036000830152614331816142f5565b9050919050565b7f546f6f20736f6f6e2073696e6365206c617374206175746f6d6174696320726560008201527f626173652e000000000000000000000000000000000000000000000000000000602082015250565b600061439460258361379e565b915061439f82614338565b604082019050919050565b600060208201905081810360008301526143c381614387565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061440482613703565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361443657614435613f26565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061449d60268361379e565b91506144a882614441565b604082019050919050565b600060208201905081810360008301526144cc81614490565b9050919050565b60006144de82613703565b91506144e983613703565b9250826144f9576144f8614115565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061453a60208361379e565b915061454582614504565b602082019050919050565b600060208201905081810360008301526145698161452d565b9050919050565b600061457b82613703565b915061458683613703565b925082820190508082111561459e5761459d613f26565b5b92915050565b7f53656e64657220697320626c61636b6c69737465640000000000000000000000600082015250565b60006145da60158361379e565b91506145e5826145a4565b602082019050919050565b60006020820190508181036000830152614609816145cd565b9050919050565b7f526563697069656e7420697320626c61636b6c69737465640000000000000000600082015250565b600061464660188361379e565b915061465182614610565b602082019050919050565b6000602082019050818103600083015261467581614639565b9050919050565b600061468782613bef565b91507f800000000000000000000000000000000000000000000000000000000000000082036146b9576146b8613f26565b5b816000039050919050565b600060a0820190506146d9600083018861370d565b6146e6602083018761370d565b6146f3604083018661370d565b614700606083018561370d565b61470d608083018461370d565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506147558161384f565b92915050565b60006020828403121561477157614770613845565b5b600061477f84828501614746565b91505092915050565b6000819050919050565b60006147ad6147a86147a384614788565b613b0e565b613703565b9050919050565b6147bd81614792565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147f881613757565b82525050565b600061480a83836147ef565b60208301905092915050565b6000602082019050919050565b600061482e826147c3565b61483881856147ce565b9350614843836147df565b8060005b8381101561487457815161485b88826147fe565b975061486683614816565b925050600181019050614847565b5085935050505092915050565b600060a082019050614896600083018861370d565b6148a360208301876147b4565b81810360408301526148b58186614823565b90506148c46060830185613769565b6148d1608083018461370d565b9695505050505050565b600060c0820190506148f06000830189613769565b6148fd602083018861370d565b61490a60408301876147b4565b61491760608301866147b4565b6149246080830185613769565b61493160a083018461370d565b979650505050505050565b60008151905061494b8161387b565b92915050565b60008060006060848603121561496a57614969613845565b5b60006149788682870161493c565b93505060206149898682870161493c565b925050604061499a8682870161493c565b915050925092509256fea2646970667358221220d3e8b40e9ad5753592eaa803912e15d755deef302d7dd29b1d121df41026791b64736f6c63430008110033

Deployed ByteCode Sourcemap

31029:18968:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49160:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34280:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30727:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34477;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44043:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35465:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41504:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35277:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32338:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32872:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35643:689;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31590:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34196:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45779:545;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34380:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48589:222;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48459:118;;;;;;;;;;;;;:::i;:::-;;35235:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30929:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33001:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49440:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44323:429;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34577:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32747:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32066:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37839:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35323:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42060:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49011:137;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35423:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36344:697;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43892:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9817:103;;;;;;;;;;;;;:::i;:::-;;48823:79;;;;;;;;;;;;;:::i;:::-;;42306:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33122:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42506:488;;;;;;;;;;;;;:::i;:::-;;41549:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9169:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32616:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30826:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41669:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35599:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44764:628;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45516:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32481:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41595:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35151:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35552:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48914:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35192:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32106:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47871:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43675:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33251:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35509:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41973:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10075:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49296:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49160:124;49208:7;49237:37;49258:15;;49237:16;;:20;;:37;;;;:::i;:::-;49230:44;;49160:124;:::o;34280:91::-;;;;;;;;;;;;;:::o;30727:87::-;30764:13;30799:5;30792:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30727:87;:::o;34477:::-;;;;;;;;;;;;;:::o;44043:268::-;44152:4;44218:5;44178:16;:28;44195:10;44178:28;;;;;;;;;;;;;;;:37;44207:7;44178:37;;;;;;;;;;;;;;;:45;;;;44262:7;44241:36;;44250:10;44241:36;;;44271:5;44241:36;;;;;;:::i;:::-;;;;;;;;44297:4;44290:11;;44043:268;;;;:::o;35465:35::-;;;;:::o;41504:36::-;;;;:::o;35277:37::-;;;;:::o;32338:131::-;9055:13;:11;:13::i;:::-;32453:6:::1;32424:19;:26;32444:5;32424:26;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;32338:131:::0;;:::o;32872:117::-;9055:13;:11;:13::i;:::-;32973:6:::1;32954:9;:16;32964:5;32954:16;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;32872:117:::0;;:::o;35643:689::-;9055:13;:11;:13::i;:::-;35840:17:::1;35860:118;35965:12;35860:84;35930:13;35860:49;35892:16;35860:11;:31;;:49;;;;:::i;:::-;:69;;:84;;;;:::i;:::-;:104;;:118;;;;:::i;:::-;35840:138;;35140:2;36015:9;:30;;35991:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;36139:11;36123:13;:27;;;;36184:16;36163:18;:37;;;;36231:13;36213:15;:31;;;;36274:12;36257:14;:29;;;;36313:9;36299:11;:23;;;;35827:505;35643:689:::0;;;;:::o;31590:110::-;31645:7;31674:16;;31667:23;;31590:110;:::o;34196:75::-;;;;;;;;;;;;;:::o;45779:545::-;46009:4;45950:2;45475:3;45461:18;;:2;:18;;;45453:27;;;;;;48289::::1;;;;;;;;;;;:71;;;;48353:7;:5;:7::i;:::-;48339:21;;:10;:21;;;48289:71;:121;;;;48383:27;48399:10;48383:15;:27::i;:::-;48289:121;48265:158;;;::::0;::::1;;31307:17:::2;46039:16;:22;46056:4;46039:22;;;;;;;;;;;;;;;:34;46062:10;46039:34;;;;;;;;;;;;;;;;:49;46035:230;;46144:107;46219:5;46144:107;;;;;;;;;;;;;;;;::::0;:16:::2;:22;46161:4;46144:22;;;;;;;;;;;;;;;:70;46187:10;46144:70;;;;;;;;;;;;;;;;:74;;:107;;;;;:::i;:::-;46107:16;:22;46124:4;46107:22;;;;;;;;;;;;;;;:34;46130:10;46107:34;;;;;;;;;;;;;;;:144;;;;46035:230;46284:30;46298:4;46304:2;46308:5;46284:13;:30::i;:::-;46277:37;;45779:545:::0;;;;;;:::o;34380:88::-;;;;;;;;;;;;;:::o;48589:222::-;48644:7;48688:113;48769:15;;48689:54;48726:10;:16;32011:42;48726:16;;;;;;;;;;;;;;;;48689:32;48704:10;:16;31928:42;48704:16;;;;;;;;;;;;;;;;31193:2;31408;:12;;;;:::i;:::-;31396:9;:24;;;;:::i;:::-;31307:17;31493:38;;;;:::i;:::-;31307:17;31478:54;;;;:::i;:::-;48689:14;;:32;;;;:::i;:::-;:36;;:54;;;;:::i;:::-;48688:60;;:113;;;;:::i;:::-;48666:135;;48589:222;:::o;48459:118::-;9055:13;:11;:13::i;:::-;48563:4:::1;48533:27;;:34;;;;;;;;;;;;;;;;;;48459:118::o:0;35235:33::-;;;;:::o;30929:87::-;30970:5;30997:9;;;;;;;;;;;30990:16;;30929:87;:::o;33001:109::-;33058:4;33084:9;:16;33094:5;33084:16;;;;;;;;;;;;;;;;;;;;;;;;;33077:23;;33001:109;;;:::o;49440:190::-;9055:13;:11;:13::i;:::-;49576::::1;49562:37;;;49600:10;49612:7;49562:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;49440:190:::0;;:::o;44323:429::-;44427:4;44493:81;44563:10;44493:16;:28;44510:10;44493:28;;;;;;;;;;;;;;;:65;44538:7;44493:65;;;;;;;;;;;;;;;;:69;;:81;;;;:::i;:::-;44453:16;:28;44470:10;44453:28;;;;;;;;;;;;;;;:37;44482:7;44453:37;;;;;;;;;;;;;;;:121;;;;44644:7;44592:126;;44617:10;44592:126;;;44668:16;:28;44685:10;44668:28;;;;;;;;;;;;;;;:37;44697:7;44668:37;;;;;;;;;;;;;;;;44592:126;;;;;;:::i;:::-;;;;;;;;44738:4;44731:11;;44323:429;;;;:::o;34577:423::-;9055:13;:11;:13::i;:::-;34817:16:::1;34799:15;;:34;;;;;;;;;;;;;;;;;;34869:21;34846:20;;:44;;;;;;;;;;;;;;;;;;34923:18;34903:17;;:38;;;;;;;;;;;;;;;;;;34973:17;34954:16;;:36;;;;;;;;;;;;;;;;;;34577:423:::0;;;;:::o;32747:113::-;32804:4;32830:13;:20;32844:5;32830:20;;;;;;;;;;;;;;;;;;;;;;;;;32823:27;;32747:113;;;:::o;32066:31::-;;;;;;;;;;;;;:::o;37839:348::-;9055:13;:11;:13::i;:::-;38048:16:::1;38030:15;;:34;;;;;;;;;;;;;;;;;;38096:17;38077:16;;:36;;;;;;;;;;;;;;;;;;38145:32;38172:4;38145:22;38160:6;31193:2;31408;:12;;;;:::i;:::-;31396:9;:24;;;;:::i;:::-;31307:17;31493:38;;;;:::i;:::-;31307:17;31478:54;;;;:::i;:::-;38145:14;;:22;;;;:::i;:::-;:26;;:32;;;;:::i;:::-;38126:16;:51;;;;37839:348:::0;;;;:::o;35323:30::-;;;;:::o;42060:126::-;9055:13;:11;:13::i;:::-;42161:15:::1;42144:14;;:32;;;;;;;;;;;;;;;;;;42060:126:::0;:::o;49011:137::-;49063:7;49092:46;49122:15;;49092:10;:25;49111:4;49092:25;;;;;;;;;;;;;;;;:29;;:46;;;;:::i;:::-;49085:53;;49011:137;:::o;35423:33::-;;;;:::o;36344:697::-;9055:13;:11;:13::i;:::-;36542:17:::1;36562:118;36667:12;36562:84;36632:13;36562:49;36594:16;36562:11;:31;;:49;;;;:::i;:::-;:69;;:84;;;;:::i;:::-;:104;;:118;;;;:::i;:::-;36542:138;;35412:2;36717:9;:31;;36693:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;36844:11;36827:14;:28;;;;36890:16;36868:19;:38;;;;36938:13;36919:16;:32;;;;36982:12;36964:15;:30;;;;37022:9;37007:12;:24;;;;36529:512;36344:697:::0;;;;:::o;43892:139::-;43956:7;43985:36;44005:15;;43985:10;:15;43996:3;43985:15;;;;;;;;;;;;;;;;:19;;:36;;;;:::i;:::-;43978:43;;43892:139;;;:::o;9817:103::-;9055:13;:11;:13::i;:::-;9882:30:::1;9909:1;9882:18;:30::i;:::-;9817:103::o:0;48823:79::-;48873:11;;;;;;;;;;;48867:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48823:79::o;42306:188::-;9055:13;:11;:13::i;:::-;42398:6:::1;;;;;;;;;;;42397:7;42389:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42457:27;42465:5;42472:11;42457:7;:27::i;:::-;42306:188:::0;;:::o;33122:117::-;9055:13;:11;:13::i;:::-;33223:6:::1;33201:12;:19;33214:5;33201:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;33122:117:::0;;:::o;42506:488::-;42255:14;;;;;;;;;;;42241:28;;:10;:28;;;42233:37;;;;;;42574:6:::1;;;;;;;;;;;42573:7;42565:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42637:13;42653:15;42637:31;;42719:15;42705:10;;:29;;42681:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;42820:18;42864:63;41484:11;42864:33;42885:11;;42864:16;;:20;;:33;;;;:::i;:::-;:37;;:63;;;;:::i;:::-;42820:120;;42957:27;42965:5;42972:11;42957:7;:27::i;:::-;42552:442;;42506:488::o:0;41549:37::-;;;;:::o;9169:87::-;9215:7;9242:6;;;;;;;;;;;9235:13;;9169:87;:::o;32616:119::-;9055:13;:11;:13::i;:::-;32719:6:::1;32696:13;:20;32710:5;32696:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32616:119:::0;;:::o;30826:91::-;30865:13;30900:7;30893:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30826:91;:::o;41669:292::-;9055:13;:11;:13::i;:::-;41855:12:::1;41841:11;:26;;;;41898:16;41880:15;:34;;;;41940:11;41927:10;:24;;;;41669:292:::0;;;:::o;35599:31::-;;;;:::o;44764:628::-;44873:4;44899:16;44918;:28;44935:10;44918:28;;;;;;;;;;;;;;;:37;44947:7;44918:37;;;;;;;;;;;;;;;;44899:56;;44991:8;44972:15;:27;44968:247;;45058:1;45018:16;:28;45035:10;45018:28;;;;;;;;;;;;;;;:37;45047:7;45018:37;;;;;;;;;;;;;;;:41;;;;44968:247;;;45136:65;45169:15;45136:8;:12;;:65;;;;:::i;:::-;45096:16;:28;45113:10;45096:28;;;;;;;;;;;;;;;:37;45125:7;45096:37;;;;;;;;;;;;;;;:105;;;;44968:247;45284:7;45232:126;;45257:10;45232:126;;;45308:16;:28;45325:10;45308:28;;;;;;;;;;;;;;;:37;45337:7;45308:37;;;;;;;;;;;;;;;;45232:126;;;;;;:::i;:::-;;;;;;;;45378:4;45371:11;;;44764:628;;;;:::o;45516:251::-;45687:4;45628:2;45475:3;45461:18;;:2;:18;;;45453:27;;;;;;48289::::1;;;;;;;;;;;:71;;;;48353:7;:5;:7::i;:::-;48339:21;;:10;:21;;;48289:71;:121;;;;48383:27;48399:10;48383:15;:27::i;:::-;48289:121;48265:158;;;::::0;::::1;;45720:37:::2;45734:10;45746:2;45750:6;45720:13;:37::i;:::-;45713:44;;45516:251:::0;;;;;:::o;32481:123::-;32542:4;32568:19;:26;32588:5;32568:26;;;;;;;;;;;;;;;;;;;;;;;;;32561:33;;32481:123;;;:::o;41595:61::-;;;;:::o;35151:32::-;;;;:::o;35552:38::-;;;;:::o;48914:85::-;48957:4;48983:6;;;;;;;;;;;48976:13;;48914:85;:::o;35192:34::-;;;;:::o;32106:26::-;;;;;;;;;;;;;:::o;47871:281::-;9055:13;:11;:13::i;:::-;48018:9:::1;48013:130;48037:10;;:17;;48033:1;:21;48013:130;;;48078:51;48092:10;48104;;48115:1;48104:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;48119:6;;48126:1;48119:9;;;;;;;:::i;:::-;;;;;;;;48078:13;:51::i;:::-;;48056:3;;;;;:::i;:::-;;;;48013:130;;;;47871:281:::0;;;;:::o;43675:205::-;43802:7;43838:16;:23;43855:5;43838:23;;;;;;;;;;;;;;;:32;43862:7;43838:32;;;;;;;;;;;;;;;;43831:39;;43675:205;;;;:::o;33251:111::-;33307:4;33333:12;:19;33346:5;33333:19;;;;;;;;;;;;;;;;;;;;;;;;;33326:26;;33251:111;;;:::o;35509:34::-;;;;:::o;41973:74::-;;;;;;;;;;;;;:::o;10075:201::-;9055:13;:11;:13::i;:::-;10184:1:::1;10164:22;;:8;:22;;::::0;10156:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10240:28;10259:8;10240:18;:28::i;:::-;10075:201:::0;:::o;49296:132::-;9055:13;:11;:13::i;:::-;49390:9:::1;49382:27;;:36;49410:7;49382:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;49296:132:::0;;:::o;4013:98::-;4071:7;4102:1;4098;:5;;;;:::i;:::-;4091:12;;4013:98;;;;:::o;3614:::-;3672:7;3703:1;3699;:5;;;;:::i;:::-;3692:12;;3614:98;;;;:::o;9334:132::-;9409:12;:10;:12::i;:::-;9398:23;;:7;:5;:7::i;:::-;:23;;;9390:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9334:132::o;2876:98::-;2934:7;2965:1;2961;:5;;;;:::i;:::-;2954:12;;2876:98;;;;:::o;5155:240::-;5275:7;5333:1;5328;:6;;5336:12;5320:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5375:1;5371;:5;5364:12;;5155:240;;;;;:::o;46336:1143::-;46473:4;46501:20;46513:7;46501:11;:20::i;:::-;46500:21;46492:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46569:23;46581:10;46569:11;:23::i;:::-;46568:24;46560:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;46642:6;;;;;;;;;;;46638:94;;;46674:44;46689:7;46698:10;46710:7;46674:14;:44::i;:::-;46667:51;;;;46638:94;46752:16;:14;:16::i;:::-;46748:63;;;46787:10;:8;:10::i;:::-;46748:63;46827:18;46848:28;46860:15;;46848:7;:11;;:28;;;;:::i;:::-;46827:49;;46911:35;46935:10;46911;:19;46922:7;46911:19;;;;;;;;;;;;;;;;:23;;:35;;;;:::i;:::-;46889:10;:19;46900:7;46889:19;;;;;;;;;;;;;;;:57;;;;46963:26;47011:19;47022:7;47011:10;:19::i;:::-;:45;;;;47034:22;47045:10;47034;:22::i;:::-;47011:45;47010:93;;;;;47082:20;47094:7;47082:11;:20::i;:::-;47081:21;47010:93;47009:189;;47188:10;47009:189;;;47126:40;47134:7;47143:10;47155;47126:7;:40::i;:::-;47009:189;46963:248;;47253:46;47280:18;47253:10;:22;47264:10;47253:22;;;;;;;;;;;;;;;;:26;;:46;;;;:::i;:::-;47228:10;:22;47239:10;47228:22;;;;;;;;;;;;;;;:71;;;;47366:10;47317:128;;47342:7;47317:128;;;47393:39;47416:15;;47393:18;:22;;:39;;;;:::i;:::-;47317:128;;;;;;:::i;:::-;;;;;;;;47465:4;47458:11;;;;46336:1143;;;;;;:::o;3257:98::-;3315:7;3346:1;3342;:5;;;;:::i;:::-;3335:12;;3257:98;;;;:::o;10436:191::-;10510:16;10529:6;;;;;;;;;;;10510:25;;10555:8;10546:6;;:17;;;;;;;;;;;;;;;;;;10610:8;10579:40;;10600:8;10579:40;;;;;;;;;;;;10499:128;10436:191;:::o;43006:619::-;43097:1;43083:11;:15;43079:212;;;43136:43;43166:11;43165:12;;;:::i;:::-;43136:16;;:20;;:43;;;;:::i;:::-;43117:16;:62;;;;43079:212;;;43235:42;43264:11;43235:16;;:20;;:42;;;;:::i;:::-;43216:16;:61;;;;43079:212;31242:17;43330:10;;43311:16;;:29;43307:95;;;31242:17;43378:10;;43359:16;:29;;;;43307:95;43436:32;43451:16;;31193:2;31408;:12;;;;:::i;:::-;31396:9;:24;;;;:::i;:::-;31307:17;31493:38;;;;:::i;:::-;31307:17;31478:54;;;;:::i;:::-;43436:14;;:32;;;;:::i;:::-;43418:15;:50;;;;43487:11;;;;;;;;;;;43481:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43544:15;;43536:5;:23;;;;:::i;:::-;43523:10;:36;;;;43591:5;43581:34;43598:16;;43581:34;;;;;;:::i;:::-;;;;;;;;43006:619;;:::o;7720:98::-;7773:7;7800:10;7793:17;;7720:98;:::o;47491:348::-;47617:4;47636:17;47656:27;47667:15;;47656:6;:10;;:27;;;;:::i;:::-;47636:47;;47715:31;47736:9;47715:10;:16;47726:4;47715:16;;;;;;;;;;;;;;;;:20;;:31;;;;:::i;:::-;47696:10;:16;47707:4;47696:16;;;;;;;;;;;;;;;:50;;;;47776:29;47795:9;47776:10;:14;47787:2;47776:14;;;;;;;;;;;;;;;;:18;;:29;;;;:::i;:::-;47759:10;:14;47770:2;47759:14;;;;;;;;;;;;;;;:46;;;;47825:4;47818:11;;;47491:348;;;;;:::o;38373:247::-;38422:4;38464:22;38475:10;38464;:22::i;:::-;38463:23;:57;;;;;38505:15;;;;;;;;;;;38463:57;:83;;;;;38540:6;;;;;;;;;;;38539:7;38463:83;:147;;;;;38594:16;;38565:10;:25;38584:4;38565:25;;;;;;;;;;;;;;;;:45;;38463:147;38441:169;;38373:247;:::o;38632:1761::-;38273:4;38264:6;;:13;;;;;;;;;;;;;;;;;;38683:28:::1;38714:74;38760:15;;38714:10;:25;38733:4;38714:25;;;;;;;;;;;;;;;;:29;;:74;;;;:::i;:::-;38683:105;;38805:16;38824:29;38840:12;;38824:11;;:15;;:29;;;;:::i;:::-;38805:48;;38870:30;38903:109;39003:8;38903:79;38945:35;38964:15;;38945:14;;:18;;:35;;;;:::i;:::-;38903:20;:40;;:79;;;;:::i;:::-;:99;;:109;;;;:::i;:::-;38870:142;;39054:1;39029:22;:26;39025:117;;;39074:54;39087:22;39111:16;;;;;;;;;;;39074:12;:54::i;:::-;39025:117;39158:29;39190:107;39288:8;39190:77;39232:33;39250:14;;39232:13;;:17;;:33;;;;:::i;:::-;39190:20;:40;;:77;;;;:::i;:::-;:97;;:107;;;;:::i;:::-;39158:139;;39338:1;39314:21;:25;39310:114;;;39358:52;39371:21;39394:15;;;;;;;;;;;39358:12;:52::i;:::-;39310:114;39440:34;39477:117;39585:8;39477:87;39519:43;39542:19;;39519:18;;:22;;:43;;;;:::i;:::-;39477:20;:40;;:87;;;;:::i;:::-;:107;;:117;;;;:::i;:::-;39440:154;;39640:1;39611:26;:30;39607:129;;;39660:62;39673:26;39701:20;;;;;;;;;;;39660:12;:62::i;:::-;39607:129;39752:27;39782:16;;;;;;;;;;;:90;;39871:1;39782:90;;;39816:37;39836:16;;39816:15;;:19;;:37;;;;:::i;:::-;39782:90;39752:120;;39885:31;39919:91;40001:8;39919:61;39960:19;39919:20;:40;;:61;;;;:::i;:::-;:81;;:91;;;;:::i;:::-;39885:125;;40053:1;40027:23;:27;40023:121;;;40073:57;40087:23;40112:17;;;;;;;;;;;40073:13;:57::i;:::-;40023:121;40165:218;40190:20;40227:21;40265:26;40308:23;40348:22;40165:218;;;;;;;;;;:::i;:::-;;;;;;;;38670:1723;;;;;;;38313:5:::0;38304:6;;:14;;;;;;;;;;;;;;;;;;38632:1761::o;37084:566::-;37215:7;37237:11;37251;;37237:25;;37279:21;37290:9;37279:10;:21::i;:::-;37275:76;;;37325:12;;37319:18;;37275:76;37367:17;37387:39;35079:3;37387:18;37401:3;37387:9;:13;;:18;;;;:::i;:::-;:22;;:39;;;;:::i;:::-;37367:59;;37471:40;37501:9;37471:10;:25;37490:4;37471:25;;;;;;;;;;;;;;;;:29;;:40;;;;:::i;:::-;37443:10;:25;37462:4;37443:25;;;;;;;;;;;;;;;:68;;;;37554:4;37529:63;;37538:6;37529:63;;;37561:30;37575:15;;37561:9;:13;;:30;;;;:::i;:::-;37529:63;;;;;;:::i;:::-;;;;;;;;37616:24;37630:9;37616;:13;;:24;;;;:::i;:::-;37609:31;;;;37084:566;;;;;:::o;40405:433::-;40489:21;40527:1;40513:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40489:40;;40560:4;40542;40547:1;40542:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40588:13;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40578:4;40583:1;40578:7;;;;;;;;:::i;:::-;;;;;;;:30;;;;;;;;;;;40625:13;;;;;;;;;;;:64;;;40706:12;40735:1;40753:4;40774:9;40800:15;40625:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40476:362;40405:433;;:::o;40850:531::-;40935:19;40957:21;40935:43;;40991:48;41004:19;41021:1;41004:12;:16;;:19;;;;:::i;:::-;41033:4;40991:12;:48::i;:::-;41052:29;41084:38;41110:11;41084:21;:25;;:38;;;;:::i;:::-;41052:70;;41139:13;;;;;;;;;;;:29;;;41176:21;41223:4;41245:19;41262:1;41245:12;:16;;:19;;;;:::i;:::-;41281:1;41299;41317:9;41343:15;41139:232;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40922:459;;40850:531;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:126::-;479:7;519:42;512:5;508:54;497:65;;442:126;;;:::o;574:96::-;611:7;640:24;658:5;640:24;:::i;:::-;629:35;;574:96;;;:::o;676:118::-;763:24;781:5;763:24;:::i;:::-;758:3;751:37;676:118;;:::o;800:222::-;893:4;931:2;920:9;916:18;908:26;;944:71;1012:1;1001:9;997:17;988:6;944:71;:::i;:::-;800:222;;;;:::o;1028:99::-;1080:6;1114:5;1108:12;1098:22;;1028:99;;;:::o;1133:169::-;1217:11;1251:6;1246:3;1239:19;1291:4;1286:3;1282:14;1267:29;;1133:169;;;;:::o;1308:246::-;1389:1;1399:113;1413:6;1410:1;1407:13;1399:113;;;1498:1;1493:3;1489:11;1483:18;1479:1;1474:3;1470:11;1463:39;1435:2;1432:1;1428:10;1423:15;;1399:113;;;1546:1;1537:6;1532:3;1528:16;1521:27;1370:184;1308:246;;;:::o;1560:102::-;1601:6;1652:2;1648:7;1643:2;1636:5;1632:14;1628:28;1618:38;;1560:102;;;:::o;1668:377::-;1756:3;1784:39;1817:5;1784:39;:::i;:::-;1839:71;1903:6;1898:3;1839:71;:::i;:::-;1832:78;;1919:65;1977:6;1972:3;1965:4;1958:5;1954:16;1919:65;:::i;:::-;2009:29;2031:6;2009:29;:::i;:::-;2004:3;2000:39;1993:46;;1760:285;1668:377;;;;:::o;2051:313::-;2164:4;2202:2;2191:9;2187:18;2179:26;;2251:9;2245:4;2241:20;2237:1;2226:9;2222:17;2215:47;2279:78;2352:4;2343:6;2279:78;:::i;:::-;2271:86;;2051:313;;;;:::o;2451:117::-;2560:1;2557;2550:12;2574:117;2683:1;2680;2673:12;2697:122;2770:24;2788:5;2770:24;:::i;:::-;2763:5;2760:35;2750:63;;2809:1;2806;2799:12;2750:63;2697:122;:::o;2825:139::-;2871:5;2909:6;2896:20;2887:29;;2925:33;2952:5;2925:33;:::i;:::-;2825:139;;;;:::o;2970:122::-;3043:24;3061:5;3043:24;:::i;:::-;3036:5;3033:35;3023:63;;3082:1;3079;3072:12;3023:63;2970:122;:::o;3098:139::-;3144:5;3182:6;3169:20;3160:29;;3198:33;3225:5;3198:33;:::i;:::-;3098:139;;;;:::o;3243:474::-;3311:6;3319;3368:2;3356:9;3347:7;3343:23;3339:32;3336:119;;;3374:79;;:::i;:::-;3336:119;3494:1;3519:53;3564:7;3555:6;3544:9;3540:22;3519:53;:::i;:::-;3509:63;;3465:117;3621:2;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3592:118;3243:474;;;;;:::o;3723:90::-;3757:7;3800:5;3793:13;3786:21;3775:32;;3723:90;;;:::o;3819:109::-;3900:21;3915:5;3900:21;:::i;:::-;3895:3;3888:34;3819:109;;:::o;3934:210::-;4021:4;4059:2;4048:9;4044:18;4036:26;;4072:65;4134:1;4123:9;4119:17;4110:6;4072:65;:::i;:::-;3934:210;;;;:::o;4150:116::-;4220:21;4235:5;4220:21;:::i;:::-;4213:5;4210:32;4200:60;;4256:1;4253;4246:12;4200:60;4150:116;:::o;4272:133::-;4315:5;4353:6;4340:20;4331:29;;4369:30;4393:5;4369:30;:::i;:::-;4272:133;;;;:::o;4411:468::-;4476:6;4484;4533:2;4521:9;4512:7;4508:23;4504:32;4501:119;;;4539:79;;:::i;:::-;4501:119;4659:1;4684:53;4729:7;4720:6;4709:9;4705:22;4684:53;:::i;:::-;4674:63;;4630:117;4786:2;4812:50;4854:7;4845:6;4834:9;4830:22;4812:50;:::i;:::-;4802:60;;4757:115;4411:468;;;;;:::o;4885:765::-;4971:6;4979;4987;4995;5044:3;5032:9;5023:7;5019:23;5015:33;5012:120;;;5051:79;;:::i;:::-;5012:120;5171:1;5196:53;5241:7;5232:6;5221:9;5217:22;5196:53;:::i;:::-;5186:63;;5142:117;5298:2;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5269:118;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;4885:765;;;;;;;:::o;5656:619::-;5733:6;5741;5749;5798:2;5786:9;5777:7;5773:23;5769:32;5766:119;;;5804:79;;:::i;:::-;5766:119;5924:1;5949:53;5994:7;5985:6;5974:9;5970:22;5949:53;:::i;:::-;5939:63;;5895:117;6051:2;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6022:118;6179:2;6205:53;6250:7;6241:6;6230:9;6226:22;6205:53;:::i;:::-;6195:63;;6150:118;5656:619;;;;;:::o;6281:86::-;6316:7;6356:4;6349:5;6345:16;6334:27;;6281:86;;;:::o;6373:112::-;6456:22;6472:5;6456:22;:::i;:::-;6451:3;6444:35;6373:112;;:::o;6491:214::-;6580:4;6618:2;6607:9;6603:18;6595:26;;6631:67;6695:1;6684:9;6680:17;6671:6;6631:67;:::i;:::-;6491:214;;;;:::o;6711:329::-;6770:6;6819:2;6807:9;6798:7;6794:23;6790:32;6787:119;;;6825:79;;:::i;:::-;6787:119;6945:1;6970:53;7015:7;7006:6;6995:9;6991:22;6970:53;:::i;:::-;6960:63;;6916:117;6711:329;;;;:::o;7046:765::-;7132:6;7140;7148;7156;7205:3;7193:9;7184:7;7180:23;7176:33;7173:120;;;7212:79;;:::i;:::-;7173:120;7332:1;7357:53;7402:7;7393:6;7382:9;7378:22;7357:53;:::i;:::-;7347:63;;7303:117;7459:2;7485:53;7530:7;7521:6;7510:9;7506:22;7485:53;:::i;:::-;7475:63;;7430:118;7587:2;7613:53;7658:7;7649:6;7638:9;7634:22;7613:53;:::i;:::-;7603:63;;7558:118;7715:2;7741:53;7786:7;7777:6;7766:9;7762:22;7741:53;:::i;:::-;7731:63;;7686:118;7046:765;;;;;;;:::o;7817:60::-;7845:3;7866:5;7859:12;;7817:60;;;:::o;7883:142::-;7933:9;7966:53;7984:34;7993:24;8011:5;7993:24;:::i;:::-;7984:34;:::i;:::-;7966:53;:::i;:::-;7953:66;;7883:142;;;:::o;8031:126::-;8081:9;8114:37;8145:5;8114:37;:::i;:::-;8101:50;;8031:126;;;:::o;8163:145::-;8232:9;8265:37;8296:5;8265:37;:::i;:::-;8252:50;;8163:145;;;:::o;8314:169::-;8420:56;8470:5;8420:56;:::i;:::-;8415:3;8408:69;8314:169;;:::o;8489:260::-;8601:4;8639:2;8628:9;8624:18;8616:26;;8652:90;8739:1;8728:9;8724:17;8715:6;8652:90;:::i;:::-;8489:260;;;;:::o;8755:753::-;8835:6;8843;8851;8859;8908:3;8896:9;8887:7;8883:23;8879:33;8876:120;;;8915:79;;:::i;:::-;8876:120;9035:1;9060:50;9102:7;9093:6;9082:9;9078:22;9060:50;:::i;:::-;9050:60;;9006:114;9159:2;9185:50;9227:7;9218:6;9207:9;9203:22;9185:50;:::i;:::-;9175:60;;9130:115;9284:2;9310:53;9355:7;9346:6;9335:9;9331:22;9310:53;:::i;:::-;9300:63;;9255:118;9412:2;9438:53;9483:7;9474:6;9463:9;9459:22;9438:53;:::i;:::-;9428:63;;9383:118;8755:753;;;;;;;:::o;9514:76::-;9550:7;9579:5;9568:16;;9514:76;;;:::o;9596:120::-;9668:23;9685:5;9668:23;:::i;:::-;9661:5;9658:34;9648:62;;9706:1;9703;9696:12;9648:62;9596:120;:::o;9722:137::-;9767:5;9805:6;9792:20;9783:29;;9821:32;9847:5;9821:32;:::i;:::-;9722:137;;;;:::o;9865:472::-;9932:6;9940;9989:2;9977:9;9968:7;9964:23;9960:32;9957:119;;;9995:79;;:::i;:::-;9957:119;10115:1;10140:53;10185:7;10176:6;10165:9;10161:22;10140:53;:::i;:::-;10130:63;;10086:117;10242:2;10268:52;10312:7;10303:6;10292:9;10288:22;10268:52;:::i;:::-;10258:62;;10213:117;9865:472;;;;;:::o;10343:619::-;10420:6;10428;10436;10485:2;10473:9;10464:7;10460:23;10456:32;10453:119;;;10491:79;;:::i;:::-;10453:119;10611:1;10636:53;10681:7;10672:6;10661:9;10657:22;10636:53;:::i;:::-;10626:63;;10582:117;10738:2;10764:53;10809:7;10800:6;10789:9;10785:22;10764:53;:::i;:::-;10754:63;;10709:118;10866:2;10892:53;10937:7;10928:6;10917:9;10913:22;10892:53;:::i;:::-;10882:63;;10837:118;10343:619;;;;;:::o;10968:117::-;11077:1;11074;11067:12;11091:117;11200:1;11197;11190:12;11214:117;11323:1;11320;11313:12;11354:568;11427:8;11437:6;11487:3;11480:4;11472:6;11468:17;11464:27;11454:122;;11495:79;;:::i;:::-;11454:122;11608:6;11595:20;11585:30;;11638:18;11630:6;11627:30;11624:117;;;11660:79;;:::i;:::-;11624:117;11774:4;11766:6;11762:17;11750:29;;11828:3;11820:4;11812:6;11808:17;11798:8;11794:32;11791:41;11788:128;;;11835:79;;:::i;:::-;11788:128;11354:568;;;;;:::o;11945:::-;12018:8;12028:6;12078:3;12071:4;12063:6;12059:17;12055:27;12045:122;;12086:79;;:::i;:::-;12045:122;12199:6;12186:20;12176:30;;12229:18;12221:6;12218:30;12215:117;;;12251:79;;:::i;:::-;12215:117;12365:4;12357:6;12353:17;12341:29;;12419:3;12411:4;12403:6;12399:17;12389:8;12385:32;12382:41;12379:128;;;12426:79;;:::i;:::-;12379:128;11945:568;;;;;:::o;12519:934::-;12641:6;12649;12657;12665;12714:2;12702:9;12693:7;12689:23;12685:32;12682:119;;;12720:79;;:::i;:::-;12682:119;12868:1;12857:9;12853:17;12840:31;12898:18;12890:6;12887:30;12884:117;;;12920:79;;:::i;:::-;12884:117;13033:80;13105:7;13096:6;13085:9;13081:22;13033:80;:::i;:::-;13015:98;;;;12811:312;13190:2;13179:9;13175:18;13162:32;13221:18;13213:6;13210:30;13207:117;;;13243:79;;:::i;:::-;13207:117;13356:80;13428:7;13419:6;13408:9;13404:22;13356:80;:::i;:::-;13338:98;;;;13133:313;12519:934;;;;;;;:::o;13459:474::-;13527:6;13535;13584:2;13572:9;13563:7;13559:23;13555:32;13552:119;;;13590:79;;:::i;:::-;13552:119;13710:1;13735:53;13780:7;13771:6;13760:9;13756:22;13735:53;:::i;:::-;13725:63;;13681:117;13837:2;13863:53;13908:7;13899:6;13888:9;13884:22;13863:53;:::i;:::-;13853:63;;13808:118;13459:474;;;;;:::o;13939:180::-;13987:77;13984:1;13977:88;14084:4;14081:1;14074:15;14108:4;14105:1;14098:15;14125:320;14169:6;14206:1;14200:4;14196:12;14186:22;;14253:1;14247:4;14243:12;14274:18;14264:81;;14330:4;14322:6;14318:17;14308:27;;14264:81;14392:2;14384:6;14381:14;14361:18;14358:38;14355:84;;14411:18;;:::i;:::-;14355:84;14176:269;14125:320;;;:::o;14451:220::-;14591:34;14587:1;14579:6;14575:14;14568:58;14660:3;14655:2;14647:6;14643:15;14636:28;14451:220;:::o;14677:366::-;14819:3;14840:67;14904:2;14899:3;14840:67;:::i;:::-;14833:74;;14916:93;15005:3;14916:93;:::i;:::-;15034:2;15029:3;15025:12;15018:19;;14677:366;;;:::o;15049:419::-;15215:4;15253:2;15242:9;15238:18;15230:26;;15302:9;15296:4;15292:20;15288:1;15277:9;15273:17;15266:47;15330:131;15456:4;15330:131;:::i;:::-;15322:139;;15049:419;;;:::o;15474:180::-;15522:77;15519:1;15512:88;15619:4;15616:1;15609:15;15643:4;15640:1;15633:15;15660:102;15702:8;15749:5;15746:1;15742:13;15721:34;;15660:102;;;:::o;15768:848::-;15829:5;15836:4;15860:6;15851:15;;15884:5;15875:14;;15898:712;15919:1;15909:8;15906:15;15898:712;;;16014:4;16009:3;16005:14;15999:4;15996:24;15993:50;;;16023:18;;:::i;:::-;15993:50;16073:1;16063:8;16059:16;16056:451;;;16488:4;16481:5;16477:16;16468:25;;16056:451;16538:4;16532;16528:15;16520:23;;16568:32;16591:8;16568:32;:::i;:::-;16556:44;;15898:712;;;15768:848;;;;;;;:::o;16622:1073::-;16676:5;16867:8;16857:40;;16888:1;16879:10;;16890:5;;16857:40;16916:4;16906:36;;16933:1;16924:10;;16935:5;;16906:36;17002:4;17050:1;17045:27;;;;17086:1;17081:191;;;;16995:277;;17045:27;17063:1;17054:10;;17065:5;;;17081:191;17126:3;17116:8;17113:17;17110:43;;;17133:18;;:::i;:::-;17110:43;17182:8;17179:1;17175:16;17166:25;;17217:3;17210:5;17207:14;17204:40;;;17224:18;;:::i;:::-;17204:40;17257:5;;;16995:277;;17381:2;17371:8;17368:16;17362:3;17356:4;17353:13;17349:36;17331:2;17321:8;17318:16;17313:2;17307:4;17304:12;17300:35;17284:111;17281:246;;;17437:8;17431:4;17427:19;17418:28;;17472:3;17465:5;17462:14;17459:40;;;17479:18;;:::i;:::-;17459:40;17512:5;;17281:246;17552:42;17590:3;17580:8;17574:4;17571:1;17552:42;:::i;:::-;17537:57;;;;17626:4;17621:3;17617:14;17610:5;17607:25;17604:51;;;17635:18;;:::i;:::-;17604:51;17684:4;17677:5;17673:16;17664:25;;16622:1073;;;;;;:::o;17701:285::-;17761:5;17785:23;17803:4;17785:23;:::i;:::-;17777:31;;17829:27;17847:8;17829:27;:::i;:::-;17817:39;;17875:104;17912:66;17902:8;17896:4;17875:104;:::i;:::-;17866:113;;17701:285;;;;:::o;17992:410::-;18032:7;18055:20;18073:1;18055:20;:::i;:::-;18050:25;;18089:20;18107:1;18089:20;:::i;:::-;18084:25;;18144:1;18141;18137:9;18166:30;18184:11;18166:30;:::i;:::-;18155:41;;18345:1;18336:7;18332:15;18329:1;18326:22;18306:1;18299:9;18279:83;18256:139;;18375:18;;:::i;:::-;18256:139;18040:362;17992:410;;;;:::o;18408:180::-;18456:77;18453:1;18446:88;18553:4;18550:1;18543:15;18577:4;18574:1;18567:15;18594:176;18626:1;18643:20;18661:1;18643:20;:::i;:::-;18638:25;;18677:20;18695:1;18677:20;:::i;:::-;18672:25;;18716:1;18706:35;;18721:18;;:::i;:::-;18706:35;18762:1;18759;18755:9;18750:14;;18594:176;;;;:::o;18776:194::-;18816:4;18836:20;18854:1;18836:20;:::i;:::-;18831:25;;18870:20;18888:1;18870:20;:::i;:::-;18865:25;;18914:1;18911;18907:9;18899:17;;18938:1;18932:4;18929:11;18926:37;;;18943:18;;:::i;:::-;18926:37;18776:194;;;;:::o;18976:332::-;19097:4;19135:2;19124:9;19120:18;19112:26;;19148:71;19216:1;19205:9;19201:17;19192:6;19148:71;:::i;:::-;19229:72;19297:2;19286:9;19282:18;19273:6;19229:72;:::i;:::-;18976:332;;;;;:::o;19314:137::-;19368:5;19399:6;19393:13;19384:22;;19415:30;19439:5;19415:30;:::i;:::-;19314:137;;;;:::o;19457:345::-;19524:6;19573:2;19561:9;19552:7;19548:23;19544:32;19541:119;;;19579:79;;:::i;:::-;19541:119;19699:1;19724:61;19777:7;19768:6;19757:9;19753:22;19724:61;:::i;:::-;19714:71;;19670:125;19457:345;;;;:::o;19808:221::-;19948:34;19944:1;19936:6;19932:14;19925:58;20017:4;20012:2;20004:6;20000:15;19993:29;19808:221;:::o;20035:366::-;20177:3;20198:67;20262:2;20257:3;20198:67;:::i;:::-;20191:74;;20274:93;20363:3;20274:93;:::i;:::-;20392:2;20387:3;20383:12;20376:19;;20035:366;;;:::o;20407:419::-;20573:4;20611:2;20600:9;20596:18;20588:26;;20660:9;20654:4;20650:20;20646:1;20635:9;20631:17;20624:47;20688:131;20814:4;20688:131;:::i;:::-;20680:139;;20407:419;;;:::o;20832:222::-;20972:34;20968:1;20960:6;20956:14;20949:58;21041:5;21036:2;21028:6;21024:15;21017:30;20832:222;:::o;21060:366::-;21202:3;21223:67;21287:2;21282:3;21223:67;:::i;:::-;21216:74;;21299:93;21388:3;21299:93;:::i;:::-;21417:2;21412:3;21408:12;21401:19;;21060:366;;;:::o;21432:419::-;21598:4;21636:2;21625:9;21621:18;21613:26;;21685:9;21679:4;21675:20;21671:1;21660:9;21656:17;21649:47;21713:131;21839:4;21713:131;:::i;:::-;21705:139;;21432:419;;;:::o;21857:224::-;21997:34;21993:1;21985:6;21981:14;21974:58;22066:7;22061:2;22053:6;22049:15;22042:32;21857:224;:::o;22087:366::-;22229:3;22250:67;22314:2;22309:3;22250:67;:::i;:::-;22243:74;;22326:93;22415:3;22326:93;:::i;:::-;22444:2;22439:3;22435:12;22428:19;;22087:366;;;:::o;22459:419::-;22625:4;22663:2;22652:9;22648:18;22640:26;;22712:9;22706:4;22702:20;22698:1;22687:9;22683:17;22676:47;22740:131;22866:4;22740:131;:::i;:::-;22732:139;;22459:419;;;:::o;22884:180::-;22932:77;22929:1;22922:88;23029:4;23026:1;23019:15;23053:4;23050:1;23043:15;23070:233;23109:3;23132:24;23150:5;23132:24;:::i;:::-;23123:33;;23178:66;23171:5;23168:77;23165:103;;23248:18;;:::i;:::-;23165:103;23295:1;23288:5;23284:13;23277:20;;23070:233;;;:::o;23309:225::-;23449:34;23445:1;23437:6;23433:14;23426:58;23518:8;23513:2;23505:6;23501:15;23494:33;23309:225;:::o;23540:366::-;23682:3;23703:67;23767:2;23762:3;23703:67;:::i;:::-;23696:74;;23779:93;23868:3;23779:93;:::i;:::-;23897:2;23892:3;23888:12;23881:19;;23540:366;;;:::o;23912:419::-;24078:4;24116:2;24105:9;24101:18;24093:26;;24165:9;24159:4;24155:20;24151:1;24140:9;24136:17;24129:47;24193:131;24319:4;24193:131;:::i;:::-;24185:139;;23912:419;;;:::o;24337:185::-;24377:1;24394:20;24412:1;24394:20;:::i;:::-;24389:25;;24428:20;24446:1;24428:20;:::i;:::-;24423:25;;24467:1;24457:35;;24472:18;;:::i;:::-;24457:35;24514:1;24511;24507:9;24502:14;;24337:185;;;;:::o;24528:182::-;24668:34;24664:1;24656:6;24652:14;24645:58;24528:182;:::o;24716:366::-;24858:3;24879:67;24943:2;24938:3;24879:67;:::i;:::-;24872:74;;24955:93;25044:3;24955:93;:::i;:::-;25073:2;25068:3;25064:12;25057:19;;24716:366;;;:::o;25088:419::-;25254:4;25292:2;25281:9;25277:18;25269:26;;25341:9;25335:4;25331:20;25327:1;25316:9;25312:17;25305:47;25369:131;25495:4;25369:131;:::i;:::-;25361:139;;25088:419;;;:::o;25513:191::-;25553:3;25572:20;25590:1;25572:20;:::i;:::-;25567:25;;25606:20;25624:1;25606:20;:::i;:::-;25601:25;;25649:1;25646;25642:9;25635:16;;25670:3;25667:1;25664:10;25661:36;;;25677:18;;:::i;:::-;25661:36;25513:191;;;;:::o;25710:171::-;25850:23;25846:1;25838:6;25834:14;25827:47;25710:171;:::o;25887:366::-;26029:3;26050:67;26114:2;26109:3;26050:67;:::i;:::-;26043:74;;26126:93;26215:3;26126:93;:::i;:::-;26244:2;26239:3;26235:12;26228:19;;25887:366;;;:::o;26259:419::-;26425:4;26463:2;26452:9;26448:18;26440:26;;26512:9;26506:4;26502:20;26498:1;26487:9;26483:17;26476:47;26540:131;26666:4;26540:131;:::i;:::-;26532:139;;26259:419;;;:::o;26684:174::-;26824:26;26820:1;26812:6;26808:14;26801:50;26684:174;:::o;26864:366::-;27006:3;27027:67;27091:2;27086:3;27027:67;:::i;:::-;27020:74;;27103:93;27192:3;27103:93;:::i;:::-;27221:2;27216:3;27212:12;27205:19;;26864:366;;;:::o;27236:419::-;27402:4;27440:2;27429:9;27425:18;27417:26;;27489:9;27483:4;27479:20;27475:1;27464:9;27460:17;27453:47;27517:131;27643:4;27517:131;:::i;:::-;27509:139;;27236:419;;;:::o;27661:228::-;27696:3;27719:23;27736:5;27719:23;:::i;:::-;27710:32;;27764:66;27757:5;27754:77;27751:103;;27834:18;;:::i;:::-;27751:103;27877:5;27874:1;27870:13;27863:20;;27661:228;;;:::o;27895:664::-;28100:4;28138:3;28127:9;28123:19;28115:27;;28152:71;28220:1;28209:9;28205:17;28196:6;28152:71;:::i;:::-;28233:72;28301:2;28290:9;28286:18;28277:6;28233:72;:::i;:::-;28315;28383:2;28372:9;28368:18;28359:6;28315:72;:::i;:::-;28397;28465:2;28454:9;28450:18;28441:6;28397:72;:::i;:::-;28479:73;28547:3;28536:9;28532:19;28523:6;28479:73;:::i;:::-;27895:664;;;;;;;;:::o;28565:180::-;28613:77;28610:1;28603:88;28710:4;28707:1;28700:15;28734:4;28731:1;28724:15;28751:143;28808:5;28839:6;28833:13;28824:22;;28855:33;28882:5;28855:33;:::i;:::-;28751:143;;;;:::o;28900:351::-;28970:6;29019:2;29007:9;28998:7;28994:23;28990:32;28987:119;;;29025:79;;:::i;:::-;28987:119;29145:1;29170:64;29226:7;29217:6;29206:9;29202:22;29170:64;:::i;:::-;29160:74;;29116:128;28900:351;;;;:::o;29257:85::-;29302:7;29331:5;29320:16;;29257:85;;;:::o;29348:158::-;29406:9;29439:61;29457:42;29466:32;29492:5;29466:32;:::i;:::-;29457:42;:::i;:::-;29439:61;:::i;:::-;29426:74;;29348:158;;;:::o;29512:147::-;29607:45;29646:5;29607:45;:::i;:::-;29602:3;29595:58;29512:147;;:::o;29665:114::-;29732:6;29766:5;29760:12;29750:22;;29665:114;;;:::o;29785:184::-;29884:11;29918:6;29913:3;29906:19;29958:4;29953:3;29949:14;29934:29;;29785:184;;;;:::o;29975:132::-;30042:4;30065:3;30057:11;;30095:4;30090:3;30086:14;30078:22;;29975:132;;;:::o;30113:108::-;30190:24;30208:5;30190:24;:::i;:::-;30185:3;30178:37;30113:108;;:::o;30227:179::-;30296:10;30317:46;30359:3;30351:6;30317:46;:::i;:::-;30395:4;30390:3;30386:14;30372:28;;30227:179;;;;:::o;30412:113::-;30482:4;30514;30509:3;30505:14;30497:22;;30412:113;;;:::o;30561:732::-;30680:3;30709:54;30757:5;30709:54;:::i;:::-;30779:86;30858:6;30853:3;30779:86;:::i;:::-;30772:93;;30889:56;30939:5;30889:56;:::i;:::-;30968:7;30999:1;30984:284;31009:6;31006:1;31003:13;30984:284;;;31085:6;31079:13;31112:63;31171:3;31156:13;31112:63;:::i;:::-;31105:70;;31198:60;31251:6;31198:60;:::i;:::-;31188:70;;31044:224;31031:1;31028;31024:9;31019:14;;30984:284;;;30988:14;31284:3;31277:10;;30685:608;;;30561:732;;;;:::o;31299:831::-;31562:4;31600:3;31589:9;31585:19;31577:27;;31614:71;31682:1;31671:9;31667:17;31658:6;31614:71;:::i;:::-;31695:80;31771:2;31760:9;31756:18;31747:6;31695:80;:::i;:::-;31822:9;31816:4;31812:20;31807:2;31796:9;31792:18;31785:48;31850:108;31953:4;31944:6;31850:108;:::i;:::-;31842:116;;31968:72;32036:2;32025:9;32021:18;32012:6;31968:72;:::i;:::-;32050:73;32118:3;32107:9;32103:19;32094:6;32050:73;:::i;:::-;31299:831;;;;;;;;:::o;32136:807::-;32385:4;32423:3;32412:9;32408:19;32400:27;;32437:71;32505:1;32494:9;32490:17;32481:6;32437:71;:::i;:::-;32518:72;32586:2;32575:9;32571:18;32562:6;32518:72;:::i;:::-;32600:80;32676:2;32665:9;32661:18;32652:6;32600:80;:::i;:::-;32690;32766:2;32755:9;32751:18;32742:6;32690:80;:::i;:::-;32780:73;32848:3;32837:9;32833:19;32824:6;32780:73;:::i;:::-;32863;32931:3;32920:9;32916:19;32907:6;32863:73;:::i;:::-;32136:807;;;;;;;;;:::o;32949:143::-;33006:5;33037:6;33031:13;33022:22;;33053:33;33080:5;33053:33;:::i;:::-;32949:143;;;;:::o;33098:663::-;33186:6;33194;33202;33251:2;33239:9;33230:7;33226:23;33222:32;33219:119;;;33257:79;;:::i;:::-;33219:119;33377:1;33402:64;33458:7;33449:6;33438:9;33434:22;33402:64;:::i;:::-;33392:74;;33348:128;33515:2;33541:64;33597:7;33588:6;33577:9;33573:22;33541:64;:::i;:::-;33531:74;;33486:129;33654:2;33680:64;33736:7;33727:6;33716:9;33712:22;33680:64;:::i;:::-;33670:74;;33625:129;33098:663;;;;;:::o

Metadata Hash

ipfs://d3e8b40e9ad5753592eaa803912e15d755deef302d7dd29b1d121df41026791b
Loading