Token Space

Overview ERC20

Price
$0.00 @ 0.000000 AVAX
Fully Diluted Market Cap
Total Supply:
192,716.796535 SPACE

Holders:
1,436 addresses

Transfers:
-

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

OVERVIEW

Vortex DAO is an OHM-derivative that supports and invests in Avalanche-native projects. They are committed to providing value and fun for holders of $SPACE and other projects released by the team.


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

Contract Source Code Verified (Exact Match)

Contract Name:
SpaceERC20Token

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-14
*/

// Sources flattened with hardhat v2.7.0 https://hardhat.org

// File @openzeppelin/contracts/token/ERC20/[email protected]

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// OpenZeppelin Contracts v4.4.0 (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/utils/[email protected]

// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/token/ERC20/[email protected]

// OpenZeppelin Contracts v4.4.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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/utils/math/[email protected]

// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/access/[email protected]

// OpenZeppelin Contracts v4.4.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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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

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

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


// File contracts/SpaceERC20Token.sol

pragma solidity ^0.8.2;

contract VaultOwned is Ownable {
    
  address internal _vault;

  function setVault( address vault_ ) external onlyOwner() returns ( bool ) {
    _vault = vault_;

    return true;
  }

  function vault() public view returns (address) {
    return _vault;
  }

  modifier onlyVault() {
    require( _vault == msg.sender, "VaultOwned: caller is not the Vault" );
    _;
  }

}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    function factory() external pure returns (address);
    function WAVAX() external pure returns (address);

    function addLiquidityAVAX(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountAVAXMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountAVAX, uint liquidity);

    function swapExactAVAXForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

interface IDividendDistributor {
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract SpaceERC20Token is ERC20, VaultOwned {

    using SafeMath for uint256;

    uint256 totalFee      = 12; // 12% Tax on all transactions
    uint256 reflectionFee = 8;  //  8% reflects AVAX back to holders
    uint256 liquidityFee  = 2;  //  2% for automatically buying liquidity tokens
    uint256 marketingFee  = 2;  //  2% for marketing
    bool public feesEnabled = false;
    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;
    mapping (address => bool) isFeeExempt;

    bool public dividendsEnabled = true;
    mapping (address => bool) isDividendExempt;

    bool public swapEnabled = false;
    uint256 public swapThreshold = 20; // Once the collected liquidity fee amounts to 0.005% of supply, swap it for more LP
    address intermediateToken = address(0);

    IDEXRouter router;
    address public routerAddress;
    address public pair;

    IDividendDistributor distributor;
    address public distributorAddress;
    uint256 distributorGas = 500000;

    bool inSwap = false;
    
    modifier swapping() { inSwap = true; _; inSwap = false; }

    uint256 targetLiquidityPct = 25;

    event AutoLiquify(uint256 amountAVAX, uint256 amountDIV);

    constructor(address _router, address _pair_currency, address _team_wallet) ERC20("Space", "SPACE") payable {
      _mint(msg.sender, 25_000 * (10 ** decimals()));
      routerAddress = _router;
      router = IDEXRouter(routerAddress);
      isDividendExempt[routerAddress] = true;
      _approve(address(this), routerAddress, totalSupply());

      pair = IDEXFactory(router.factory()).createPair(_pair_currency, address(this));
      isDividendExempt[pair] = true;
      approve(address(pair), totalSupply());

      isDividendExempt[address(this)] = true;
      isDividendExempt[address(0)] = true;
      isDividendExempt[msg.sender] = true;

      autoLiquidityReceiver = _team_wallet;
      marketingFeeReceiver = _team_wallet;
    }

    receive() external payable { }

    function setDistributor(address _distributor) external onlyVault() {
      distributorAddress = _distributor;
      distributor = IDividendDistributor(distributorAddress);
    }

    function mint(address account_, uint256 amount_) external onlyVault() {
        _mint(account_, amount_);
    }

    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
    }
     
    function burnFrom(address account_, uint256 amount_) public {
        _burnFrom(account_, amount_);
    }

    function _burnFrom(address account_, uint256 amount_) public {
        uint256 decreasedAllowance_ =
            allowance(account_, msg.sender).sub(
                amount_,
                "ERC20: burn amount exceeds allowance"
            );

        _approve(account_, msg.sender, decreasedAllowance_);
        _burn(account_, amount_);
    }

    function decimals() public pure override returns (uint8) {
        return 9;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual override {

        if (inSwap) { 
            super._transfer(sender, recipient, amount);
            return;
        }
        
        if (
            swapEnabled &&
            (recipient == pair || recipient == routerAddress) &&
            msg.sender != pair &&
            balanceOf(address(this)) >= swapThreshold &&
            sender != address(0) &&
            recipient != address(0)
        ) {
            swapBack();
        }
        
        uint256 amountReceived = amount;

        if (feesEnabled && !isFeeExempt[sender]) {
            uint256 feeAmount = amount.mul(totalFee).div(100);

            super._transfer(sender, address(this), feeAmount);

            amountReceived = amount.sub(feeAmount);
        }
        
        if (dividendsEnabled) {
            if (!isDividendExempt[sender]) { try distributor.setShare(sender, balanceOf(sender)) {} catch {} }
            if (!isDividendExempt[recipient]) { try distributor.setShare(recipient, balanceOf(recipient)) {} catch {} }

            try distributor.process(distributorGas) {} catch {}
        }
        super._transfer(sender, recipient, amountReceived);
    }

    function swapBack() internal swapping {
        uint256 total_liquidity_backing = balanceOf(pair).mul(200).div(totalSupply());
        uint256 dynamicLiquidityFee = (total_liquidity_backing > targetLiquidityPct) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);
        
        uint256 balanceBefore = address(this).balance;
 
        if (intermediateToken == address(0)) {
          address[] memory path = new address[](2);
          path[0] = address(this);
          path[1] = router.WAVAX();
          router.swapExactTokensForAVAXSupportingFeeOnTransferTokens(
              amountToSwap,
              0,
              path,
              address(this),
              block.timestamp
          );
        } else {
          address[] memory path = new address[](3);
          path[0] = address(this);
          path[1] = address(intermediateToken);
          path[2] = router.WAVAX();
          router.swapExactTokensForAVAXSupportingFeeOnTransferTokens(
              amountToSwap,
              0,
              path,
              address(this),
              block.timestamp
          );
        }

        uint256 amountAVAX = address(this).balance.sub(balanceBefore);

        uint256 totalAVAXFee = totalFee.sub(dynamicLiquidityFee.div(2));

        uint256 amountAVAXLiquidity = amountAVAX.mul(dynamicLiquidityFee).div(totalAVAXFee).div(2);
        uint256 amountAVAXReflection = amountAVAX.mul(reflectionFee).div(totalAVAXFee);
        uint256 amountAVAXMarketing = amountAVAX.mul(marketingFee).div(totalAVAXFee);

        try distributor.deposit{value: amountAVAXReflection}() {} catch {}
        payable(marketingFeeReceiver).transfer(amountAVAXMarketing);
            
        if(amountToLiquify > 0){
            router.addLiquidityAVAX{value: amountAVAXLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountAVAXLiquidity, amountToLiquify);
        }
    }

    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function setIntermediateToken(address _token) external onlyOwner {
        intermediateToken = _token;
    }

    function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
        require (holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if (exempt) {
            distributor.setShare(holder, 0);
        } else{
            distributor.setShare(holder, balanceOf(holder));
        }
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function setRouter(address _router) external onlyOwner {
        routerAddress = _router;

        isDividendExempt[routerAddress] = true;
        _approve(address(this), routerAddress, totalSupply());
    }

    function setPair(address _pair) external onlyOwner {
        pair = _pair;

        isDividendExempt[pair] = true;
        approve(address(pair), totalSupply());
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner {
        require (_amount > 0, "Swap threshold must be greater than 0");
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidityPct(uint256 _target) external onlyOwner {
        require (_target < 99, "Target liquidity percentage can't be 100 or more");
        targetLiquidityPct = _target;
    }

    function setDistributorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000);
        distributorGas = gas;
    }

    function setFeeOptions(bool _enabled, uint256 _reflectionFee, uint256 _liquidityFee, uint256 _marketingFee) external onlyOwner {
        feesEnabled = _enabled;
        reflectionFee = _reflectionFee;
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        totalFee = reflectionFee + liquidityFee + marketingFee;
        require(totalFee < 25, "Fees too high");
    }

    function setDividendsEnabled(bool _enabled) external onlyOwner {
        dividendsEnabled = _enabled;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_pair_currency","type":"address"},{"internalType":"address","name":"_team_wallet","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountAVAX","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountDIV","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"_burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_distributor","type":"address"}],"name":"setDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setDividendsEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"setFeeOptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setIntermediateToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"}],"name":"setTargetLiquidityPct","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vault_","type":"address"}],"name":"setVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040819052600c6007556008805560026009819055600a55600b805460ff19908116909155600e80548216600117905560108054821690556014601155601280546001600160a01b03191690556207a120601855601980549091168155601a5562002e54388190039081908339810160408190526200008091620006f1565b60405180604001604052806005815260200164537061636560d81b81525060405180604001604052806005815260200164535041434560d81b8152508160039080519060200190620000d49291906200060a565b508051620000ea9060049060208401906200060a565b50505062000107620001016200038b60201b60201c565b6200038f565b6200012e336200011a6009600a620007a2565b62000128906161a86200088d565b620003e1565b601480546001600160a01b038086166001600160a01b031992831617808455601380549093169082169081179092556000918252600f6020526040909120805460ff19166001179055905462000191913091166200018b60025490565b620004ca565b601360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001e057600080fd5b505afa158015620001f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021b9190620006cd565b6040516364e329cb60e11b81526001600160a01b038481166004830152306024830152919091169063c9c6539690604401602060405180830381600087803b1580156200026757600080fd5b505af11580156200027c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a29190620006cd565b601580546001600160a01b0319166001600160a01b039283161780825582166000908152600f60205260409020805460ff1916600117905554620002f19116620002eb60025490565b620005f2565b50306000908152600f60205260408082208054600160ff1991821681179092557ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec37580548216831790553384529190922080549091169091179055600b8054610100600160a81b0319166101006001600160a01b0393909316928302179055600c80546001600160a01b031916909117905550620009029050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166200043d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b80600260008282546200045191906200073a565b90915550506001600160a01b03821660009081526020819052604081208054839290620004809084906200073a565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6001600160a01b0383166200052e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000434565b6001600160a01b038216620005915760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000434565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600062000601338484620004ca565b50600192915050565b8280546200061890620008af565b90600052602060002090601f0160209004810192826200063c576000855562000687565b82601f106200065757805160ff191683800117855562000687565b8280016001018555821562000687579182015b82811115620006875782518255916020019190600101906200066a565b506200069592915062000699565b5090565b5b808211156200069557600081556001016200069a565b80516001600160a01b0381168114620006c857600080fd5b919050565b600060208284031215620006df578081fd5b620006ea82620006b0565b9392505050565b60008060006060848603121562000706578182fd5b6200071184620006b0565b92506200072160208501620006b0565b91506200073160408501620006b0565b90509250925092565b60008219821115620007505762000750620008ec565b500190565b80825b600180861162000769575062000799565b8187048211156200077e576200077e620008ec565b808616156200078c57918102915b9490941c93800262000758565b94509492505050565b6000620006ea60001960ff851684600082620007c157506001620006ea565b81620007d057506000620006ea565b8160018114620007e95760028114620007f45762000828565b6001915050620006ea565b60ff841115620008085762000808620008ec565b6001841b915084821115620008215762000821620008ec565b50620006ea565b5060208310610133831016604e8410600b841016171562000860575081810a838111156200085a576200085a620008ec565b620006ea565b6200086f848484600162000755565b808604821115620008845762000884620008ec565b02949350505050565b6000816000190483118215151615620008aa57620008aa620008ec565b500290565b600281046001821680620008c457607f821691505b60208210811415620008e657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b61254280620009126000396000f3fe6080604052600436106102555760003560e01c80639d1944f511610139578063c0d78655116100b6578063e96fada21161007a578063e96fada214610713578063ecad202b14610733578063f2fde38b14610753578063f708a64f14610773578063fa97f67714610793578063fbfa77cf146107b35761025c565b8063c0d7865514610648578063ca33e64c14610668578063cd1ad7c31461068d578063dd62ed3e146106ad578063df20fd49146106f35761025c565b8063a64e4f8a116100fd578063a64e4f8a146105b4578063a8aa1b31146105ce578063a9059cbb146105ee578063a92d9cff1461060e578063bb6c6d311461062e5761025c565b80639d1944f514610514578063a22b35ce14610534578063a457c2d714610554578063a4b45c0014610574578063a51af4c5146105945761025c565b8063658d4b7f116101d2578063715018a611610196578063715018a61461046c57806375619ab51461048157806379cc6790146104a15780638187f516146104c15780638da5cb5b146104e157806395d89b41146104ff5761025c565b8063658d4b7f146103c75780636817031b146103e75780636ddd1713146104075780637088fb7f1461042157806370a08231146104365761025c565b8063313ce56711610219578063313ce567146103115780633268cc561461032d578063395093511461036557806340c10f191461038557806342966c68146103a75761025c565b80630445b6671461026157806306fdde031461028a578063095ea7b3146102ac57806318160ddd146102dc57806323b872dd146102f15761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b5061027760115481565b6040519081526020015b60405180910390f35b34801561029657600080fd5b5061029f6107d1565b60405161028191906122d9565b3480156102b857600080fd5b506102cc6102c73660046121fc565b610863565b6040519015158152602001610281565b3480156102e857600080fd5b50600254610277565b3480156102fd57600080fd5b506102cc61030c366004612188565b610879565b34801561031d57600080fd5b5060405160098152602001610281565b34801561033957600080fd5b5060145461034d906001600160a01b031681565b6040516001600160a01b039091168152602001610281565b34801561037157600080fd5b506102cc6103803660046121fc565b610928565b34801561039157600080fd5b506103a56103a03660046121fc565b610964565b005b3480156103b357600080fd5b506103a56103c2366004612294565b61099c565b3480156103d357600080fd5b506103a56103e23660046121c8565b6109a9565b3480156103f357600080fd5b506102cc610402366004612118565b6109fe565b34801561041357600080fd5b506010546102cc9060ff1681565b34801561042d57600080fd5b506103a5610a4f565b34801561044257600080fd5b50610277610451366004612118565b6001600160a01b031660009081526020819052604090205490565b34801561047857600080fd5b506103a5610aa8565b34801561048d57600080fd5b506103a561049c366004612118565b610ade565b3480156104ad57600080fd5b506103a56104bc3660046121fc565b610b37565b3480156104cd57600080fd5b506103a56104dc366004612118565b610b41565b3480156104ed57600080fd5b506005546001600160a01b031661034d565b34801561050b57600080fd5b5061029f610bb6565b34801561052057600080fd5b506103a561052f366004612294565b610bc5565b34801561054057600080fd5b506103a561054f3660046121fc565b610c03565b34801561056057600080fd5b506102cc61056f3660046121fc565b610c69565b34801561058057600080fd5b506103a561058f366004612150565b610d02565b3480156105a057600080fd5b5060175461034d906001600160a01b031681565b3480156105c057600080fd5b50600b546102cc9060ff1681565b3480156105da57600080fd5b5060155461034d906001600160a01b031681565b3480156105fa57600080fd5b506102cc6106093660046121fc565b610d64565b34801561061a57600080fd5b506103a5610629366004612118565b610d71565b34801561063a57600080fd5b50600e546102cc9060ff1681565b34801561065457600080fd5b506103a5610663366004612118565b610dbd565b34801561067457600080fd5b50600b5461034d9061010090046001600160a01b031681565b34801561069957600080fd5b506103a56106a8366004612227565b610e34565b3480156106b957600080fd5b506102776106c8366004612150565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156106ff57600080fd5b506103a561070e366004612241565b610e71565b34801561071f57600080fd5b50600c5461034d906001600160a01b031681565b34801561073f57600080fd5b506103a561074e36600461225c565b610f10565b34801561075f57600080fd5b506103a561076e366004612118565b610fb6565b34801561077f57600080fd5b506103a561078e3660046121c8565b61104e565b34801561079f57600080fd5b506103a56107ae366004612294565b6111d3565b3480156107bf57600080fd5b506006546001600160a01b031661034d565b6060600380546107e090612482565b80601f016020809104026020016040519081016040528092919081815260200182805461080c90612482565b80156108595780601f1061082e57610100808354040283529160200191610859565b820191906000526020600020905b81548152906001019060200180831161083c57829003601f168201915b5050505050905090565b600061087033848461126b565b50600192915050565b600061088684848461138f565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156109105760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b61091d853385840361126b565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161087091859061095f908690612414565b61126b565b6006546001600160a01b0316331461098e5760405162461bcd60e51b81526004016109079061232c565b6109988282611687565b5050565b6109a63382611767565b50565b6005546001600160a01b031633146109d35760405162461bcd60e51b81526004016109079061236f565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6005546000906001600160a01b03163314610a2b5760405162461bcd60e51b81526004016109079061236f565b50600680546001600160a01b0319166001600160a01b03831617905560015b919050565b6005546001600160a01b03163314610a795760405162461bcd60e51b81526004016109079061236f565b6040514790339082156108fc029083906000818181858888f19350505050158015610998573d6000803e3d6000fd5b6005546001600160a01b03163314610ad25760405162461bcd60e51b81526004016109079061236f565b610adc60006118b5565b565b6006546001600160a01b03163314610b085760405162461bcd60e51b81526004016109079061232c565b601780546001600160a01b03199081166001600160a01b03938416179182905560168054929093169116179055565b6109988282610c03565b6005546001600160a01b03163314610b6b5760405162461bcd60e51b81526004016109079061236f565b601580546001600160a01b0319166001600160a01b038381169190911780835581166000908152600f60205260409020805460ff19166001179055905461099891166102c760025490565b6060600480546107e090612482565b6005546001600160a01b03163314610bef5760405162461bcd60e51b81526004016109079061236f565b620b71b08110610bfe57600080fd5b601855565b6000610c4d826040518060600160405280602481526020016124e9602491396001600160a01b03861660009081526001602090815260408083203384529091529020549190611907565b9050610c5a83338361126b565b610c648383611767565b505050565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610ceb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610907565b610cf8338585840361126b565b5060019392505050565b6005546001600160a01b03163314610d2c5760405162461bcd60e51b81526004016109079061236f565b600b8054610100600160a81b0319166101006001600160a01b0394851602179055600c80546001600160a01b03191691909216179055565b600061087033848461138f565b6005546001600160a01b03163314610d9b5760405162461bcd60e51b81526004016109079061236f565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610de75760405162461bcd60e51b81526004016109079061236f565b601480546001600160a01b0319166001600160a01b038381169190911780835581166000908152600f60205260409020805460ff1916600117905590546109a69130911661095f60025490565b6005546001600160a01b03163314610e5e5760405162461bcd60e51b81526004016109079061236f565b600e805460ff1916911515919091179055565b6005546001600160a01b03163314610e9b5760405162461bcd60e51b81526004016109079061236f565b60008111610ef95760405162461bcd60e51b815260206004820152602560248201527f53776170207468726573686f6c64206d75737420626520677265617465722074604482015264068616e20360dc1b6064820152608401610907565b6010805460ff191692151592909217909155601155565b6005546001600160a01b03163314610f3a5760405162461bcd60e51b81526004016109079061236f565b600b805460ff191685151517905560088390556009829055600a81905580610f628385612414565b610f6c9190612414565b6007819055601911610fb05760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b6044820152606401610907565b50505050565b6005546001600160a01b03163314610fe05760405162461bcd60e51b81526004016109079061236f565b6001600160a01b0381166110455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610907565b6109a6816118b5565b6005546001600160a01b031633146110785760405162461bcd60e51b81526004016109079061236f565b6001600160a01b038216301480159061109f57506015546001600160a01b03838116911614155b6110a857600080fd5b6001600160a01b0382166000908152600f60205260409020805460ff1916821580159190911790915561114057601654604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401600060405180830381600087803b15801561112357600080fd5b505af1158015611137573d6000803e3d6000fd5b50505050610998565b6016546001600160a01b03166314b6ca9683611171816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156111b757600080fd5b505af11580156111cb573d6000803e3d6000fd5b505050505050565b6005546001600160a01b031633146111fd5760405162461bcd60e51b81526004016109079061236f565b606381106112665760405162461bcd60e51b815260206004820152603060248201527f546172676574206c69717569646974792070657263656e746167652063616e2760448201526f7420626520313030206f72206d6f726560801b6064820152608401610907565b601a55565b6001600160a01b0383166112cd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610907565b6001600160a01b03821661132e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610907565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60195460ff16156113aa576113a5838383611933565b610c64565b60105460ff1680156113e057506015546001600160a01b03838116911614806113e057506014546001600160a01b038381169116145b80156113f757506015546001600160a01b03163314155b801561141457506011543060009081526020819052604090205410155b801561142857506001600160a01b03831615155b801561143c57506001600160a01b03821615155b1561144957611449611b01565b600b54819060ff16801561147657506001600160a01b0384166000908152600d602052604090205460ff16155b156114b857600061149d6064611497600754866120dd90919063ffffffff16565b906120f0565b90506114aa853083611933565b6114b483826120fc565b9150505b600e5460ff161561167c576001600160a01b0384166000908152600f602052604090205460ff1661156d576016546001600160a01b03166314b6ca9685611514816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561155a57600080fd5b505af192505050801561156b575060015b505b6001600160a01b0383166000908152600f602052604090205460ff16611617576016546001600160a01b03166314b6ca96846115be816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561160457600080fd5b505af1925050508015611615575060015b505b6016546018546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c4799161164f9160040190815260200190565b600060405180830381600087803b15801561166957600080fd5b505af192505050801561167a575060015b505b610fb0848483611933565b6001600160a01b0382166116dd5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610907565b80600260008282546116ef9190612414565b90915550506001600160a01b0382166000908152602081905260408120805483929061171c908490612414565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610998565b6001600160a01b0382166117c75760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610907565b6001600160a01b0382166000908152602081905260409020548181101561183b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610907565b6001600160a01b038316600090815260208190526040812083830390556002805484929061186a90849061246b565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610c64565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000818484111561192b5760405162461bcd60e51b815260040161090791906122d9565b505050900390565b6001600160a01b0383166119975760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610907565b6001600160a01b0382166119f95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610907565b6001600160a01b03831660009081526020819052604090205481811015611a715760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610907565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611aa8908490612414565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611af491815260200190565b60405180910390a3610fb0565b6019805460ff191660011790556000611b42611b1c60025490565b6015546001600160a01b03166000908152602081905260409020546114979060c86120dd565b90506000601a548211611b5757600954611b5a565b60005b90506000611b7e6002611497600754611497866011546120dd90919063ffffffff16565b90506000611b97826011546120fc90919063ffffffff16565b60125490915047906001600160a01b0316611d1a576040805160028082526060820183526000926020830190803683370190505090503081600081518110611bef57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601354604080516339d94ae160e11b8152905191909316926373b295c2926004808301939192829003018186803b158015611c4357600080fd5b505afa158015611c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7b9190612134565b81600181518110611c9c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601354604051633b158ab160e11b815291169063762b156290611ce29086906000908690309042906004016123a4565b600060405180830381600087803b158015611cfc57600080fd5b505af1158015611d10573d6000803e3d6000fd5b5050505050611ec5565b60408051600380825260808201909252600091602082016060803683370190505090503081600081518110611d5f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601254825191169082906001908110611d9e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601354604080516339d94ae160e11b8152905191909316926373b295c2926004808301939192829003018186803b158015611df257600080fd5b505afa158015611e06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2a9190612134565b81600281518110611e4b57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601354604051633b158ab160e11b815291169063762b156290611e919086906000908690309042906004016123a4565b600060405180830381600087803b158015611eab57600080fd5b505af1158015611ebf573d6000803e3d6000fd5b50505050505b6000611ed147836120fc565b90506000611eec611ee38760026120f0565b600754906120fc565b90506000611f0160026114978481878c6120dd565b90506000611f1e83611497600854876120dd90919063ffffffff16565b90506000611f3b84611497600a54886120dd90919063ffffffff16565b9050601660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f8d57600080fd5b505af193505050508015611f9f575060015b50600c546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611fda573d6000803e3d6000fd5b5087156120c757601354600b54604051637c8d9fb960e11b8152306004820152602481018b905260006044820181905260648201526001600160a01b03610100909204821660848201524260a482015291169063f91b3f7290859060c4016060604051808303818588803b15801561205157600080fd5b505af1158015612065573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061208a91906122ac565b505060408051858152602081018b90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506019805460ff191690555050505050505050565b60006120e9828461244c565b9392505050565b60006120e9828461242c565b60006120e9828461246b565b80358015158114610a4a57600080fd5b600060208284031215612129578081fd5b81356120e9816124d3565b600060208284031215612145578081fd5b81516120e9816124d3565b60008060408385031215612162578081fd5b823561216d816124d3565b9150602083013561217d816124d3565b809150509250929050565b60008060006060848603121561219c578081fd5b83356121a7816124d3565b925060208401356121b7816124d3565b929592945050506040919091013590565b600080604083850312156121da578182fd5b82356121e5816124d3565b91506121f360208401612108565b90509250929050565b6000806040838503121561220e578182fd5b8235612219816124d3565b946020939093013593505050565b600060208284031215612238578081fd5b6120e982612108565b60008060408385031215612253578182fd5b61221983612108565b60008060008060808587031215612271578081fd5b61227a85612108565b966020860135965060408601359560600135945092505050565b6000602082840312156122a5578081fd5b5035919050565b6000806000606084860312156122c0578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015612305578581018301518582016040015282016122e9565b818111156123165783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f5661756c744f776e65643a2063616c6c6572206973206e6f74207468652056616040820152621d5b1d60ea1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156123f35784516001600160a01b0316835293830193918301916001016123ce565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612427576124276124bd565b500190565b60008261244757634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612466576124666124bd565b500290565b60008282101561247d5761247d6124bd565b500390565b60028104600182168061249657607f821691505b602082108114156124b757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146109a657600080fdfe45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212208c1af47e00e41361cfd41aacb94b1d7478691c69181884a2f6bfd020a51c89c964736f6c6343000802003300000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d000000000000000000000000dcd1d1d4ab3f82abad68b1bde4b69c1b051cacd4

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d000000000000000000000000dcd1d1d4ab3f82abad68b1bde4b69c1b051cacd4

-----Decoded View---------------
Arg [0] : _router (address): 0x60ae616a2155ee3d9a68541ba4544862310933d4
Arg [1] : _pair_currency (address): 0x130966628846bfd36ff31a822705796e8cb8c18d
Arg [2] : _team_wallet (address): 0xdcd1d1d4ab3f82abad68b1bde4b69c1b051cacd4

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4
Arg [1] : 000000000000000000000000130966628846bfd36ff31a822705796e8cb8c18d
Arg [2] : 000000000000000000000000dcd1d1d4ab3f82abad68b1bde4b69c1b051cacd4


Deployed ByteCode Sourcemap

27921:9041:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28581:33;;;;;;;;;;;;;;;;;;;12289:25:1;;;12277:2;12262:18;28581:33:0;;;;;;;;6770:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8937:169::-;;;;;;;;;;-1:-1:-1;8937:169:0;;;;;:::i;:::-;;:::i;:::-;;;5166:14:1;;5159:22;5141:41;;5129:2;5114:18;8937:169:0;5096:92:1;7890:108:0;;;;;;;;;;-1:-1:-1;7978:12:0;;7890:108;;9588:492;;;;;;;;;;-1:-1:-1;9588:492:0;;;;;:::i;:::-;;:::i;30843:84::-;;;;;;;;;;-1:-1:-1;30843:84:0;;30918:1;13708:36:1;;13696:2;13681:18;30843:84:0;13663:87:1;28777:28:0;;;;;;;;;;-1:-1:-1;28777:28:0;;;;-1:-1:-1;;;;;28777:28:0;;;;;;-1:-1:-1;;;;;3779:32:1;;;3761:51;;3749:2;3734:18;28777:28:0;3716:102:1;10489:215:0;;;;;;;;;;-1:-1:-1;10489:215:0;;;;;:::i;:::-;;:::i;30150:113::-;;;;;;;;;;-1:-1:-1;30150:113:0;;;;;:::i;:::-;;:::i;:::-;;30271:81;;;;;;;;;;-1:-1:-1;30271:81:0;;;;;:::i;:::-;;:::i;35092:119::-;;;;;;;;;;-1:-1:-1;35092:119:0;;;;;:::i;:::-;;:::i;26440:122::-;;;;;;;;;;-1:-1:-1;26440:122:0;;;;;:::i;:::-;;:::i;28543:31::-;;;;;;;;;;-1:-1:-1;28543:31:0;;;;;;;;34466:142;;;;;;;;;;;;;:::i;8061:127::-;;;;;;;;;;-1:-1:-1;8061:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;8162:18:0;8135:7;8162:18;;;;;;;;;;;;8061:127;25481:103;;;;;;;;;;;;;:::i;29962:180::-;;;;;;;;;;-1:-1:-1;29962:180:0;;;;;:::i;:::-;;:::i;30365:107::-;;;;;;;;;;-1:-1:-1;30365:107:0;;;;;:::i;:::-;;:::i;35674:172::-;;;;;;;;;;-1:-1:-1;35674:172:0;;;;;:::i;:::-;;:::i;24830:87::-;;;;;;;;;;-1:-1:-1;24903:6:0;;-1:-1:-1;;;;;24903:6:0;24830:87;;6989:104;;;;;;;;;;;;;:::i;36297:135::-;;;;;;;;;;-1:-1:-1;36297:135:0;;;;;:::i;:::-;;:::i;30480:355::-;;;;;;;;;;-1:-1:-1;30480:355:0;;;;;:::i;:::-;;:::i;11207:413::-;;;;;;;;;;-1:-1:-1;11207:413:0;;;;;:::i;:::-;;:::i;35219:227::-;;;;;;;;;;-1:-1:-1;35219:227:0;;;;;:::i;:::-;;:::i;28879:33::-;;;;;;;;;;-1:-1:-1;28879:33:0;;;;-1:-1:-1;;;;;28879:33:0;;;28281:31;;;;;;;;;;-1:-1:-1;28281:31:0;;;;;;;;28812:19;;;;;;;;;;-1:-1:-1;28812:19:0;;;;-1:-1:-1;;;;;28812:19:0;;;8401:175;;;;;;;;;;-1:-1:-1;8401:175:0;;;;;:::i;:::-;;:::i;34616:110::-;;;;;;;;;;-1:-1:-1;34616:110:0;;;;;:::i;:::-;;:::i;28450:35::-;;;;;;;;;;-1:-1:-1;28450:35:0;;;;;;;;35454:212;;;;;;;;;;-1:-1:-1;35454:212:0;;;;;:::i;:::-;;:::i;28319:36::-;;;;;;;;;;-1:-1:-1;28319:36:0;;;;;;;-1:-1:-1;;;;;28319:36:0;;;36850:109;;;;;;;;;;-1:-1:-1;36850:109:0;;;;;:::i;:::-;;:::i;8639:151::-;;;;;;;;;;-1:-1:-1;8639:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;8755:18:0;;;8728:7;8755:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8639:151;35854:228;;;;;;;;;;-1:-1:-1;35854:228:0;;;;;:::i;:::-;;:::i;28362:35::-;;;;;;;;;;-1:-1:-1;28362:35:0;;;;-1:-1:-1;;;;;28362:35:0;;;36440:402;;;;;;;;;;-1:-1:-1;36440:402:0;;;;;:::i;:::-;;:::i;25739:201::-;;;;;;;;;;-1:-1:-1;25739:201:0;;;;;:::i;:::-;;:::i;34734:350::-;;;;;;;;;;-1:-1:-1;34734:350:0;;;;;:::i;:::-;;:::i;36090:199::-;;;;;;;;;;-1:-1:-1;36090:199:0;;;;;:::i;:::-;;:::i;26568:73::-;;;;;;;;;;-1:-1:-1;26629:6:0;;-1:-1:-1;;;;;26629:6:0;26568:73;;6770:100;6824:13;6857:5;6850:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6770:100;:::o;8937:169::-;9020:4;9037:39;4501:10;9060:7;9069:6;9037:8;:39::i;:::-;-1:-1:-1;9094:4:0;8937:169;;;;:::o;9588:492::-;9728:4;9745:36;9755:6;9763:9;9774:6;9745:9;:36::i;:::-;-1:-1:-1;;;;;9821:19:0;;9794:24;9821:19;;;:11;:19;;;;;;;;4501:10;9821:33;;;;;;;;9873:26;;;;9865:79;;;;-1:-1:-1;;;9865:79:0;;8444:2:1;9865:79:0;;;8426:21:1;8483:2;8463:18;;;8456:30;8522:34;8502:18;;;8495:62;-1:-1:-1;;;8573:18:1;;;8566:38;8621:19;;9865:79:0;;;;;;;;;9980:57;9989:6;4501:10;10030:6;10011:16;:25;9980:8;:57::i;:::-;-1:-1:-1;10068:4:0;;9588:492;-1:-1:-1;;;;9588:492:0:o;10489:215::-;4501:10;10577:4;10626:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10626:34:0;;;;;;;;;;10577:4;;10594:80;;10617:7;;10626:47;;10663:10;;10626:47;:::i;:::-;10594:8;:80::i;30150:113::-;26684:6;;-1:-1:-1;;;;;26684:6:0;26694:10;26684:20;26675:70;;;;-1:-1:-1;;;26675:70:0;;;;;;;:::i;:::-;30231:24:::1;30237:8;30247:7;30231:5;:24::i;:::-;30150:113:::0;;:::o;30271:81::-;30319:25;30325:10;30337:6;30319:5;:25::i;:::-;30271:81;:::o;35092:119::-;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35175:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;35175:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35092:119::o;26440:122::-;24903:6;;26507:4;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;-1:-1:-1;26521:6:0::1;:15:::0;;-1:-1:-1;;;;;;26521:15:0::1;-1:-1:-1::0;;;;;26521:15:0;::::1;;::::0;;-1:-1:-1;25121:1:0::1;26440:122:::0;;;:::o;34466:142::-;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;34563:37:::1;::::0;34531:21:::1;::::0;34571:10:::1;::::0;34563:37;::::1;;;::::0;34531:21;;34513:15:::1;34563:37:::0;34513:15;34563:37;34531:21;34571:10;34563:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;25481:103:::0;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;25546:30:::1;25573:1;25546:18;:30::i;:::-;25481:103::o:0;29962:180::-;26684:6;;-1:-1:-1;;;;;26684:6:0;26694:10;26684:20;26675:70;;;;-1:-1:-1;;;26675:70:0;;;;;;;:::i;:::-;30038:18:::1;:33:::0;;-1:-1:-1;;;;;;30038:33:0;;::::1;-1:-1:-1::0;;;;;30038:33:0;;::::1;;::::0;;;;30080:11:::1;:54:::0;;30115:18;;;::::1;30080:54:::0;::::1;;::::0;;29962:180::o;30365:107::-;30436:28;30446:8;30456:7;30436:9;:28::i;35674:172::-;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;35736:4:::1;:12:::0;;-1:-1:-1;;;;;;35736:12:0::1;-1:-1:-1::0;;;;;35736:12:0;;::::1;::::0;;;::::1;::::0;;;35778:4;::::1;-1:-1:-1::0;35761:22:0;;;:16:::1;:22;::::0;;;;:29;;-1:-1:-1;;35761:29:0::1;-1:-1:-1::0;35761:29:0::1;::::0;;35817:4;;35801:37:::1;::::0;35817:4:::1;35824:13;7978:12:::0;;7890:108;;6989:104;7045:13;7078:7;7071:14;;;;;:::i;36297:135::-;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;36386:6:::1;36380:3;:12;36372:21;;;::::0;::::1;;36404:14;:20:::0;36297:135::o;30480:355::-;30552:27;30595:133;30649:7;30595:133;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8755:18:0;;8728:7;8755:18;;;:11;:18;;;;;;;;30615:10;8755:27;;;;;;;;30595:35;:133;:35;:133::i;:::-;30552:176;;30741:51;30750:8;30760:10;30772:19;30741:8;:51::i;:::-;30803:24;30809:8;30819:7;30803:5;:24::i;:::-;30480:355;;;:::o;11207:413::-;4501:10;11300:4;11344:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11344:34:0;;;;;;;;;;11397:35;;;;11389:85;;;;-1:-1:-1;;;11389:85:0;;10831:2:1;11389:85:0;;;10813:21:1;10870:2;10850:18;;;10843:30;10909:34;10889:18;;;10882:62;-1:-1:-1;;;10960:18:1;;;10953:35;11005:19;;11389:85:0;10803:227:1;11389:85:0;11510:67;4501:10;11533:7;11561:15;11542:16;:34;11510:8;:67::i;:::-;-1:-1:-1;11608:4:0;;11207:413;-1:-1:-1;;;11207:413:0:o;35219:227::-;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;35337:21:::1;:46:::0;;-1:-1:-1;;;;;;35337:46:0::1;;-1:-1:-1::0;;;;;35337:46:0;;::::1;;;::::0;;35394:20:::1;:44:::0;;-1:-1:-1;;;;;;35394:44:0::1;::::0;;;::::1;;::::0;;35219:227::o;8401:175::-;8487:4;8504:42;4501:10;8528:9;8539:6;8504:9;:42::i;34616:110::-;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;34692:17:::1;:26:::0;;-1:-1:-1;;;;;;34692:26:0::1;-1:-1:-1::0;;;;;34692:26:0;;;::::1;::::0;;;::::1;::::0;;34616:110::o;35454:212::-;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;35520:13:::1;:23:::0;;-1:-1:-1;;;;;;35520:23:0::1;-1:-1:-1::0;;;;;35520:23:0;;::::1;::::0;;;::::1;::::0;;;35573:13;::::1;-1:-1:-1::0;35556:31:0;;;:16:::1;:31;::::0;;;;:38;;-1:-1:-1;;35556:38:0::1;-1:-1:-1::0;35556:38:0::1;::::0;;35629:13;;35605:53:::1;::::0;35622:4:::1;::::0;35629:13:::1;35644;7978:12:::0;;7890:108;;36850:109;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;36924:16:::1;:27:::0;;-1:-1:-1;;36924:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36850:109::o;35854:228::-;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;35964:1:::1;35954:7;:11;35945:62;;;::::0;-1:-1:-1;;;35945:62:0;;11597:2:1;35945:62:0::1;::::0;::::1;11579:21:1::0;11636:2;11616:18;;;11609:30;11675:34;11655:18;;;11648:62;-1:-1:-1;;;11726:18:1;;;11719:35;11771:19;;35945:62:0::1;11569:227:1::0;35945:62:0::1;36018:11;:22:::0;;-1:-1:-1;;36018:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;36051:13:::1;:23:::0;35854:228::o;36440:402::-;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;36578:11:::1;:22:::0;;-1:-1:-1;;36578:22:0::1;::::0;::::1;;;::::0;;36611:13:::1;:30:::0;;;36652:12:::1;:28:::0;;;36691:12:::1;:28:::0;;;;36741::::1;36652::::0;36611:30;36741:28:::1;:::i;:::-;:43;;;;:::i;:::-;36730:8;:54:::0;;;36814:2:::1;-1:-1:-1::0;36795:39:0::1;;;::::0;-1:-1:-1;;;36795:39:0;;12003:2:1;36795:39:0::1;::::0;::::1;11985:21:1::0;12042:2;12022:18;;;12015:30;-1:-1:-1;;;12061:18:1;;;12054:43;12114:18;;36795:39:0::1;11975:163:1::0;36795:39:0::1;36440:402:::0;;;;:::o;25739:201::-;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25828:22:0;::::1;25820:73;;;::::0;-1:-1:-1;;;25820:73:0;;6810:2:1;25820:73:0::1;::::0;::::1;6792:21:1::0;6849:2;6829:18;;;6822:30;6888:34;6868:18;;;6861:62;-1:-1:-1;;;6939:18:1;;;6932:36;6985:19;;25820:73:0::1;6782:228:1::0;25820:73:0::1;25904:28;25923:8;25904:18;:28::i;34734:350::-:0;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34831:23:0;::::1;34849:4;34831:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;34868:4:0::1;::::0;-1:-1:-1;;;;;34858:14:0;;::::1;34868:4:::0;::::1;34858:14;;34831:41;34822:51;;;::::0;::::1;;-1:-1:-1::0;;;;;34884:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;34884:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;34928:149:::1;;34955:11;::::0;:31:::1;::::0;-1:-1:-1;;;34955:31:0;;-1:-1:-1;;;;;4023:32:1;;;34955:31:0::1;::::0;::::1;4005:51:1::0;34955:11:0::1;4072:18:1::0;;;4065:34;34955:11:0;;::::1;::::0;:20:::1;::::0;3978:18:1;;34955:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34928:149;;;35018:11;::::0;-1:-1:-1;;;;;35018:11:0::1;:20;35039:6:::0;35047:17:::1;35039:6:::0;-1:-1:-1;;;;;8162:18:0;8135:7;8162:18;;;;;;;;;;;;8061:127;35047:17:::1;35018:47;::::0;-1:-1:-1;;;;;;35018:47:0::1;::::0;;;;;;-1:-1:-1;;;;;4023:32:1;;;35018:47:0::1;::::0;::::1;4005:51:1::0;4072:18;;;4065:34;3978:18;;35018:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34734:350:::0;;:::o;36090:199::-;24903:6;;-1:-1:-1;;;;;24903:6:0;4501:10;25050:23;25042:68;;;;-1:-1:-1;;;25042:68:0;;;;;;;:::i;:::-;36187:2:::1;36177:7;:12;36168:74;;;::::0;-1:-1:-1;;;36168:74:0;;8027:2:1;36168:74:0::1;::::0;::::1;8009:21:1::0;8066:2;8046:18;;;8039:30;8105:34;8085:18;;;8078:62;-1:-1:-1;;;8156:18:1;;;8149:46;8212:19;;36168:74:0::1;7999:238:1::0;36168:74:0::1;36253:18;:28:::0;36090:199::o;14891:380::-;-1:-1:-1;;;;;15027:19:0;;15019:68;;;;-1:-1:-1;;;15019:68:0;;10426:2:1;15019:68:0;;;10408:21:1;10465:2;10445:18;;;10438:30;10504:34;10484:18;;;10477:62;-1:-1:-1;;;10555:18:1;;;10548:34;10599:19;;15019:68:0;10398:226:1;15019:68:0;-1:-1:-1;;;;;15106:21:0;;15098:68;;;;-1:-1:-1;;;15098:68:0;;7217:2:1;15098:68:0;;;7199:21:1;7256:2;7236:18;;;7229:30;7295:34;7275:18;;;7268:62;-1:-1:-1;;;7346:18:1;;;7339:32;7388:19;;15098:68:0;7189:224:1;15098:68:0;-1:-1:-1;;;;;15179:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15231:32;;12289:25:1;;;15231:32:0;;12262:18:1;15231:32:0;;;;;;;14891:380;;;:::o;30935:1270::-;31048:6;;;;31044:103;;;31072:42;31088:6;31096:9;31107:6;31072:15;:42::i;:::-;31129:7;;31044:103;31185:11;;;;:77;;;;-1:-1:-1;31227:4:0;;-1:-1:-1;;;;;31214:17:0;;;31227:4;;31214:17;;:47;;-1:-1:-1;31248:13:0;;-1:-1:-1;;;;;31235:26:0;;;31248:13;;31235:26;31214:47;31185:112;;;;-1:-1:-1;31293:4:0;;-1:-1:-1;;;;;31293:4:0;31279:10;:18;;31185:112;:170;;;;-1:-1:-1;31342:13:0;;31332:4;8135:7;8162:18;;;;;;;;;;;31314:41;;31185:170;:207;;;;-1:-1:-1;;;;;;31372:20:0;;;;31185:207;:247;;;;-1:-1:-1;;;;;;31409:23:0;;;;31185:247;31167:314;;;31459:10;:8;:10::i;:::-;31549:11;;31526:6;;31549:11;;:35;;;;-1:-1:-1;;;;;;31565:19:0;;;;;;:11;:19;;;;;;;;31564:20;31549:35;31545:238;;;31601:17;31621:29;31646:3;31621:20;31632:8;;31621:6;:10;;:20;;;;:::i;:::-;:24;;:29::i;:::-;31601:49;;31667;31683:6;31699:4;31706:9;31667:15;:49::i;:::-;31750:21;:6;31761:9;31750:10;:21::i;:::-;31733:38;;31545:238;;31807:16;;;;31803:334;;;-1:-1:-1;;;;;31845:24:0;;;;;;:16;:24;;;;;;;;31840:98;;31877:11;;-1:-1:-1;;;;;31877:11:0;:20;31898:6;31906:17;31898:6;-1:-1:-1;;;;;8162:18:0;8135:7;8162:18;;;;;;;;;;;;8061:127;31906:17;31877:47;;-1:-1:-1;;;;;;31877:47:0;;;;;;;-1:-1:-1;;;;;4023:32:1;;;31877:47:0;;;4005:51:1;4072:18;;;4065:34;3978:18;;31877:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31873:63;;-1:-1:-1;;;;;31957:27:0;;;;;;:16;:27;;;;;;;;31952:107;;31992:11;;-1:-1:-1;;;;;31992:11:0;:20;32013:9;32024:20;32013:9;-1:-1:-1;;;;;8162:18:0;8135:7;8162:18;;;;;;;;;;;;8061:127;32024:20;31992:53;;-1:-1:-1;;;;;;31992:53:0;;;;;;;-1:-1:-1;;;;;4023:32:1;;;31992:53:0;;;4005:51:1;4072:18;;;4065:34;3978:18;;31992:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31988:69;;32079:11;;32099:14;;32079:35;;-1:-1:-1;;;;;;32079:35:0;;-1:-1:-1;;;;;32079:11:0;;;;:19;;:35;;;;12289:25:1;;;12277:2;12262:18;;12244:76;32079:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32075:51;;32147:50;32163:6;32171:9;32182:14;32147:15;:50::i;13130:399::-;-1:-1:-1;;;;;13214:21:0;;13206:65;;;;-1:-1:-1;;;13206:65:0;;11237:2:1;13206:65:0;;;11219:21:1;11276:2;11256:18;;;11249:30;11315:33;11295:18;;;11288:61;11366:18;;13206:65:0;11209:181:1;13206:65:0;13362:6;13346:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;13379:18:0;;:9;:18;;;;;;;;;;:28;;13401:6;;13379:9;:28;;13401:6;;13379:28;:::i;:::-;;;;-1:-1:-1;;13423:37:0;;12289:25:1;;;-1:-1:-1;;;;;13423:37:0;;;13440:1;;13423:37;;12277:2:1;12262:18;13423:37:0;;;;;;;13473:48;30480:355;13862:591;-1:-1:-1;;;;;13946:21:0;;13938:67;;;;-1:-1:-1;;;13938:67:0;;9618:2:1;13938:67:0;;;9600:21:1;9657:2;9637:18;;;9630:30;9696:34;9676:18;;;9669:62;-1:-1:-1;;;9747:18:1;;;9740:31;9788:19;;13938:67:0;9590:223:1;13938:67:0;-1:-1:-1;;;;;14105:18:0;;14080:22;14105:18;;;;;;;;;;;14142:24;;;;14134:71;;;;-1:-1:-1;;;14134:71:0;;6407:2:1;14134:71:0;;;6389:21:1;6446:2;6426:18;;;6419:30;6485:34;6465:18;;;6458:62;-1:-1:-1;;;6536:18:1;;;6529:32;6578:19;;14134:71:0;6379:224:1;14134:71:0;-1:-1:-1;;;;;14241:18:0;;:9;:18;;;;;;;;;;14262:23;;;14241:44;;14307:12;:22;;14279:6;;14241:9;14307:22;;14279:6;;14307:22;:::i;:::-;;;;-1:-1:-1;;14347:37:0;;12289:25:1;;;14373:1:0;;-1:-1:-1;;;;;14347:37:0;;;;;12277:2:1;12262:18;14347:37:0;;;;;;;14397:48;30480:355;26100:191;26193:6;;;-1:-1:-1;;;;;26210:17:0;;;-1:-1:-1;;;;;;26210:17:0;;;;;;;26243:40;;26193:6;;;26210:17;26193:6;;26243:40;;26174:16;;26243:40;26100:191;;:::o;21878:240::-;21998:7;22059:12;22051:6;;;;22043:29;;;;-1:-1:-1;;;22043:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;22094:5:0;;;21878:240::o;12110:733::-;-1:-1:-1;;;;;12250:20:0;;12242:70;;;;-1:-1:-1;;;12242:70:0;;10020:2:1;12242:70:0;;;10002:21:1;10059:2;10039:18;;;10032:30;10098:34;10078:18;;;10071:62;-1:-1:-1;;;10149:18:1;;;10142:35;10194:19;;12242:70:0;9992:227:1;12242:70:0;-1:-1:-1;;;;;12331:23:0;;12323:71;;;;-1:-1:-1;;;12323:71:0;;6003:2:1;12323:71:0;;;5985:21:1;6042:2;6022:18;;;6015:30;6081:34;6061:18;;;6054:62;-1:-1:-1;;;6132:18:1;;;6125:33;6175:19;;12323:71:0;5975:225:1;12323:71:0;-1:-1:-1;;;;;12491:17:0;;12467:21;12491:17;;;;;;;;;;;12527:23;;;;12519:74;;;;-1:-1:-1;;;12519:74:0;;7620:2:1;12519:74:0;;;7602:21:1;7659:2;7639:18;;;7632:30;7698:34;7678:18;;;7671:62;-1:-1:-1;;;7749:18:1;;;7742:36;7795:19;;12519:74:0;7592:228:1;12519:74:0;-1:-1:-1;;;;;12629:17:0;;;:9;:17;;;;;;;;;;;12649:22;;;12629:42;;12693:20;;;;;;;;:30;;12665:6;;12629:9;12693:30;;12665:6;;12693:30;:::i;:::-;;;;;;;;12758:9;-1:-1:-1;;;;;12741:35:0;12750:6;-1:-1:-1;;;;;12741:35:0;;12769:6;12741:35;;;;12289:25:1;;12277:2;12262:18;;12244:76;12741:35:0;;;;;;;;12789:46;30480:355;32213:2245;29013:6;:13;;-1:-1:-1;;29013:13:0;29022:4;29013:13;;;:6;32296:43:::1;32325:13;7978:12:::0;;7890:108;;32325:13:::1;32306:4;::::0;-1:-1:-1;;;;;32306:4:0::1;8135:7:::0;8162:18;;;;;;;;;;;32296:24:::1;::::0;32316:3:::1;32296:19;:24::i;:43::-;32262:77;;32350:27;32407:18;;32381:23;:44;32380:65;;32433:12;;32380:65;;;32429:1;32380:65;32350:95;;32456:23;32482:59;32539:1;32482:52;32525:8;;32482:38;32500:19;32482:13;;:17;;:38;;;;:::i;:59::-;32456:85;;32552:20;32575:34;32593:15;32575:13;;:17;;:34;;;;:::i;:::-;32693:17;::::0;32552:57;;-1:-1:-1;32654:21:0::1;::::0;-1:-1:-1;;;;;32693:17:0::1;32689:796;;32763:16;::::0;;32777:1:::1;32763:16:::0;;;;;::::1;::::0;;32739:21:::1;::::0;32763:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;32763:16:0::1;32739:40;;32810:4;32792;32797:1;32792:7;;;;;;-1:-1:-1::0;;;32792:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;32792:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;32838:6:::1;::::0;:14:::1;::::0;;-1:-1:-1;;;32838:14:0;;;;:6;;;::::1;::::0;:12:::1;::::0;:14:::1;::::0;;::::1;::::0;32792:7;;32838:14;;;;;:6;:14;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32828:4;32833:1;32828:7;;;;;;-1:-1:-1::0;;;32828:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;32828:24:0;;::::1;:7;::::0;;::::1;::::0;;;;;:24;32865:6:::1;::::0;:201:::1;::::0;-1:-1:-1;;;32865:201:0;;:6;::::1;::::0;:58:::1;::::0;:201:::1;::::0;32940:12;;32865:6:::1;::::0;32987:4;;33016::::1;::::0;33038:15:::1;::::0;32865:201:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32689:796;;;;33121:16;::::0;;33135:1:::1;33121:16:::0;;;;;::::1;::::0;;;33097:21:::1;::::0;33121:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;33121:16:0::1;33097:40;;33168:4;33150;33155:1;33150:7;;;;;;-1:-1:-1::0;;;33150:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;33150:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;33204:17:::1;::::0;33186:7;;33204:17;::::1;::::0;33186:4;;33204:17;;33186:7;::::1;;;-1:-1:-1::0;;;33186:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;33186:36:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:36;;;;33245:6:::1;::::0;:14:::1;::::0;;-1:-1:-1;;;33245:14:0;;;;:6;;;::::1;::::0;:12:::1;::::0;:14:::1;::::0;;::::1;::::0;33186:7;;33245:14;;;;;:6;:14;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33235:4;33240:1;33235:7;;;;;;-1:-1:-1::0;;;33235:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;33235:24:0;;::::1;:7;::::0;;::::1;::::0;;;;;:24;33272:6:::1;::::0;:201:::1;::::0;-1:-1:-1;;;33272:201:0;;:6;::::1;::::0;:58:::1;::::0;:201:::1;::::0;33347:12;;33272:6:::1;::::0;33394:4;;33423::::1;::::0;33445:15:::1;::::0;33272:201:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32689:796;;33497:18;33518:40;:21;33544:13:::0;33518:25:::1;:40::i;:::-;33497:61:::0;-1:-1:-1;33571:20:0::1;33594:40;33607:26;:19:::0;33631:1:::1;33607:23;:26::i;:::-;33594:8;::::0;;:12:::1;:40::i;:::-;33571:63:::0;-1:-1:-1;33647:27:0::1;33677:60;33735:1;33677:53;33571:63:::0;33677:53;:10;33692:19;33677:14:::1;:35::i;:60::-;33647:90;;33748:28;33779:47;33813:12;33779:29;33794:13;;33779:10;:14;;:29;;;;:::i;:47::-;33748:78;;33837:27;33867:46;33900:12;33867:28;33882:12;;33867:10;:14;;:28;;;;:::i;:46::-;33837:76;;33930:11;;;;;;;;;-1:-1:-1::0;;;;;33930:11:0::1;-1:-1:-1::0;;;;;33930:19:0::1;;33957:20;33930:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;33926:66:::0;34010:20:::1;::::0;34002:59:::1;::::0;-1:-1:-1;;;;;34010:20:0;;::::1;::::0;34002:59;::::1;;;::::0;34041:19;;34010:20:::1;34002:59:::0;34010:20;34002:59;34041:19;34010:20;34002:59;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;34089:19:0;;34086:365:::1;;34124:6;::::0;34300:21:::1;::::0;34124:246:::1;::::0;-1:-1:-1;;;34124:246:0;;34202:4:::1;34124:246;::::0;::::1;4730:34:1::0;4780:18;;;4773:34;;;-1:-1:-1;4823:18:1;;;4816:34;;;4866:18;;;4859:34;-1:-1:-1;;;;;34124:6:0::1;34300:21:::0;;::::1;::::0;::::1;4909:19:1::0;;;4902:44;34340:15:0::1;4962:19:1::0;;;4955:35;34124:6:0;::::1;::::0;:23:::1;::::0;34155:19;;4664::1;;34124:246:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;34390:49:0::1;::::0;;13487:25:1;;;13543:2;13528:18;;13521:34;;;34390:49:0::1;::::0;-1:-1:-1;13460:18:1;34390:49:0::1;;;;;;;34086:365;-1:-1:-1::0;;29031:6:0;:14;;-1:-1:-1;;29031:14:0;;;-1:-1:-1;;;;;;;;32213:2245:0:o;20337:98::-;20395:7;20422:5;20426:1;20422;:5;:::i;:::-;20415:12;20337:98;-1:-1:-1;;;20337:98:0:o;20736:::-;20794:7;20821:5;20825:1;20821;:5;:::i;19980:98::-;20038:7;20065:5;20069:1;20065;:5;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;179:257;;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;;;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;;;;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;;;1707:2;1695:9;1686:7;1682:23;1678:32;1675:2;;;1728:6;1720;1713:22;1675:2;1772:9;1759:23;1791:31;1816:5;1791:31;:::i;:::-;1841:5;-1:-1:-1;1865:35:1;1896:2;1881:18;;1865:35;:::i;:::-;1855:45;;1665:241;;;;;:::o;1911:325::-;;;2040:2;2028:9;2019:7;2015:23;2011:32;2008:2;;;2061:6;2053;2046:22;2008:2;2105:9;2092:23;2124:31;2149:5;2124:31;:::i;:::-;2174:5;2226:2;2211:18;;;;2198:32;;-1:-1:-1;;;1998:238:1:o;2241:190::-;;2350:2;2338:9;2329:7;2325:23;2321:32;2318:2;;;2371:6;2363;2356:22;2318:2;2399:26;2415:9;2399:26;:::i;2436:258::-;;;2562:2;2550:9;2541:7;2537:23;2533:32;2530:2;;;2583:6;2575;2568:22;2530:2;2611:26;2627:9;2611:26;:::i;2699:395::-;;;;;2859:3;2847:9;2838:7;2834:23;2830:33;2827:2;;;2881:6;2873;2866:22;2827:2;2909:26;2925:9;2909:26;:::i;:::-;2899:36;2982:2;2967:18;;2954:32;;-1:-1:-1;3033:2:1;3018:18;;3005:32;;3084:2;3069:18;3056:32;;-1:-1:-1;2817:277:1;-1:-1:-1;;;2817:277:1:o;3099:190::-;;3211:2;3199:9;3190:7;3186:23;3182:32;3179:2;;;3232:6;3224;3217:22;3179:2;-1:-1:-1;3260:23:1;;3169:120;-1:-1:-1;3169:120:1:o;3294:316::-;;;;3451:2;3439:9;3430:7;3426:23;3422:32;3419:2;;;3472:6;3464;3457:22;3419:2;3506:9;3500:16;3490:26;;3556:2;3545:9;3541:18;3535:25;3525:35;;3600:2;3589:9;3585:18;3579:25;3569:35;;3409:201;;;;;:::o;5193:603::-;;5334:2;5363;5352:9;5345:21;5395:6;5389:13;5438:6;5433:2;5422:9;5418:18;5411:34;5463:4;5476:140;5490:6;5487:1;5484:13;5476:140;;;5585:14;;;5581:23;;5575:30;5551:17;;;5570:2;5547:26;5540:66;5505:10;;5476:140;;;5634:6;5631:1;5628:13;5625:2;;;5704:4;5699:2;5690:6;5679:9;5675:22;5671:31;5664:45;5625:2;-1:-1:-1;5780:2:1;5759:15;-1:-1:-1;;5755:29:1;5740:45;;;;5787:2;5736:54;;5314:482;-1:-1:-1;;;5314:482:1:o;8651:399::-;8853:2;8835:21;;;8892:2;8872:18;;;8865:30;8931:34;8926:2;8911:18;;8904:62;-1:-1:-1;;;8997:2:1;8982:18;;8975:33;9040:3;9025:19;;8825:225::o;9055:356::-;9257:2;9239:21;;;9276:18;;;9269:30;9335:34;9330:2;9315:18;;9308:62;9402:2;9387:18;;9229:182::o;12325:983::-;;12635:3;12624:9;12620:19;12666:6;12655:9;12648:25;12692:2;12730:6;12725:2;12714:9;12710:18;12703:34;12773:3;12768:2;12757:9;12753:18;12746:31;12797:6;12832;12826:13;12863:6;12855;12848:22;12901:3;12890:9;12886:19;12879:26;;12940:2;12932:6;12928:15;12914:29;;12961:4;12974:195;12988:6;12985:1;12982:13;12974:195;;;13053:13;;-1:-1:-1;;;;;13049:39:1;13037:52;;13144:15;;;;13109:12;;;;13085:1;13003:9;12974:195;;;-1:-1:-1;;;;;;;13225:32:1;;;;13220:2;13205:18;;13198:60;-1:-1:-1;;;13289:3:1;13274:19;13267:35;13186:3;12596:712;-1:-1:-1;;;12596:712:1:o;13755:128::-;;13826:1;13822:6;13819:1;13816:13;13813:2;;;13832:18;;:::i;:::-;-1:-1:-1;13868:9:1;;13803:80::o;13888:217::-;;13954:1;13944:2;;-1:-1:-1;;;13979:31:1;;14033:4;14030:1;14023:15;14061:4;13986:1;14051:15;13944:2;-1:-1:-1;14090:9:1;;13934:171::o;14110:168::-;;14216:1;14212;14208:6;14204:14;14201:1;14198:21;14193:1;14186:9;14179:17;14175:45;14172:2;;;14223:18;;:::i;:::-;-1:-1:-1;14263:9:1;;14162:116::o;14283:125::-;;14351:1;14348;14345:8;14342:2;;;14356:18;;:::i;:::-;-1:-1:-1;14393:9:1;;14332:76::o;14413:380::-;14498:1;14488:12;;14545:1;14535:12;;;14556:2;;14610:4;14602:6;14598:17;14588:27;;14556:2;14663;14655:6;14652:14;14632:18;14629:38;14626:2;;;14709:10;14704:3;14700:20;14697:1;14690:31;14744:4;14741:1;14734:15;14772:4;14769:1;14762:15;14626:2;;14468:325;;;:::o;14798:127::-;14859:10;14854:3;14850:20;14847:1;14840:31;14890:4;14887:1;14880:15;14914:4;14911:1;14904:15;14930:131;-1:-1:-1;;;;;15005:31:1;;14995:42;;14985:2;;15051:1;15048;15041:12

Swarm Source

ipfs://8c1af47e00e41361cfd41aacb94b1d7478691c69181884a2f6bfd020a51c89c9
Loading