ETH Price: $3,286.98 (-1.60%)

Token

iBASE.finance (iBASE)
 

Overview

Max Total Supply

1,000,000 iBASE

Holders

145

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.047025937 iBASE

Value
$0.00
0x136f4b5b6a306091b280e3f251fa0e21b1280cd5
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
IBASE

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-11
*/

// File: @openzeppelin/contracts-ethereum-package/contracts/utils/SafeCast.sol

pragma solidity ^0.6.0;


/**
 * @dev Wrappers over Solidity's uintXX casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such an operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 *
 * Can be combined with {SafeMath} to extend it to smaller types, by performing
 * all math on `uint256` and then downcasting.
 */
library SafeCast {

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value < 2**128, "SafeCast: value doesn\'t fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value < 2**64, "SafeCast: value doesn\'t fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value < 2**32, "SafeCast: value doesn\'t fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value < 2**16, "SafeCast: value doesn\'t fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value < 2**8, "SafeCast: value doesn\'t fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        require(value < 2**255, "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

// File: @openzeppelin/contracts-ethereum-package/contracts/Initializable.sol

pragma solidity >=0.4.24 <0.7.0;


/**
 * @title Initializable
 *
 * @dev Helper contract to support initializer functions. To use it, replace
 * the constructor with a function that has the `initializer` modifier.
 * WARNING: Unlike constructors, initializer functions must be manually
 * invoked. This applies both to deploying an Initializable contract, as well
 * as extending an Initializable contract via inheritance.
 * WARNING: When used with inheritance, manual care must be taken to not invoke
 * a parent initializer twice, or ensure that all initializers are idempotent,
 * because this is not dealt with automatically as with constructors.
 */
contract Initializable {

  /**
   * @dev Indicates that the contract has been initialized.
   */
  bool private initialized;

  /**
   * @dev Indicates that the contract is in the process of being initialized.
   */
  bool private initializing;

  /**
   * @dev Modifier to use in the initializer function of a contract.
   */
  modifier initializer() {
    require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");

    bool isTopLevelCall = !initializing;
    if (isTopLevelCall) {
      initializing = true;
      initialized = true;
    }

    _;

    if (isTopLevelCall) {
      initializing = false;
    }
  }

  /// @dev Returns true if and only if the function is running in the constructor
  function isConstructor() private view returns (bool) {
    // extcodesize checks the size of the code stored in an address, and
    // address returns the current address. Since the code is still not
    // deployed when running a constructor, any checks on its code size will
    // yield zero, making it an effective way to detect if a contract is
    // under construction or not.
    address self = address(this);
    uint256 cs;
    assembly { cs := extcodesize(self) }
    return cs == 0;
  }

  // Reserved storage space to allow for layout changes in the future.
  uint256[50] private ______gap;
}

// File: @openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol

pragma solidity ^0.6.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 GSN 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.
 */
contract ContextUpgradeSafe is Initializable {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.

    function __Context_init() internal initializer {
        __Context_init_unchained();
    }

    function __Context_init_unchained() internal initializer {


    }


    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }

    uint256[50] private __gap;
}

// File: @openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol

pragma solidity ^0.6.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.
 */
contract OwnableUpgradeSafe is Initializable, ContextUpgradeSafe {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */

    function __Ownable_init() internal initializer {
        __Context_init_unchained();
        __Ownable_init_unchained();
    }

    function __Ownable_init_unchained() internal initializer {


        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);

    }


    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    uint256[49] private __gap;
}

// File: @openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.6.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-ethereum-package/contracts/math/SafeMath.sol

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

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

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol

pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

// File: contracts/IBASE.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.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 {ERC20MinterPauser}.
 *
 * 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 guidelines: functions revert instead
 * of 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 ERC20UpgradeSafe is Initializable, ContextUpgradeSafe, IERC20 {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */

    function __ERC20_init(string memory name, string memory symbol) internal initializer {
        __Context_init_unchained();
        __ERC20_init_unchained(name, symbol);
    }

    function __ERC20_init_unchained(string memory name, string memory symbol) internal initializer {


        _name = name;
        _symbol = symbol;
        _decimals = 18;

    }


    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view 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 {_setupDecimals} is
     * called.
     *
     * 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 returns (uint8) {
        return _decimals;
    }

    /**
     * @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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is 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 Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

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

    uint256[44] private __gap;
}


contract IBASE is ERC20UpgradeSafe, OwnableUpgradeSafe {
    
    using SafeCast for int256;
    using SafeMath for uint256;
    using Address for address;
    
    struct Transaction {
        bool enabled;
        address destination;
        bytes data;
    }

    event TransactionFailed(address indexed destination, uint index, bytes data);
	
	// Stable ordering is not guaranteed.

    Transaction[] public transactions;

    uint256 private _epoch;
    event LogRebase(uint256 indexed epoch, uint256 totalSupply);

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
	
	uint256 private _totalSupply;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _rTotal;
    uint256 private _tFeeTotal;
    
    uint256 private constant DECIMALS = 9;
    uint256 private constant RATE_PRECISION = 10 ** DECIMALS;
    
    uint256 public _tFeePercent;
    uint256 public _tFeeTimestamp;
    
    //source address for airdrop funds
    address public _distribute;
    //distributor address for air-dropping that can send or receive with no transfer fee
    address public _distributor;
    
    address public _rebaser;
    
    uint256 public _limitExpiresTimestamp;
    uint256 public _limitTransferAmount;
    uint256 public _limitMaxBalance;
    uint256 public _limitSellFeePercent;
    
    uint256 public _limitTimestamp;
    
    function initialize(uint256 initialSupply, address team, address dev, address staking, address airdrop )
        public
        initializer
    {
        __ERC20_init("iBASE.finance", "iBASE");
        _setupDecimals(uint8(DECIMALS));
        __Ownable_init();
        
        _totalSupply = initialSupply;
        _rTotal = (MAX - (MAX % _totalSupply));
        
        _distribute = staking;
        _distributor = airdrop;
        
        _rebaser = _msgSender();
        
        _tFeePercent = 100 ; //1.00%
        _tFeeTimestamp = now;

        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _totalSupply);
        
        excludeAccount(_msgSender());
        excludeAccount(team);
        excludeAccount(dev);
        excludeAccount(staking);
    }

    bool public transfersPaused;

    mapping(address => bool) public transferPauseExemptList;

    function setTransfersPaused(bool _transfersPaused)
        public
        onlyOwner
    {
        transfersPaused = _transfersPaused;
    }

    function setTransferPauseExempt(address user, bool exempt)
        public
        onlyOwner
    {
        if (exempt) {
            transferPauseExemptList[user] = true;
        } else {
            delete transferPauseExemptList[user];
        }
    }
    
    function setDistributionAddresses(address distribute, address distributor) external onlyOwner() {
        _distribute = distribute;
        _distributor = distributor;
    }
    
    function setRebaser(address rebaser) external onlyOwner() {
        _rebaser = rebaser;
    }
    
    function setTransferFeePercent(uint256 tFeePercent) external onlyOwner() {
        require(now >= (_tFeeTimestamp + 12 hours), "Transfer fee changes timelocked for 12 hours");

        _tFeePercent = tFeePercent;
        
        _tFeeTimestamp = now;
    }
    
    function setLimit(uint256 expiresTimestamp, uint256 transferAmount, uint256 maxBalance, uint256 sellFeePercent) external onlyOwner() {
        require(_limitTimestamp == 0, "Limit changes not allowed");
        
        _limitExpiresTimestamp = expiresTimestamp;
        _limitTransferAmount = transferAmount;
        _limitMaxBalance = maxBalance;
        _limitSellFeePercent = sellFeePercent;

        _limitTimestamp = now;
    }
    
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }
    
    function rebase(int256 supplyDelta)
        external
        returns (uint256)
    {
        require(_msgSender() == owner() || _msgSender() == _rebaser, "Sender not authorized");
        
        _epoch = _epoch.add(1);
		
        if (supplyDelta == 0) {
            emit LogRebase(_epoch, _totalSupply);
            return _totalSupply;
        }
        
        uint256 uSupplyDelta = (supplyDelta < 0 ? -supplyDelta : supplyDelta).toUint256();
        uint256 rate = uSupplyDelta.mul(RATE_PRECISION).div(_totalSupply);
        uint256 multiplier;
        
        if (supplyDelta < 0) {
            multiplier = RATE_PRECISION.sub(rate);
        } else {
            multiplier = RATE_PRECISION.add(rate);
        }
        
        if (supplyDelta < 0) {
            _totalSupply = _totalSupply.sub(uSupplyDelta);
        } else {
            _totalSupply = _totalSupply.add(uSupplyDelta);
        }
        
        if (_totalSupply > MAX) {
            _totalSupply = MAX;
        }
        
        for (uint256 i = 0; i < _excluded.length; i++) {
            if(_tOwned[_excluded[i]] > 0) {
                _tOwned[_excluded[i]] = _tOwned[_excluded[i]].mul(multiplier).div(RATE_PRECISION);
            }
        }
        
        emit LogRebase(_epoch, _totalSupply);

		for (uint i = 0; i < transactions.length; i++) {
            Transaction storage t = transactions[i];
            if (t.enabled) {
                bool result = externalCall(t.destination, t.data);
                if (!result) {
                    emit TransactionFailed(t.destination, i, t.data);
                    revert("Transaction Failed");
                }
            }
        }

        return _totalSupply;
    }
    
    /**
     * @notice Adds a transaction that gets called for a downstream receiver of rebases
     * @param destination Address of contract destination
     * @param data Transaction data payload
     */
	
    function addTransaction(address destination, bytes memory data)
        external
        onlyOwner
    {
        transactions.push(Transaction({
            enabled: true,
            destination: destination,
            data: data
        }));
    }
	
	/**
     * @param index Index of transaction to remove.
     *              Transaction ordering may have changed since adding.
     */

    function removeTransaction(uint index)
        external
        onlyOwner
    {
        require(index < transactions.length, "index out of bounds");

        if (index < transactions.length - 1) {
            transactions[index] = transactions[transactions.length - 1];
        }

        transactions.pop();
    }
	
	/**
     * @param index Index of transaction. Transaction ordering may have changed since adding.
     * @param enabled True for enabled, false for disabled.
     */

    function setTransactionEnabled(uint index, bool enabled)
        external
        onlyOwner
    {
        require(index < transactions.length, "index must be in range of stored tx list");
        transactions[index].enabled = enabled;
    }
	
	/**
     * @return Number of transactions, both enabled and disabled, in transactions list.
     */

    function transactionsSize()
        external
        view
        returns (uint256)
    {
        return transactions.length;
    }
	
	/**
     * @dev wrapper to call the encoded transactions on downstream consumers.
     * @param destination Address of destination contract.
     * @param data The encoded data payload.
     * @return True on success
     */

    function externalCall(address destination, bytes memory data)
        internal
        returns (bool)
    {
        bool result;
        assembly {  // solhint-disable-line no-inline-assembly
            // "Allocate" memory for output
            // (0x40 is where "free memory" pointer is stored by convention)
            let outputAddress := mload(0x40)

            // First 32 bytes are the padded length of data, so exclude that
            let dataAddress := add(data, 32)

            result := call(
                // 34710 is the value that solidity is currently emitting
                // It includes callGas (700) + callVeryLow (3, to pay for SUB)
                // + callValueTransferGas (9000) + callNewAccountGas
                // (25000, in case the destination address does not exist and needs creating)
                sub(gas(), 34710),


                destination,
                0, // transfer value in wei
                dataAddress,
                mload(data),  // Size of the input, in bytes. Stored in position 0 of the array.
                outputAddress,
                0  // Output is ignored, therefore the output size is zero
            )
        }
        return result;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromRefraction(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual override returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual override returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function refract(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,) = _getValues(tAmount, _tFeePercent);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function refractionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _totalSupply, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,) = _getValues(tAmount, _tFeePercent);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,) = _getValues(tAmount, _tFeePercent);
            return rTransferAmount;
        }
    }

    function tokenFromRefraction(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total refractions");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeAccount(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromRefraction(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) public onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _approve(address owner, address spender, uint256 amount) internal override {
        require(!transfersPaused || transferPauseExemptList[msg.sender], "paused");
        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);
    }

    function _transfer(address sender, address recipient, uint256 amount) internal override {
        require(!transfersPaused || transferPauseExemptList[msg.sender], "paused");
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        
        if((sender == _distribute && recipient == _distributor) || sender == _distributor) {
            //for air-dropping
            _transferBothExcluded(sender, recipient, amount, 0);
        } else if(_isExcluded[sender] && !_isExcluded[recipient]) {
            
            if(_limitExpiresTimestamp >= now) {
                require(amount <= _limitTransferAmount, "Initial Uniswap listing - amount exceeds transfer limit");
                require(balanceOf(recipient).add(amount) <= _limitMaxBalance, "Initial Uniswap listing - max balance limit");
            }
            
            _transferFromExcluded(sender, recipient, amount, _tFeePercent);
            
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            
            if(_limitExpiresTimestamp >= now) {
                _transferToExcluded(sender, recipient, amount, _limitSellFeePercent);
            } else {
                _transferToExcluded(sender, recipient, amount, _tFeePercent);
            }

        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            require(_limitExpiresTimestamp < now, "Initial Uniswap listing - Wallet to Wallet transfers temporarily disabled");
            _transferStandard(sender, recipient, amount, _tFeePercent);
            
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount, 0);
            
        } else {
            require(_limitExpiresTimestamp < now, "Initial Uniswap listing - Wallet to Wallet transfers temporarily disabled");
            _transferStandard(sender, recipient, amount, _tFeePercent);
            
        }
    }
    

    function _transferStandard(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);       
        _refractFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _refractFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _refractFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount, uint256 tFeePercent) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee) = _getValues(tAmount, tFeePercent);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _refractFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _refractFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount, uint256 tFeePercent) private view returns (uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount, tFeePercent);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee);
    }

    function _getTValues(uint256 tAmount, uint256 tFeePercent) private pure returns (uint256, uint256) {
        uint256 tFee = tAmount.mul(tFeePercent).div(10000);
        uint256 tTransferAmount = tAmount.sub(tFee);
        return (tTransferAmount, tFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _totalSupply;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _totalSupply);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_totalSupply)) return (_rTotal, _totalSupply);
        return (rSupply, tSupply);
    }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"destination","type":"address"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransactionFailed","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":"_distribute","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_distributor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitExpiresTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitMaxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitSellFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rebaser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"addTransaction","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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"},{"internalType":"address","name":"team","type":"address"},{"internalType":"address","name":"dev","type":"address"},{"internalType":"address","name":"staking","type":"address"},{"internalType":"address","name":"airdrop","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"supplyDelta","type":"int256"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"refract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"refractionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"distribute","type":"address"},{"internalType":"address","name":"distributor","type":"address"}],"name":"setDistributionAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"expiresTimestamp","type":"uint256"},{"internalType":"uint256","name":"transferAmount","type":"uint256"},{"internalType":"uint256","name":"maxBalance","type":"uint256"},{"internalType":"uint256","name":"sellFeePercent","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rebaser","type":"address"}],"name":"setRebaser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransactionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tFeePercent","type":"uint256"}],"name":"setTransferFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setTransferPauseExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_transfersPaused","type":"bool"}],"name":"setTransfersPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromRefraction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionsSize","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":[{"internalType":"address","name":"","type":"address"}],"name":"transferPauseExemptList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transfersPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50613772806100206000396000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c8063456e0a5d1161015c5780639ace38c2116100ce578063dd62ed3e11610087578063dd62ed3e14610855578063e46adf6214610883578063f2cc0c18146108a9578063f2fde38b146108cf578063f442b570146108f5578063f84354f11461091b5761028a565b80639ace38c214610719578063a457c2d7146107c7578063a9059cbb146107f3578063aef7f99e1461081f578063b76cde2714610827578063cba0e9961461082f5761028a565b8063715018a611610120578063715018a6146106cc5780637d449789146106d45780638da5cb5b146106dc57806391d4ec18146106e457806395d89b41146106ec57806397d0677b146106f45761028a565b8063456e0a5d1461062d57806346c3bd1f146106355780635c1eca84146106525780636e9dde991461068157806370a08231146106a65761028a565b80632ae427dc1161020057806338a9ad1d116101b957806338a9ad1d1461059c57806338e9ec80146105a457806339509351146105d25780633aa8d4be146105fe57806344e46dff146106065780634563f30a146106255761028a565b80632ae427dc146104e95780632bc1281e146104f1578063303bb0b6146104f9578063313ce5671461051657806334b3ae71146105345780633641e083146105585761028a565b806313114a9d1161025257806313114a9d1461043b57806314f43f7e1461044357806318160ddd146104605780631f36d925146104685780631fc3371a1461048557806323b872dd146104b35761028a565b806306fdde031461028f57806308d1dd8a1461030c578063095ea7b3146103265780630ab114f914610366578063126e19be14610383575b600080fd5b610297610941565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102d15781810151838201526020016102b9565b50505050905090810190601f1680156102fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103146109d7565b60408051918252519081900360200190f35b6103526004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356109dd565b604080519115158252519081900360200190f35b6103146004803603602081101561037c57600080fd5b50356109fb565b6104396004803603604081101561039957600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156103c457600080fd5b8201836020820111156103d657600080fd5b803590602001918460018302840111640100000000831117156103f857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e9c945050505050565b005b610314610fbd565b6104396004803603602081101561045957600080fd5b5035610fc3565b61031461109e565b6104396004803603602081101561047e57600080fd5b50356110a4565b6104396004803603604081101561049b57600080fd5b506001600160a01b038135169060200135151561114a565b610352600480360360608110156104c957600080fd5b506001600160a01b038135811691602081013590911690604001356111f5565b61031461127c565b610314611282565b6103146004803603602081101561050f57600080fd5b5035611288565b61051e6112e8565b6040805160ff9092168252519081900360200190f35b61053c6112f1565b604080516001600160a01b039092168252519081900360200190f35b610439600480360360a081101561056e57600080fd5b508035906001600160a01b036020820135811691604081013582169160608201358116916080013516611300565b610314611524565b610439600480360360408110156105ba57600080fd5b506001600160a01b038135811691602001351661152a565b610352600480360360408110156105e857600080fd5b506001600160a01b0381351690602001356115b0565b61053c6115fe565b6104396004803603602081101561061c57600080fd5b5035151561160d565b610352611678565b610314611681565b6104396004803603602081101561064b57600080fd5b5035611687565b6104396004803603608081101561066857600080fd5b508035906020810135906040810135906060013561181f565b6104396004803603604081101561069757600080fd5b508035906020013515156118e4565b610314600480360360208110156106bc57600080fd5b50356001600160a01b03166119ad565b610439611a0f565b610314611ab1565b61053c611ab7565b610314611ac6565b610297611acc565b6103146004803603604081101561070a57600080fd5b50803590602001351515611b2d565b6107366004803603602081101561072f57600080fd5b5035611bc3565b604051808415158152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561078a578181015183820152602001610772565b50505050905090810190601f1680156107b75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610352600480360360408110156107dd57600080fd5b506001600160a01b038135169060200135611c88565b6103526004803603604081101561080957600080fd5b506001600160a01b038135169060200135611cf0565b610314611d04565b61053c611d0a565b6103526004803603602081101561084557600080fd5b50356001600160a01b0316611d19565b6103146004803603604081101561086b57600080fd5b506001600160a01b0381358116916020013516611d37565b6104396004803603602081101561089957600080fd5b50356001600160a01b0316611d62565b610439600480360360208110156108bf57600080fd5b50356001600160a01b0316611ddc565b610439600480360360208110156108e557600080fd5b50356001600160a01b0316611f62565b6103526004803603602081101561090b57600080fd5b50356001600160a01b031661205b565b6104396004803603602081101561093157600080fd5b50356001600160a01b0316612070565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109cd5780601f106109a2576101008083540402835291602001916109cd565b820191906000526020600020905b8154815290600101906020018083116109b057829003601f168201915b5050505050905090565b60dc5481565b60006109f16109ea61222d565b8484612231565b5060015b92915050565b6000610a05611ab7565b6001600160a01b0316610a1661222d565b6001600160a01b03161480610a45575060d7546001600160a01b0316610a3a61222d565b6001600160a01b0316145b610a8e576040805162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604482015290519081900360640190fd5b60ca54610a9c906001612378565b60ca5581610ae55760ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a25060d054610e97565b6000610b0260008412610af85783610afd565b836000035b6123d2565b60d054909150600090610b2390610b1d84633b9aca0061242d565b90612486565b9050600080851215610b4457610b3d633b9aca00836124c8565b9050610b55565b610b52633b9aca0083612378565b90505b6000851215610b735760d054610b6b90846124c8565b60d055610b84565b60d054610b809084612378565b60d0555b60005b60cf54811015610c5657600060cc600060cf8481548110610ba457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541115610c4e57610c176009600a0a610b1d8460cc600060cf8781548110610bec57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549061242d565b60cc600060cf8481548110610c2857fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020555b600101610b87565b5060ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a260005b60c954811015610e8d57600060c98281548110610cab57fe5b60009182526020909120600290910201805490915060ff1615610e845780546001808301805460408051602060026101009685161587026000190190941693909304601f8101849004840282018401909252818152600095610d739590046001600160a01b0316939092909190830182828015610d695780601f10610d3e57610100808354040283529160200191610d69565b820191906000526020600020905b815481529060010190602001808311610d4c57829003601f168201915b505050505061250a565b905080610e825781546040805185815260208101828152600180870180546002610100938216158402600019019091160494840185905294046001600160a01b0316937f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263938893919290606083019084908015610e315780601f10610e0657610100808354040283529160200191610e31565b820191906000526020600020905b815481529060010190602001808311610e1457829003601f168201915b5050935050505060405180910390a26040805162461bcd60e51b8152602060048201526012602482015271151c985b9cd858dd1a5bdb8811985a5b195960721b604482015290519081900360640190fd5b505b50600101610c92565b5060d05493505050505b919050565b610ea461222d565b6097546001600160a01b03908116911614610ef4576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b6040805160608101825260018082526001600160a01b03808616602080850191825294840186815260c980549485018155600052845160029094027f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2881018054935190941661010002610100600160a81b031995151560ff19909416939093179490941691909117825551805193949193610fb6937f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d290192919091019061330a565b5050505050565b60d25490565b6000610fcd61222d565b6001600160a01b038116600090815260ce602052604090205490915060ff16156110285760405162461bcd60e51b815260040180806020018281038252602c8152602001806136ec602c913960400191505060405180910390fd5b60006110368360d35461252d565b505050506001600160a01b038316600090815260cb602052604090205490915061106090826124c8565b6001600160a01b038316600090815260cb602052604090205560d15461108690826124c8565b60d15560d2546110969084612378565b60d255505050565b60d05490565b6110ac61222d565b6097546001600160a01b039081169116146110fc576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60d45461a8c0014210156111415760405162461bcd60e51b815260040180806020018281038252602c8152602001806135ab602c913960400191505060405180910390fd5b60d3554260d455565b61115261222d565b6097546001600160a01b039081169116146111a2576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b80156111d0576001600160a01b038216600090815260de60205260409020805460ff191660011790556111f1565b6001600160a01b038216600090815260de60205260409020805460ff191690555b5050565b600061120284848461257b565b6112728461120e61222d565b61126d85604051806060016040528060288152602001613583602891396001600160a01b038a16600090815260cd602052604081209061124c61222d565b6001600160a01b031681526020810191909152604001600020549190612993565b612231565b5060019392505050565b60d35481565b60d95481565b600060d1548211156112cb5760405162461bcd60e51b815260040180806020018281038252602a815260200180613679602a913960400191505060405180910390fd5b60006112d5612a2a565b90506112e18382612486565b9392505050565b606a5460ff1690565b60d5546001600160a01b031681565b600054610100900460ff16806113195750611319612a4d565b80611327575060005460ff16155b6113625760405162461bcd60e51b815260040180806020018281038252602e815260200180613620602e913960400191505060405180910390fd5b600054610100900460ff1615801561138d576000805460ff1961ff0019909116610100171660011790555b6113d96040518060400160405280600d81526020016c69424153452e66696e616e636560981b81525060405180604001604052806005815260200164694241534560d81b815250612a53565b6113e36009612b08565b6113eb612b1e565b60d086905585600019816113fb57fe5b061960d15560d580546001600160a01b038086166001600160a01b03199283161790925560d680549285169290911691909117905561143861222d565b60d780546001600160a01b0319166001600160a01b0392909216919091179055606460d3554260d45560d15460cb600061147061222d565b6001600160a01b0316815260208101919091526040016000205561149261222d565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d0546040518082815260200191505060405180910390a36114ef6114ea61222d565b611ddc565b6114f885611ddc565b61150184611ddc565b61150a83611ddc565b801561151c576000805461ff00191690555b505050505050565b60d85481565b61153261222d565b6097546001600160a01b03908116911614611582576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60d580546001600160a01b039384166001600160a01b03199182161790915560d68054929093169116179055565b60006109f16115bd61222d565b8461126d8560cd60006115ce61222d565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612378565b60d7546001600160a01b031681565b61161561222d565b6097546001600160a01b03908116911614611665576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60dd805460ff1916911515919091179055565b60dd5460ff1681565b60da5481565b61168f61222d565b6097546001600160a01b039081169116146116df576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60c954811061172b576040805162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b60c954600019018110156117dc5760c98054600019810190811061174b57fe5b906000526020600020906002020160c9828154811061176657fe5b6000918252602090912082546002928302909101805460ff191660ff9092161515919091178082558354610100600160a81b0319909116610100918290046001600160a01b031682021782556001808501805493946117d8948387019492938116159092026000190190911604613384565b5050505b60c98054806117e757fe5b60008281526020812060026000199093019283020180546001600160a81b03191681559061181860018301826133f9565b5050905550565b61182761222d565b6097546001600160a01b03908116911614611877576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60dc54156118cc576040805162461bcd60e51b815260206004820152601960248201527f4c696d6974206368616e676573206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b60d89390935560d99190915560da5560db554260dc55565b6118ec61222d565b6097546001600160a01b0390811691161461193c576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60c954821061197c5760405162461bcd60e51b81526004018080602001828103825260288152602001806134ba6028913960400191505060405180910390fd5b8060c9838154811061198a57fe5b60009182526020909120600290910201805460ff19169115159190911790555050565b6001600160a01b038116600090815260ce602052604081205460ff16156119ed57506001600160a01b038116600090815260cc6020526040902054610e97565b6001600160a01b038216600090815260cb60205260409020546109f590611288565b611a1761222d565b6097546001600160a01b03908116911614611a67576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b6097546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609780546001600160a01b0319169055565b60db5481565b6097546001600160a01b031690565b60c95490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109cd5780601f106109a2576101008083540402835291602001916109cd565b600060d054831115611b86576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81611ba7576000611b998460d35461252d565b509294506109f59350505050565b6000611bb58460d35461252d565b509194506109f59350505050565b60c98181548110611bd057fe5b6000918252602091829020600291820201805460018083018054604080516101009483161585026000190190921696909604601f810188900488028201880190965285815260ff84169750919092046001600160a01b03169492939092830182828015611c7e5780601f10611c5357610100808354040283529160200191611c7e565b820191906000526020600020905b815481529060010190602001808311611c6157829003601f168201915b5050505050905083565b60006109f1611c9561222d565b8461126d856040518060600160405280602581526020016137186025913960cd6000611cbf61222d565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612993565b60006109f1611cfd61222d565b848461257b565b60d45481565b60d6546001600160a01b031681565b6001600160a01b0316600090815260ce602052604090205460ff1690565b6001600160a01b03918216600090815260cd6020908152604080832093909416825291909152205490565b611d6a61222d565b6097546001600160a01b03908116911614611dba576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60d780546001600160a01b0319166001600160a01b0392909216919091179055565b611de461222d565b6097546001600160a01b03908116911614611e34576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff1615611ea2576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260cb602052604090205415611efc576001600160a01b038116600090815260cb6020526040902054611ee290611288565b6001600160a01b038216600090815260cc60205260409020555b6001600160a01b0316600081815260ce60205260408120805460ff1916600190811790915560cf805491820181559091527facb8d954e2cfef495862221e91bd7523613cf8808827cb33edfe4904cc51bf290180546001600160a01b0319169091179055565b611f6a61222d565b6097546001600160a01b03908116911614611fba576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b6001600160a01b038116611fff5760405162461bcd60e51b81526004018080602001828103825260268152602001806134726026913960400191505060405180910390fd5b6097546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609780546001600160a01b0319166001600160a01b0392909216919091179055565b60de6020526000908152604090205460ff1681565b61207861222d565b6097546001600160a01b039081169116146120c8576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff16612135576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b60cf548110156111f157816001600160a01b031660cf828154811061215957fe5b6000918252602090912001546001600160a01b031614156122255760cf8054600019810190811061218657fe5b60009182526020909120015460cf80546001600160a01b0390921691839081106121ac57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918416815260cc8252604080822082905560ce90925220805460ff1916905560cf8054806121fe57fe5b600082815260209020810160001990810180546001600160a01b03191690550190556111f1565b600101612138565b3390565b60dd5460ff161580612252575033600090815260de602052604090205460ff165b61228c576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b6001600160a01b0383166122d15760405162461bcd60e51b81526004018080602001828103825260248152602001806136c86024913960400191505060405180910390fd5b6001600160a01b0382166123165760405162461bcd60e51b81526004018080602001828103825260228152602001806134986022913960400191505060405180910390fd5b6001600160a01b03808416600081815260cd6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000828201838110156112e1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080821215612429576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b5090565b60008261243c575060006109f5565b8282028284828161244957fe5b04146112e15760405162461bcd60e51b81526004018080602001828103825260218152602001806135626021913960400191505060405180910390fd5b60006112e183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bd0565b60006112e183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612993565b6000806040516020840160008286518360008a6187965a03f19695505050505050565b60008060008060008060006125428989612c35565b915091506000612550612a2a565b905060008060006125628d8686612c63565b919f909e50909c50959a50939850939650505050505050565b60dd5460ff16158061259c575033600090815260de602052604090205460ff165b6125d6576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b6001600160a01b03831661261b5760405162461bcd60e51b81526004018080602001828103825260258152602001806136a36025913960400191505060405180910390fd5b6001600160a01b0382166126605760405162461bcd60e51b815260040180806020018281038252602381526020018061344f6023913960400191505060405180910390fd5b6000811161269f5760405162461bcd60e51b81526004018080602001828103825260298152602001806135f76029913960400191505060405180910390fd5b60d5546001600160a01b0384811691161480156126c9575060d6546001600160a01b038381169116145b806126e1575060d6546001600160a01b038481169116145b156126f8576126f38383836000612c9f565b61298e565b6001600160a01b038316600090815260ce602052604090205460ff16801561273957506001600160a01b038216600090815260ce602052604090205460ff16155b156127e9574260d854106127db5760d9548111156127885760405162461bcd60e51b815260040180806020018281038252603781526020018061352b6037913960400191505060405180910390fd5b60da5461279e82612798856119ad565b90612378565b11156127db5760405162461bcd60e51b815260040180806020018281038252602b81526020018061364e602b913960400191505060405180910390fd5b6126f383838360d354612dee565b6001600160a01b038316600090815260ce602052604090205460ff1615801561282a57506001600160a01b038216600090815260ce602052604090205460ff165b15612859574260d8541061284b5761284683838360db54612e8e565b6126f3565b6126f383838360d354612e8e565b6001600160a01b038316600090815260ce602052604090205460ff1615801561289b57506001600160a01b038216600090815260ce602052604090205460ff16155b156128ee574260d854106128e05760405162461bcd60e51b81526004018080602001828103825260498152602001806134e26049913960600191505060405180910390fd5b6126f383838360d354612ed0565b6001600160a01b038316600090815260ce602052604090205460ff16801561292e57506001600160a01b038216600090815260ce602052604090205460ff165b15612940576126f38383836000612c9f565b4260d854106129805760405162461bcd60e51b81526004018080602001828103825260498152602001806134e26049913960600191505060405180910390fd5b61298e83838360d354612ed0565b505050565b60008184841115612a225760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129e75781810151838201526020016129cf565b50505050905090810190601f168015612a145780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000612a37612f12565b9092509050612a468282612486565b9250505090565b303b1590565b600054610100900460ff1680612a6c5750612a6c612a4d565b80612a7a575060005460ff16155b612ab55760405162461bcd60e51b815260040180806020018281038252602e815260200180613620602e913960400191505060405180910390fd5b600054610100900460ff16158015612ae0576000805460ff1961ff0019909116610100171660011790555b612ae8613075565b612af28383613115565b801561298e576000805461ff0019169055505050565b606a805460ff191660ff92909216919091179055565b600054610100900460ff1680612b375750612b37612a4d565b80612b45575060005460ff16155b612b805760405162461bcd60e51b815260040180806020018281038252602e815260200180613620602e913960400191505060405180910390fd5b600054610100900460ff16158015612bab576000805460ff1961ff0019909116610100171660011790555b612bb3613075565b612bbb6131ed565b8015612bcd576000805461ff00191690555b50565b60008183612c1f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156129e75781810151838201526020016129cf565b506000838581612c2b57fe5b0495945050505050565b60008080612c49612710610b1d878761242d565b90506000612c5786836124c8565b96919550909350505050565b6000808080612c72878661242d565b90506000612c80878761242d565b90506000612c8e83836124c8565b929992985090965090945050505050565b6000806000806000612cb1878761252d565b6001600160a01b038e16600090815260cc602052604090205494995092975090955093509150612ce190886124c8565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb90522054612d1090866124c8565b6001600160a01b03808b16600090815260cb6020908152604080832094909455918b16815260cc9091522054612d469083612378565b6001600160a01b038916600090815260cc602090815260408083209390935560cb90522054612d759085612378565b6001600160a01b038916600090815260cb6020526040902055612d9883826132e6565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b6000806000806000612e00878761252d565b6001600160a01b038e16600090815260cc602052604090205494995092975090955093509150612e3090886124c8565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb90522054612e5f90866124c8565b6001600160a01b03808b16600090815260cb602052604080822093909355908a1681522054612d759085612378565b6000806000806000612ea0878761252d565b6001600160a01b038e16600090815260cb602052604090205494995092975090955093509150612d1090866124c8565b6000806000806000612ee2878761252d565b6001600160a01b038e16600090815260cb602052604090205494995092975090955093509150612e5f90866124c8565b60d15460d0546000918291825b60cf54811015613043578260cb600060cf8481548110612f3b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612fa057508160cc600060cf8481548110612f7957fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612fb75760d15460d05494509450505050613071565b612ff760cb600060cf8481548110612fcb57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906124c8565b925061303960cc600060cf848154811061300d57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906124c8565b9150600101612f1f565b5060d05460d15461305391612486565b82101561306b5760d15460d054935093505050613071565b90925090505b9091565b600054610100900460ff168061308e575061308e612a4d565b8061309c575060005460ff16155b6130d75760405162461bcd60e51b815260040180806020018281038252602e815260200180613620602e913960400191505060405180910390fd5b600054610100900460ff16158015612bbb576000805460ff1961ff0019909116610100171660011790558015612bcd576000805461ff001916905550565b600054610100900460ff168061312e575061312e612a4d565b8061313c575060005460ff16155b6131775760405162461bcd60e51b815260040180806020018281038252602e815260200180613620602e913960400191505060405180910390fd5b600054610100900460ff161580156131a2576000805460ff1961ff0019909116610100171660011790555b82516131b590606890602086019061330a565b5081516131c990606990602085019061330a565b50606a805460ff19166012179055801561298e576000805461ff0019169055505050565b600054610100900460ff16806132065750613206612a4d565b80613214575060005460ff16155b61324f5760405162461bcd60e51b815260040180806020018281038252602e815260200180613620602e913960400191505060405180910390fd5b600054610100900460ff1615801561327a576000805460ff1961ff0019909116610100171660011790555b600061328461222d565b609780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612bcd576000805461ff001916905550565b60d1546132f390836124c8565b60d15560d2546133039082612378565b60d2555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061334b57805160ff1916838001178555613378565b82800160010185558215613378579182015b8281111561337857825182559160200191906001019061335d565b50612429929150613439565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106133bd5780548555613378565b8280016001018555821561337857600052602060002091601f016020900482015b828111156133785782548255916001019190600101906133de565b50805460018160011615610100020316600290046000825580601f1061341f5750612bcd565b601f016020900490600052602060002090810190612bcd91905b5b80821115612429576000815560010161343a56fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c697374496e697469616c20556e6973776170206c697374696e67202d2057616c6c657420746f2057616c6c6574207472616e73666572732074656d706f726172696c792064697361626c6564496e697469616c20556e6973776170206c697374696e67202d20616d6f756e742065786365656473207472616e73666572206c696d6974536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220666565206368616e6765732074696d656c6f636b656420666f7220313220686f7572734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564496e697469616c20556e6973776170206c697374696e67202d206d61782062616c616e6365206c696d6974416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208e3521c760f72de9ce6b71bade642228bad6169b826677594278a0648f91bc6d64736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061028a5760003560e01c8063456e0a5d1161015c5780639ace38c2116100ce578063dd62ed3e11610087578063dd62ed3e14610855578063e46adf6214610883578063f2cc0c18146108a9578063f2fde38b146108cf578063f442b570146108f5578063f84354f11461091b5761028a565b80639ace38c214610719578063a457c2d7146107c7578063a9059cbb146107f3578063aef7f99e1461081f578063b76cde2714610827578063cba0e9961461082f5761028a565b8063715018a611610120578063715018a6146106cc5780637d449789146106d45780638da5cb5b146106dc57806391d4ec18146106e457806395d89b41146106ec57806397d0677b146106f45761028a565b8063456e0a5d1461062d57806346c3bd1f146106355780635c1eca84146106525780636e9dde991461068157806370a08231146106a65761028a565b80632ae427dc1161020057806338a9ad1d116101b957806338a9ad1d1461059c57806338e9ec80146105a457806339509351146105d25780633aa8d4be146105fe57806344e46dff146106065780634563f30a146106255761028a565b80632ae427dc146104e95780632bc1281e146104f1578063303bb0b6146104f9578063313ce5671461051657806334b3ae71146105345780633641e083146105585761028a565b806313114a9d1161025257806313114a9d1461043b57806314f43f7e1461044357806318160ddd146104605780631f36d925146104685780631fc3371a1461048557806323b872dd146104b35761028a565b806306fdde031461028f57806308d1dd8a1461030c578063095ea7b3146103265780630ab114f914610366578063126e19be14610383575b600080fd5b610297610941565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102d15781810151838201526020016102b9565b50505050905090810190601f1680156102fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103146109d7565b60408051918252519081900360200190f35b6103526004803603604081101561033c57600080fd5b506001600160a01b0381351690602001356109dd565b604080519115158252519081900360200190f35b6103146004803603602081101561037c57600080fd5b50356109fb565b6104396004803603604081101561039957600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156103c457600080fd5b8201836020820111156103d657600080fd5b803590602001918460018302840111640100000000831117156103f857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e9c945050505050565b005b610314610fbd565b6104396004803603602081101561045957600080fd5b5035610fc3565b61031461109e565b6104396004803603602081101561047e57600080fd5b50356110a4565b6104396004803603604081101561049b57600080fd5b506001600160a01b038135169060200135151561114a565b610352600480360360608110156104c957600080fd5b506001600160a01b038135811691602081013590911690604001356111f5565b61031461127c565b610314611282565b6103146004803603602081101561050f57600080fd5b5035611288565b61051e6112e8565b6040805160ff9092168252519081900360200190f35b61053c6112f1565b604080516001600160a01b039092168252519081900360200190f35b610439600480360360a081101561056e57600080fd5b508035906001600160a01b036020820135811691604081013582169160608201358116916080013516611300565b610314611524565b610439600480360360408110156105ba57600080fd5b506001600160a01b038135811691602001351661152a565b610352600480360360408110156105e857600080fd5b506001600160a01b0381351690602001356115b0565b61053c6115fe565b6104396004803603602081101561061c57600080fd5b5035151561160d565b610352611678565b610314611681565b6104396004803603602081101561064b57600080fd5b5035611687565b6104396004803603608081101561066857600080fd5b508035906020810135906040810135906060013561181f565b6104396004803603604081101561069757600080fd5b508035906020013515156118e4565b610314600480360360208110156106bc57600080fd5b50356001600160a01b03166119ad565b610439611a0f565b610314611ab1565b61053c611ab7565b610314611ac6565b610297611acc565b6103146004803603604081101561070a57600080fd5b50803590602001351515611b2d565b6107366004803603602081101561072f57600080fd5b5035611bc3565b604051808415158152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561078a578181015183820152602001610772565b50505050905090810190601f1680156107b75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610352600480360360408110156107dd57600080fd5b506001600160a01b038135169060200135611c88565b6103526004803603604081101561080957600080fd5b506001600160a01b038135169060200135611cf0565b610314611d04565b61053c611d0a565b6103526004803603602081101561084557600080fd5b50356001600160a01b0316611d19565b6103146004803603604081101561086b57600080fd5b506001600160a01b0381358116916020013516611d37565b6104396004803603602081101561089957600080fd5b50356001600160a01b0316611d62565b610439600480360360208110156108bf57600080fd5b50356001600160a01b0316611ddc565b610439600480360360208110156108e557600080fd5b50356001600160a01b0316611f62565b6103526004803603602081101561090b57600080fd5b50356001600160a01b031661205b565b6104396004803603602081101561093157600080fd5b50356001600160a01b0316612070565b60688054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109cd5780601f106109a2576101008083540402835291602001916109cd565b820191906000526020600020905b8154815290600101906020018083116109b057829003601f168201915b5050505050905090565b60dc5481565b60006109f16109ea61222d565b8484612231565b5060015b92915050565b6000610a05611ab7565b6001600160a01b0316610a1661222d565b6001600160a01b03161480610a45575060d7546001600160a01b0316610a3a61222d565b6001600160a01b0316145b610a8e576040805162461bcd60e51b815260206004820152601560248201527414d95b99195c881b9bdd08185d5d1a1bdc9a5e9959605a1b604482015290519081900360640190fd5b60ca54610a9c906001612378565b60ca5581610ae55760ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a25060d054610e97565b6000610b0260008412610af85783610afd565b836000035b6123d2565b60d054909150600090610b2390610b1d84633b9aca0061242d565b90612486565b9050600080851215610b4457610b3d633b9aca00836124c8565b9050610b55565b610b52633b9aca0083612378565b90505b6000851215610b735760d054610b6b90846124c8565b60d055610b84565b60d054610b809084612378565b60d0555b60005b60cf54811015610c5657600060cc600060cf8481548110610ba457fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541115610c4e57610c176009600a0a610b1d8460cc600060cf8781548110610bec57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020549061242d565b60cc600060cf8481548110610c2857fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020555b600101610b87565b5060ca5460d05460408051918252517f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f29181900360200190a260005b60c954811015610e8d57600060c98281548110610cab57fe5b60009182526020909120600290910201805490915060ff1615610e845780546001808301805460408051602060026101009685161587026000190190941693909304601f8101849004840282018401909252818152600095610d739590046001600160a01b0316939092909190830182828015610d695780601f10610d3e57610100808354040283529160200191610d69565b820191906000526020600020905b815481529060010190602001808311610d4c57829003601f168201915b505050505061250a565b905080610e825781546040805185815260208101828152600180870180546002610100938216158402600019019091160494840185905294046001600160a01b0316937f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263938893919290606083019084908015610e315780601f10610e0657610100808354040283529160200191610e31565b820191906000526020600020905b815481529060010190602001808311610e1457829003601f168201915b5050935050505060405180910390a26040805162461bcd60e51b8152602060048201526012602482015271151c985b9cd858dd1a5bdb8811985a5b195960721b604482015290519081900360640190fd5b505b50600101610c92565b5060d05493505050505b919050565b610ea461222d565b6097546001600160a01b03908116911614610ef4576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b6040805160608101825260018082526001600160a01b03808616602080850191825294840186815260c980549485018155600052845160029094027f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d2881018054935190941661010002610100600160a81b031995151560ff19909416939093179490941691909117825551805193949193610fb6937f66be4f155c5ef2ebd3772b228f2f00681e4ed5826cdb3b1943cc11ad15ad1d290192919091019061330a565b5050505050565b60d25490565b6000610fcd61222d565b6001600160a01b038116600090815260ce602052604090205490915060ff16156110285760405162461bcd60e51b815260040180806020018281038252602c8152602001806136ec602c913960400191505060405180910390fd5b60006110368360d35461252d565b505050506001600160a01b038316600090815260cb602052604090205490915061106090826124c8565b6001600160a01b038316600090815260cb602052604090205560d15461108690826124c8565b60d15560d2546110969084612378565b60d255505050565b60d05490565b6110ac61222d565b6097546001600160a01b039081169116146110fc576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60d45461a8c0014210156111415760405162461bcd60e51b815260040180806020018281038252602c8152602001806135ab602c913960400191505060405180910390fd5b60d3554260d455565b61115261222d565b6097546001600160a01b039081169116146111a2576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b80156111d0576001600160a01b038216600090815260de60205260409020805460ff191660011790556111f1565b6001600160a01b038216600090815260de60205260409020805460ff191690555b5050565b600061120284848461257b565b6112728461120e61222d565b61126d85604051806060016040528060288152602001613583602891396001600160a01b038a16600090815260cd602052604081209061124c61222d565b6001600160a01b031681526020810191909152604001600020549190612993565b612231565b5060019392505050565b60d35481565b60d95481565b600060d1548211156112cb5760405162461bcd60e51b815260040180806020018281038252602a815260200180613679602a913960400191505060405180910390fd5b60006112d5612a2a565b90506112e18382612486565b9392505050565b606a5460ff1690565b60d5546001600160a01b031681565b600054610100900460ff16806113195750611319612a4d565b80611327575060005460ff16155b6113625760405162461bcd60e51b815260040180806020018281038252602e815260200180613620602e913960400191505060405180910390fd5b600054610100900460ff1615801561138d576000805460ff1961ff0019909116610100171660011790555b6113d96040518060400160405280600d81526020016c69424153452e66696e616e636560981b81525060405180604001604052806005815260200164694241534560d81b815250612a53565b6113e36009612b08565b6113eb612b1e565b60d086905585600019816113fb57fe5b061960d15560d580546001600160a01b038086166001600160a01b03199283161790925560d680549285169290911691909117905561143861222d565b60d780546001600160a01b0319166001600160a01b0392909216919091179055606460d3554260d45560d15460cb600061147061222d565b6001600160a01b0316815260208101919091526040016000205561149261222d565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d0546040518082815260200191505060405180910390a36114ef6114ea61222d565b611ddc565b6114f885611ddc565b61150184611ddc565b61150a83611ddc565b801561151c576000805461ff00191690555b505050505050565b60d85481565b61153261222d565b6097546001600160a01b03908116911614611582576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60d580546001600160a01b039384166001600160a01b03199182161790915560d68054929093169116179055565b60006109f16115bd61222d565b8461126d8560cd60006115ce61222d565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612378565b60d7546001600160a01b031681565b61161561222d565b6097546001600160a01b03908116911614611665576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60dd805460ff1916911515919091179055565b60dd5460ff1681565b60da5481565b61168f61222d565b6097546001600160a01b039081169116146116df576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60c954811061172b576040805162461bcd60e51b8152602060048201526013602482015272696e646578206f7574206f6620626f756e647360681b604482015290519081900360640190fd5b60c954600019018110156117dc5760c98054600019810190811061174b57fe5b906000526020600020906002020160c9828154811061176657fe5b6000918252602090912082546002928302909101805460ff191660ff9092161515919091178082558354610100600160a81b0319909116610100918290046001600160a01b031682021782556001808501805493946117d8948387019492938116159092026000190190911604613384565b5050505b60c98054806117e757fe5b60008281526020812060026000199093019283020180546001600160a81b03191681559061181860018301826133f9565b5050905550565b61182761222d565b6097546001600160a01b03908116911614611877576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60dc54156118cc576040805162461bcd60e51b815260206004820152601960248201527f4c696d6974206368616e676573206e6f7420616c6c6f77656400000000000000604482015290519081900360640190fd5b60d89390935560d99190915560da5560db554260dc55565b6118ec61222d565b6097546001600160a01b0390811691161461193c576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60c954821061197c5760405162461bcd60e51b81526004018080602001828103825260288152602001806134ba6028913960400191505060405180910390fd5b8060c9838154811061198a57fe5b60009182526020909120600290910201805460ff19169115159190911790555050565b6001600160a01b038116600090815260ce602052604081205460ff16156119ed57506001600160a01b038116600090815260cc6020526040902054610e97565b6001600160a01b038216600090815260cb60205260409020546109f590611288565b611a1761222d565b6097546001600160a01b03908116911614611a67576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b6097546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609780546001600160a01b0319169055565b60db5481565b6097546001600160a01b031690565b60c95490565b60698054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156109cd5780601f106109a2576101008083540402835291602001916109cd565b600060d054831115611b86576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b81611ba7576000611b998460d35461252d565b509294506109f59350505050565b6000611bb58460d35461252d565b509194506109f59350505050565b60c98181548110611bd057fe5b6000918252602091829020600291820201805460018083018054604080516101009483161585026000190190921696909604601f810188900488028201880190965285815260ff84169750919092046001600160a01b03169492939092830182828015611c7e5780601f10611c5357610100808354040283529160200191611c7e565b820191906000526020600020905b815481529060010190602001808311611c6157829003601f168201915b5050505050905083565b60006109f1611c9561222d565b8461126d856040518060600160405280602581526020016137186025913960cd6000611cbf61222d565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612993565b60006109f1611cfd61222d565b848461257b565b60d45481565b60d6546001600160a01b031681565b6001600160a01b0316600090815260ce602052604090205460ff1690565b6001600160a01b03918216600090815260cd6020908152604080832093909416825291909152205490565b611d6a61222d565b6097546001600160a01b03908116911614611dba576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b60d780546001600160a01b0319166001600160a01b0392909216919091179055565b611de461222d565b6097546001600160a01b03908116911614611e34576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff1615611ea2576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260cb602052604090205415611efc576001600160a01b038116600090815260cb6020526040902054611ee290611288565b6001600160a01b038216600090815260cc60205260409020555b6001600160a01b0316600081815260ce60205260408120805460ff1916600190811790915560cf805491820181559091527facb8d954e2cfef495862221e91bd7523613cf8808827cb33edfe4904cc51bf290180546001600160a01b0319169091179055565b611f6a61222d565b6097546001600160a01b03908116911614611fba576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b6001600160a01b038116611fff5760405162461bcd60e51b81526004018080602001828103825260268152602001806134726026913960400191505060405180910390fd5b6097546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609780546001600160a01b0319166001600160a01b0392909216919091179055565b60de6020526000908152604090205460ff1681565b61207861222d565b6097546001600160a01b039081169116146120c8576040805162461bcd60e51b815260206004820181905260248201526000805160206135d7833981519152604482015290519081900360640190fd5b6001600160a01b038116600090815260ce602052604090205460ff16612135576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b60cf548110156111f157816001600160a01b031660cf828154811061215957fe5b6000918252602090912001546001600160a01b031614156122255760cf8054600019810190811061218657fe5b60009182526020909120015460cf80546001600160a01b0390921691839081106121ac57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918416815260cc8252604080822082905560ce90925220805460ff1916905560cf8054806121fe57fe5b600082815260209020810160001990810180546001600160a01b03191690550190556111f1565b600101612138565b3390565b60dd5460ff161580612252575033600090815260de602052604090205460ff165b61228c576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b6001600160a01b0383166122d15760405162461bcd60e51b81526004018080602001828103825260248152602001806136c86024913960400191505060405180910390fd5b6001600160a01b0382166123165760405162461bcd60e51b81526004018080602001828103825260228152602001806134986022913960400191505060405180910390fd5b6001600160a01b03808416600081815260cd6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6000828201838110156112e1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080821215612429576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b5090565b60008261243c575060006109f5565b8282028284828161244957fe5b04146112e15760405162461bcd60e51b81526004018080602001828103825260218152602001806135626021913960400191505060405180910390fd5b60006112e183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612bd0565b60006112e183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612993565b6000806040516020840160008286518360008a6187965a03f19695505050505050565b60008060008060008060006125428989612c35565b915091506000612550612a2a565b905060008060006125628d8686612c63565b919f909e50909c50959a50939850939650505050505050565b60dd5460ff16158061259c575033600090815260de602052604090205460ff165b6125d6576040805162461bcd60e51b81526020600482015260066024820152651c185d5cd95960d21b604482015290519081900360640190fd5b6001600160a01b03831661261b5760405162461bcd60e51b81526004018080602001828103825260258152602001806136a36025913960400191505060405180910390fd5b6001600160a01b0382166126605760405162461bcd60e51b815260040180806020018281038252602381526020018061344f6023913960400191505060405180910390fd5b6000811161269f5760405162461bcd60e51b81526004018080602001828103825260298152602001806135f76029913960400191505060405180910390fd5b60d5546001600160a01b0384811691161480156126c9575060d6546001600160a01b038381169116145b806126e1575060d6546001600160a01b038481169116145b156126f8576126f38383836000612c9f565b61298e565b6001600160a01b038316600090815260ce602052604090205460ff16801561273957506001600160a01b038216600090815260ce602052604090205460ff16155b156127e9574260d854106127db5760d9548111156127885760405162461bcd60e51b815260040180806020018281038252603781526020018061352b6037913960400191505060405180910390fd5b60da5461279e82612798856119ad565b90612378565b11156127db5760405162461bcd60e51b815260040180806020018281038252602b81526020018061364e602b913960400191505060405180910390fd5b6126f383838360d354612dee565b6001600160a01b038316600090815260ce602052604090205460ff1615801561282a57506001600160a01b038216600090815260ce602052604090205460ff165b15612859574260d8541061284b5761284683838360db54612e8e565b6126f3565b6126f383838360d354612e8e565b6001600160a01b038316600090815260ce602052604090205460ff1615801561289b57506001600160a01b038216600090815260ce602052604090205460ff16155b156128ee574260d854106128e05760405162461bcd60e51b81526004018080602001828103825260498152602001806134e26049913960600191505060405180910390fd5b6126f383838360d354612ed0565b6001600160a01b038316600090815260ce602052604090205460ff16801561292e57506001600160a01b038216600090815260ce602052604090205460ff165b15612940576126f38383836000612c9f565b4260d854106129805760405162461bcd60e51b81526004018080602001828103825260498152602001806134e26049913960600191505060405180910390fd5b61298e83838360d354612ed0565b505050565b60008184841115612a225760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129e75781810151838201526020016129cf565b50505050905090810190601f168015612a145780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000612a37612f12565b9092509050612a468282612486565b9250505090565b303b1590565b600054610100900460ff1680612a6c5750612a6c612a4d565b80612a7a575060005460ff16155b612ab55760405162461bcd60e51b815260040180806020018281038252602e815260200180613620602e913960400191505060405180910390fd5b600054610100900460ff16158015612ae0576000805460ff1961ff0019909116610100171660011790555b612ae8613075565b612af28383613115565b801561298e576000805461ff0019169055505050565b606a805460ff191660ff92909216919091179055565b600054610100900460ff1680612b375750612b37612a4d565b80612b45575060005460ff16155b612b805760405162461bcd60e51b815260040180806020018281038252602e815260200180613620602e913960400191505060405180910390fd5b600054610100900460ff16158015612bab576000805460ff1961ff0019909116610100171660011790555b612bb3613075565b612bbb6131ed565b8015612bcd576000805461ff00191690555b50565b60008183612c1f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156129e75781810151838201526020016129cf565b506000838581612c2b57fe5b0495945050505050565b60008080612c49612710610b1d878761242d565b90506000612c5786836124c8565b96919550909350505050565b6000808080612c72878661242d565b90506000612c80878761242d565b90506000612c8e83836124c8565b929992985090965090945050505050565b6000806000806000612cb1878761252d565b6001600160a01b038e16600090815260cc602052604090205494995092975090955093509150612ce190886124c8565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb90522054612d1090866124c8565b6001600160a01b03808b16600090815260cb6020908152604080832094909455918b16815260cc9091522054612d469083612378565b6001600160a01b038916600090815260cc602090815260408083209390935560cb90522054612d759085612378565b6001600160a01b038916600090815260cb6020526040902055612d9883826132e6565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b6000806000806000612e00878761252d565b6001600160a01b038e16600090815260cc602052604090205494995092975090955093509150612e3090886124c8565b6001600160a01b038a16600090815260cc602090815260408083209390935560cb90522054612e5f90866124c8565b6001600160a01b03808b16600090815260cb602052604080822093909355908a1681522054612d759085612378565b6000806000806000612ea0878761252d565b6001600160a01b038e16600090815260cb602052604090205494995092975090955093509150612d1090866124c8565b6000806000806000612ee2878761252d565b6001600160a01b038e16600090815260cb602052604090205494995092975090955093509150612e5f90866124c8565b60d15460d0546000918291825b60cf54811015613043578260cb600060cf8481548110612f3b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612fa057508160cc600060cf8481548110612f7957fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612fb75760d15460d05494509450505050613071565b612ff760cb600060cf8481548110612fcb57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906124c8565b925061303960cc600060cf848154811061300d57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906124c8565b9150600101612f1f565b5060d05460d15461305391612486565b82101561306b5760d15460d054935093505050613071565b90925090505b9091565b600054610100900460ff168061308e575061308e612a4d565b8061309c575060005460ff16155b6130d75760405162461bcd60e51b815260040180806020018281038252602e815260200180613620602e913960400191505060405180910390fd5b600054610100900460ff16158015612bbb576000805460ff1961ff0019909116610100171660011790558015612bcd576000805461ff001916905550565b600054610100900460ff168061312e575061312e612a4d565b8061313c575060005460ff16155b6131775760405162461bcd60e51b815260040180806020018281038252602e815260200180613620602e913960400191505060405180910390fd5b600054610100900460ff161580156131a2576000805460ff1961ff0019909116610100171660011790555b82516131b590606890602086019061330a565b5081516131c990606990602085019061330a565b50606a805460ff19166012179055801561298e576000805461ff0019169055505050565b600054610100900460ff16806132065750613206612a4d565b80613214575060005460ff16155b61324f5760405162461bcd60e51b815260040180806020018281038252602e815260200180613620602e913960400191505060405180910390fd5b600054610100900460ff1615801561327a576000805460ff1961ff0019909116610100171660011790555b600061328461222d565b609780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612bcd576000805461ff001916905550565b60d1546132f390836124c8565b60d15560d2546133039082612378565b60d2555050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061334b57805160ff1916838001178555613378565b82800160010185558215613378579182015b8281111561337857825182559160200191906001019061335d565b50612429929150613439565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106133bd5780548555613378565b8280016001018555821561337857600052602060002091601f016020900482015b828111156133785782548255916001019190600101906133de565b50805460018160011615610100020316600290046000825580601f1061341f5750612bcd565b601f016020900490600052602060002090810190612bcd91905b5b80821115612429576000815560010161343a56fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c697374496e697469616c20556e6973776170206c697374696e67202d2057616c6c657420746f2057616c6c6574207472616e73666572732074656d706f726172696c792064697361626c6564496e697469616c20556e6973776170206c697374696e67202d20616d6f756e742065786365656473207472616e73666572206c696d6974536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220666565206368616e6765732074696d656c6f636b656420666f7220313220686f7572734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564496e697469616c20556e6973776170206c697374696e67202d206d61782062616c616e6365206c696d6974416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208e3521c760f72de9ce6b71bade642228bad6169b826677594278a0648f91bc6d64736f6c634300060c0033

Deployed Bytecode Sourcemap

30945:19540:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23485:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32516:30;;;:::i;:::-;;;;;;;;;;;;;;;;40486:161;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40486:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;35049:1761;;;;;;;;;;;;;;;;-1:-1:-1;35049:1761:0;;:::i;37036:260::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37036:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37036:260:0;;-1:-1:-1;37036:260:0;;-1:-1:-1;;;;;37036:260:0:i;:::-;;41615:87;;;:::i;41710:390::-;;;;;;;;;;;;;;;;-1:-1:-1;41710:390:0;;:::i;34937:100::-;;;:::i;34208:263::-;;;;;;;;;;;;;;;;-1:-1:-1;34208:263:0;;:::i;33640:261::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33640:261:0;;;;;;;;;;:::i;40655:313::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40655:313:0;;;;;;;;;;;;;;;;;:::i;32029:27::-;;;:::i;32388:35::-;;;:::i;42583:253::-;;;;;;;;;;;;;;;;-1:-1:-1;42583:253:0;;:::i;24412:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32145:26;;;:::i;:::-;;;;-1:-1:-1;;;;;32145:26:0;;;;;;;;;;;;;;32559:821;;;;;;;;;;;;;;;;-1:-1:-1;32559:821:0;;;-1:-1:-1;;;;;32559:821:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32344:37::-;;;:::i;33913:176::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33913:176:0;;;;;;;;;;:::i;40976:227::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40976:227:0;;;;;;;;:::i;32308:23::-;;;:::i;33488:144::-;;;;;;;;;;;;;;;;-1:-1:-1;33488:144:0;;;;:::i;33388:27::-;;;:::i;32430:31::-;;;:::i;37448:325::-;;;;;;;;;;;;;;;;-1:-1:-1;37448:325:0;;:::i;34483:442::-;;;;;;;;;;;;;;;;-1:-1:-1;34483:442:0;;;;;;;;;;;;;;;;;:::i;37955:246::-;;;;;;;;;;;;;;;;-1:-1:-1;37955:246:0;;;;;;;;;:::i;39954:198::-;;;;;;;;;;;;;;;;-1:-1:-1;39954:198:0;-1:-1:-1;;;;;39954:198:0;;:::i;9455:148::-;;;:::i;32468:35::-;;;:::i;8813:79::-;;;:::i;38316:137::-;;;:::i;23687:87::-;;;:::i;42108:467::-;;;;;;;;;;;;;;;;-1:-1:-1;42108:467:0;;;;;;;;;:::i;31353:33::-;;;;;;;;;;;;;;;;-1:-1:-1;31353:33:0;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;31353:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41211:278;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41211:278:0;;;;;;;;:::i;40160:167::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40160:167:0;;;;;;;;:::i;32063:29::-;;;:::i;32268:27::-;;;:::i;41497:110::-;;;;;;;;;;;;;;;;-1:-1:-1;41497:110:0;-1:-1:-1;;;;;41497:110:0;;:::i;40335:143::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40335:143:0;;;;;;;;;;:::i;34101:95::-;;;;;;;;;;;;;;;;-1:-1:-1;34101:95:0;-1:-1:-1;;;;;34101:95:0;;:::i;42844:330::-;;;;;;;;;;;;;;;;-1:-1:-1;42844:330:0;-1:-1:-1;;;;;42844:330:0;;:::i;9758:244::-;;;;;;;;;;;;;;;;-1:-1:-1;9758:244:0;-1:-1:-1;;;;;9758:244:0;;:::i;33424:55::-;;;;;;;;;;;;;;;;-1:-1:-1;33424:55:0;-1:-1:-1;;;;;33424:55:0;;:::i;43182:476::-;;;;;;;;;;;;;;;;-1:-1:-1;43182:476:0;-1:-1:-1;;;;;43182:476:0;;:::i;23485:83::-;23555:5;23548:12;;;;;;;;-1:-1:-1;;23548:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23522:13;;23548:12;;23555:5;;23548:12;;23555:5;23548:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23485:83;:::o;32516:30::-;;;;:::o;40486:161::-;40561:4;40578:39;40587:12;:10;:12::i;:::-;40601:7;40610:6;40578:8;:39::i;:::-;-1:-1:-1;40635:4:0;40486:161;;;;;:::o;35049:1761::-;35121:7;35170;:5;:7::i;:::-;-1:-1:-1;;;;;35154:23:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;35154:23:0;;:51;;;-1:-1:-1;35197:8:0;;-1:-1:-1;;;;;35197:8:0;35181:12;:10;:12::i;:::-;-1:-1:-1;;;;;35181:24:0;;35154:51;35146:85;;;;;-1:-1:-1;;;35146:85:0;;;;;;;;;;;;-1:-1:-1;;;35146:85:0;;;;;;;;;;;;;;;35261:6;;:13;;35272:1;35261:10;:13::i;:::-;35252:6;:22;35293:16;35289:119;;35341:6;;35349:12;;35331:31;;;;;;;;;;;;;;;;-1:-1:-1;35384:12:0;;35377:19;;35289:119;35428:20;35451:58;35466:1;35452:11;:15;:44;;35485:11;35452:44;;;35471:11;35470:12;;35452:44;35451:56;:58::i;:::-;35572:12;;35428:81;;-1:-1:-1;35520:12:0;;35535:50;;:32;35428:81;32002:14;35535:16;:32::i;:::-;:36;;:50::i;:::-;35520:65;;35596:18;35653:1;35639:11;:15;35635:155;;;35684:24;32002:14;35703:4;35684:18;:24::i;:::-;35671:37;;35635:155;;;35754:24;32002:14;35773:4;35754:18;:24::i;:::-;35741:37;;35635:155;35828:1;35814:11;:15;35810:171;;;35861:12;;:30;;35878:12;35861:16;:30::i;:::-;35846:12;:45;35810:171;;;35939:12;;:30;;35956:12;35939:16;:30::i;:::-;35924:12;:45;35810:171;36095:9;36090:219;36114:9;:16;36110:20;;36090:219;;;36179:1;36155:7;:21;36163:9;36173:1;36163:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36163:12:0;36155:21;;;;;;;;;;;;;:25;36152:146;;;36225:57;31952:1;32002:2;:14;36225:37;36251:10;36225:7;:21;36233:9;36243:1;36233:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36233:12:0;36225:21;;;;;;;;;;;;;;:25;:37::i;:57::-;36201:7;:21;36209:9;36219:1;36209:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36209:12:0;36201:21;;;;;;;;;;;;:81;36152:146;36132:3;;36090:219;;;-1:-1:-1;36344:6:0;;36352:12;;36334:31;;;;;;;;;;;;;;;;36377:6;36372:399;36393:12;:19;36389:23;;36372:399;;;36434:21;36458:12;36471:1;36458:15;;;;;;;;;;;;;;;;;;;;;36492:9;;36458:15;;-1:-1:-1;36492:9:0;;36488:272;;;36549:13;;;36564:6;;;36536:35;;;;;;;36549:13;36536:35;;;;;;-1:-1:-1;;36536:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;36536:35:0;;36549:13;;-1:-1:-1;;;;;36549:13:0;;36536:35;;36564:6;;36536:35;;;36564:6;36536:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:35::i;:::-;36522:49;;36595:6;36590:155;;36649:13;;36631:43;;;;;;;;;;;;36649:13;36667:6;;;36631:43;;;36649:13;36631:43;;;;;;-1:-1:-1;;36631:43:0;;;;;;;;;;;36649:13;;-1:-1:-1;;;;;36649:13:0;;36631:43;;;;36667:6;;36631:43;;;;;36667:6;;36631:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36697:28;;;-1:-1:-1;;;36697:28:0;;;;;;;;;;;;-1:-1:-1;;;36697:28:0;;;;;;;;;;;;;;36590:155;36488:272;;-1:-1:-1;36414:3:0;;36372:399;;;;36790:12;;36783:19;;;;;35049:1761;;;;:::o;37036:260::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;37171:116:::1;::::0;;::::1;::::0;::::1;::::0;;37207:4:::1;37171:116:::0;;;-1:-1:-1;;;;;37171:116:0;;::::1;;::::0;;::::1;::::0;;;;;;;;;37153:12:::1;:135:::0;;;;::::1;::::0;;-1:-1:-1;37153:135:0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;::::1;;;-1:-1:-1::0;;;;;;37153:135:0;::::1;;-1:-1:-1::0;;37153:135:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;;;37171:116;;37153:135;;::::1;::::0;;;;;;;::::1;::::0;::::1;:::i;:::-;;;;37036:260:::0;;:::o;41615:87::-;41684:10;;41615:87;:::o;41710:390::-;41762:14;41779:12;:10;:12::i;:::-;-1:-1:-1;;;;;41811:19:0;;;;;;:11;:19;;;;;;41762:29;;-1:-1:-1;41811:19:0;;41810:20;41802:77;;;;-1:-1:-1;;;41802:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41891:15;41914:33;41925:7;41934:12;;41914:10;:33::i;:::-;-1:-1:-1;;;;;;;;;41976:15:0;;;;;;:7;:15;;;;;;41890:57;;-1:-1:-1;41976:28:0;;41890:57;41976:19;:28::i;:::-;-1:-1:-1;;;;;41958:15:0;;;;;;:7;:15;;;;;:46;42025:7;;:20;;42037:7;42025:11;:20::i;:::-;42015:7;:30;42069:10;;:23;;42084:7;42069:14;:23::i;:::-;42056:10;:36;-1:-1:-1;;;41710:390:0:o;34937:100::-;35017:12;;34937:100;:::o;34208:263::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;34308:14:::1;;34325:8;34308:25;34300:3;:34;;34292:91;;;;-1:-1:-1::0;;;34292:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34396:12;:26:::0;34460:3:::1;34443:14;:20:::0;34208:263::o;33640:261::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;33754:6:::1;33750:144;;;-1:-1:-1::0;;;;;33777:29:0;::::1;;::::0;;;:23:::1;:29;::::0;;;;:36;;-1:-1:-1;;33777:36:0::1;33809:4;33777:36;::::0;;33750:144:::1;;;-1:-1:-1::0;;;;;33853:29:0;::::1;;::::0;;;:23:::1;:29;::::0;;;;33846:36;;-1:-1:-1;;33846:36:0::1;::::0;;33750:144:::1;33640:261:::0;;:::o;40655:313::-;40753:4;40770:36;40780:6;40788:9;40799:6;40770:9;:36::i;:::-;40817:121;40826:6;40834:12;:10;:12::i;:::-;40848:89;40886:6;40848:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40848:19:0;;;;;;:11;:19;;;;;;40868:12;:10;:12::i;:::-;-1:-1:-1;;;;;40848:33:0;;;;;;;;;;;;-1:-1:-1;40848:33:0;;;:89;:37;:89::i;:::-;40817:8;:121::i;:::-;-1:-1:-1;40956:4:0;40655:313;;;;;:::o;32029:27::-;;;;:::o;32388:35::-;;;;:::o;42583:253::-;42649:7;42688;;42677;:18;;42669:73;;;;-1:-1:-1;;;42669:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42753:19;42776:10;:8;:10::i;:::-;42753:33;-1:-1:-1;42804:24:0;:7;42753:33;42804:11;:24::i;:::-;42797:31;42583:253;-1:-1:-1;;;42583:253:0:o;24412:83::-;24478:9;;;;24412:83;:::o;32145:26::-;;;-1:-1:-1;;;;;32145:26:0;;:::o;32559:821::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;32717:38:::1;;;;;;;;;;;;;;-1:-1:-1::0;;;32717:38:0::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;32717:38:0::1;;::::0;:12:::1;:38::i;:::-;32766:31;31952:1;32766:14;:31::i;:::-;32808:16;:14;:16::i;:::-;32845:12;:28:::0;;;32860:13;-1:-1:-1;;32860:13:0;32902:18:::1;;;;;32895:26:::0;32884:7:::1;:38:::0;32943:11:::1;:21:::0;;-1:-1:-1;;;;;32943:21:0;;::::1;-1:-1:-1::0;;;;;;32943:21:0;;::::1;;::::0;;;32975:12:::1;:22:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;33029:12:::1;:10;:12::i;:::-;33018:8;:23:::0;;-1:-1:-1;;;;;;33018:23:0::1;-1:-1:-1::0;;;;;33018:23:0;;;::::1;::::0;;;::::1;::::0;;33077:3:::1;33062:12;:18:::0;33117:3:::1;33100:14;:20:::0;33157:7:::1;::::0;33133::::1;-1:-1:-1::0;33141:12:0::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;33133:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;33133:21:0;:31;33201:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;33180:48:0::1;33197:1;-1:-1:-1::0;;;;;33180:48:0::1;;33215:12;;33180:48;;;;;;;;;;;;;;;;;;33249:28;33264:12;:10;:12::i;:::-;33249:14;:28::i;:::-;33288:20;33303:4;33288:14;:20::i;:::-;33319:19;33334:3;33319:14;:19::i;:::-;33349:23;33364:7;33349:14;:23::i;:::-;5312:14:::0;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;5308:57;32559:821;;;;;;:::o;32344:37::-;;;;:::o;33913:176::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;34020:11:::1;:24:::0;;-1:-1:-1;;;;;34020:24:0;;::::1;-1:-1:-1::0;;;;;;34020:24:0;;::::1;;::::0;;;34055:12:::1;:26:::0;;;;;::::1;::::0;::::1;;::::0;;33913:176::o;40976:227::-;41073:4;41090:83;41099:12;:10;:12::i;:::-;41113:7;41122:50;41161:10;41122:11;:25;41134:12;:10;:12::i;:::-;-1:-1:-1;;;;;41122:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;41122:25:0;;;:34;;;;;;;;;;;:38;:50::i;32308:23::-;;;-1:-1:-1;;;;;32308:23:0;;:::o;33488:144::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;33590:15:::1;:34:::0;;-1:-1:-1;;33590:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33488:144::o;33388:27::-;;;;;;:::o;32430:31::-;;;;:::o;37448:325::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;37556:12:::1;:19:::0;37548:27;::::1;37540:59;;;::::0;;-1:-1:-1;;;37540:59:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;37540:59:0;;;;;;;;;;;;;::::1;;37624:12;:19:::0;-1:-1:-1;;37624:23:0;37616:31;::::1;37612:123;;;37686:12;37699:19:::0;;-1:-1:-1;;37699:23:0;;;37686:37;::::1;;;;;;;;;;;;;;;37664:12;37677:5;37664:19;;;;;;;;;::::0;;;::::1;::::0;;;:59;;:19:::1;::::0;;::::1;::::0;;::::1;:59:::0;;-1:-1:-1;;37664:59:0::1;;::::0;;::::1;;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;;;;;37664:59:0;;::::1;;::::0;;;::::1;-1:-1:-1::0;;;;;37664:59:0::1;::::0;::::1;;::::0;;-1:-1:-1;37664:59:0;;::::1;::::0;;:19;;:59:::1;::::0;;;::::1;::::0;;;;::::1;;::::0;;::::1;-1:-1:-1::0;;37664:59:0;;;::::1;;;:::i;:::-;-1:-1:-1::0;;;37612:123:0::1;37747:12;:18;;;;;;;;::::0;;;::::1;::::0;;::::1;-1:-1:-1::0;;37747:18:0;;;;;::::1;;::::0;;-1:-1:-1;;;;;;37747:18:0;;;;::::1;;::::0;::::1;::::0;::::1;:::i;:::-;;;;;37448:325:::0;:::o;34483:442::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;34635:15:::1;::::0;:20;34627:58:::1;;;::::0;;-1:-1:-1;;;34627:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;34706:22;:41:::0;;;;34758:20:::1;:37:::0;;;;34806:16:::1;:29:::0;34846:20:::1;:37:::0;34914:3:::1;34896:15;:21:::0;34483:442::o;37955:246::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;38081:12:::1;:19:::0;38073:27;::::1;38065:80;;;;-1:-1:-1::0;;;38065:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38186:7;38156:12;38169:5;38156:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:37:::0;;-1:-1:-1;;38156:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;37955:246:0:o;39954:198::-;-1:-1:-1;;;;;40044:20:0;;40020:7;40044:20;;;:11;:20;;;;;;;;40040:49;;;-1:-1:-1;;;;;;40073:16:0;;;;;;:7;:16;;;;;;40066:23;;40040:49;-1:-1:-1;;;;;40127:16:0;;;;;;:7;:16;;;;;;40107:37;;:19;:37::i;9455:148::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;9546:6:::1;::::0;9525:40:::1;::::0;9562:1:::1;::::0;-1:-1:-1;;;;;9546:6:0::1;::::0;9525:40:::1;::::0;9562:1;;9525:40:::1;9576:6;:19:::0;;-1:-1:-1;;;;;;9576:19:0::1;::::0;;9455:148::o;32468:35::-;;;;:::o;8813:79::-;8878:6;;-1:-1:-1;;;;;8878:6:0;8813:79;:::o;38316:137::-;38426:12;:19;38316:137;:::o;23687:87::-;23759:7;23752:14;;;;;;;;-1:-1:-1;;23752:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23726:13;;23752:14;;23759:7;;23752:14;;23759:7;23752:14;;;;;;;;;;;;;;;;;;;;;;;;42108:467;42198:7;42237:12;;42226:7;:23;;42218:67;;;;;-1:-1:-1;;;42218:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42301:17;42296:272;;42336:15;42359:33;42370:7;42379:12;;42359:10;:33::i;:::-;-1:-1:-1;42335:57:0;;-1:-1:-1;42407:14:0;;-1:-1:-1;;;;42407:14:0;42296:272;42456:23;42486:33;42497:7;42506:12;;42486:10;:33::i;:::-;-1:-1:-1;42454:65:0;;-1:-1:-1;42534:22:0;;-1:-1:-1;;;;42534:22:0;31353:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31353:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31353:33:0;;;;-1:-1:-1;;;;;31353:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41211:278::-;41313:4;41330:129;41339:12;:10;:12::i;:::-;41353:7;41362:96;41401:15;41362:96;;;;;;;;;;;;;;;;;:11;:25;41374:12;:10;:12::i;:::-;-1:-1:-1;;;;;41362:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;41362:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;40160:167::-;40238:4;40255:42;40265:12;:10;:12::i;:::-;40279:9;40290:6;40255:9;:42::i;32063:29::-;;;;:::o;32268:27::-;;;-1:-1:-1;;;;;32268:27:0;;:::o;41497:110::-;-1:-1:-1;;;;;41579:20:0;41555:4;41579:20;;;:11;:20;;;;;;;;;41497:110::o;40335:143::-;-1:-1:-1;;;;;40443:18:0;;;40416:7;40443:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;40335:143::o;34101:95::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;34170:8:::1;:18:::0;;-1:-1:-1;;;;;;34170:18:0::1;-1:-1:-1::0;;;;;34170:18:0;;;::::1;::::0;;;::::1;::::0;;34101:95::o;42844:330::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42924:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;42923:21;42915:61;;;::::0;;-1:-1:-1;;;42915:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;42990:16:0;::::1;43009:1;42990:16:::0;;;:7:::1;:16;::::0;;;;;:20;42987:108:::1;;-1:-1:-1::0;;;;;43066:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;43046:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;43027:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;42987:108:::1;-1:-1:-1::0;;;;;43105:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;43105:27:0::1;43128:4;43105:27:::0;;::::1;::::0;;;43143:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;43143:23:0::1;::::0;;::::1;::::0;;42844:330::o;9758:244::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9847:22:0;::::1;9839:73;;;;-1:-1:-1::0;;;9839:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9949:6;::::0;9928:38:::1;::::0;-1:-1:-1;;;;;9928:38:0;;::::1;::::0;9949:6:::1;::::0;9928:38:::1;::::0;9949:6:::1;::::0;9928:38:::1;9977:6;:17:::0;;-1:-1:-1;;;;;;9977:17:0::1;-1:-1:-1::0;;;;;9977:17:0;;;::::1;::::0;;;::::1;::::0;;9758:244::o;33424:55::-;;;;;;;;;;;;;;;:::o;43182:476::-;9035:12;:10;:12::i;:::-;9025:6;;-1:-1:-1;;;;;9025:6:0;;;:22;;;9017:67;;;;;-1:-1:-1;;;9017:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;9017:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;43261:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;43253:60;;;::::0;;-1:-1:-1;;;43253:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;43329:9;43324:327;43348:9;:16:::0;43344:20;::::1;43324:327;;;43406:7;-1:-1:-1::0;;;;;43390:23:0::1;:9;43400:1;43390:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;43390:12:0::1;:23;43386:254;;;43449:9;43459:16:::0;;-1:-1:-1;;43459:20:0;;;43449:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;43434:9:::1;:12:::0;;-1:-1:-1;;;;;43449:31:0;;::::1;::::0;43444:1;;43434:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;43434:46:0::1;-1:-1:-1::0;;;;;43434:46:0;;::::1;;::::0;;43499:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;43538:11:::1;:20:::0;;;;:28;;-1:-1:-1;;43538:28:0::1;::::0;;43585:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;43585:15:0;;;;;-1:-1:-1;;;;;;43585:15:0::1;::::0;;;;;43619:5:::1;;43386:254;43366:3;;43324:327;;7089:106:::0;7177:10;7089:106;:::o;43666:432::-;43770:15;;;;43769:16;;:55;;-1:-1:-1;43813:10:0;43789:35;;;;:23;:35;;;;;;;;43769:55;43761:74;;;;;-1:-1:-1;;;43761:74:0;;;;;;;;;;;;-1:-1:-1;;;43761:74:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;43854:19:0;;43846:68;;;;-1:-1:-1;;;43846:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43933:21:0;;43925:68;;;;-1:-1:-1;;;43925:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44006:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;44058:32;;;;;;;;;;;;;;;;;43666:432;;;:::o;13809:181::-;13867:7;13899:5;;;13923:6;;;;13915:46;;;;;-1:-1:-1;;;13915:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;3378:171;3434:7;3471:1;3462:5;:10;;3454:55;;;;;-1:-1:-1;;;3454:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3535:5:0;3378:171::o;15139:471::-;15197:7;15442:6;15438:47;;-1:-1:-1;15472:1:0;15465:8;;15438:47;15509:5;;;15513:1;15509;:5;:1;15533:5;;;;;:10;15525:56;;;;-1:-1:-1;;;15525:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16078:132;16136:7;16163:39;16167:1;16170;16163:39;;;;;;;;;;;;;;;;;:3;:39::i;14265:136::-;14323:7;14350:43;14354:1;14357;14350:43;;;;;;;;;;;;;;;;;:3;:43::i;38696:1250::-;38794:4;38816:11;39056:4;39050:11;39184:2;39178:4;39174:13;39831:1;39799:13;39707:4;39701:11;39671;39626:1;39596:11;39567:5;39560;39556:17;39213:691;39203:701;38696:1250;-1:-1:-1;;;;;;38696:1250:0:o;48664:445::-;48744:7;48753;48762;48771;48780;48801:23;48826:12;48842:33;48854:7;48863:11;48842;:33::i;:::-;48800:75;;;;48886:19;48909:10;:8;:10::i;:::-;48886:33;;48931:15;48948:23;48973:12;48989:39;49001:7;49010:4;49016:11;48989;:39::i;:::-;48930:98;;;;-1:-1:-1;48930:98:0;;-1:-1:-1;49079:15:0;;-1:-1:-1;49096:4:0;;-1:-1:-1;48664:445:0;;-1:-1:-1;;;;;;;48664:445:0:o;44106:2146::-;44214:15;;;;44213:16;;:55;;-1:-1:-1;44257:10:0;44233:35;;;;:23;:35;;;;;;;;44213:55;44205:74;;;;;-1:-1:-1;;;44205:74:0;;;;;;;;;;;;-1:-1:-1;;;44205:74:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;44298:20:0;;44290:70;;;;-1:-1:-1;;;44290:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44379:23:0;;44371:71;;;;-1:-1:-1;;;44371:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44470:1;44461:6;:10;44453:64;;;;-1:-1:-1;;;44453:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44562:11;;-1:-1:-1;;;;;44552:21:0;;;44562:11;;44552:21;:50;;;;-1:-1:-1;44590:12:0;;-1:-1:-1;;;;;44577:25:0;;;44590:12;;44577:25;44552:50;44551:78;;;-1:-1:-1;44617:12:0;;-1:-1:-1;;;;;44607:22:0;;;44617:12;;44607:22;44551:78;44548:1697;;;44678:51;44700:6;44708:9;44719:6;44727:1;44678:21;:51::i;:::-;44548:1697;;;-1:-1:-1;;;;;44750:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;44774:22:0;;;;;;:11;:22;;;;;;;;44773:23;44750:46;44747:1498;;;44856:3;44830:22;;:29;44827:294;;44898:20;;44888:6;:30;;44880:98;;;;-1:-1:-1;;;44880:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45041:16;;45005:32;45030:6;45005:20;45015:9;45005;:20::i;:::-;:24;;:32::i;:::-;:52;;44997:108;;;;-1:-1:-1;;;44997:108:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45149:62;45171:6;45179:9;45190:6;45198:12;;45149:21;:62::i;44747:1498::-;-1:-1:-1;;;;;45248:19:0;;;;;;:11;:19;;;;;;;;45247:20;:46;;;;-1:-1:-1;;;;;;45271:22:0;;;;;;:11;:22;;;;;;;;45247:46;45243:1002;;;45353:3;45327:22;;:29;45324:238;;45377:68;45397:6;45405:9;45416:6;45424:20;;45377:19;:68::i;:::-;45324:238;;;45486:60;45506:6;45514:9;45525:6;45533:12;;45486:19;:60::i;45243:1002::-;-1:-1:-1;;;;;45586:19:0;;;;;;:11;:19;;;;;;;;45585:20;:47;;;;-1:-1:-1;;;;;;45610:22:0;;;;;;:11;:22;;;;;;;;45609:23;45585:47;45581:664;;;45682:3;45657:22;;:28;45649:114;;;;-1:-1:-1;;;45649:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45778:58;45796:6;45804:9;45815:6;45823:12;;45778:17;:58::i;45581:664::-;-1:-1:-1;;;;;45872:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;45895:22:0;;;;;;:11;:22;;;;;;;;45872:45;45868:377;;;45934:51;45956:6;45964:9;45975:6;45983:1;45934:21;:51::i;45868:377::-;46065:3;46040:22;;:28;46032:114;;;;-1:-1:-1;;;46032:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46161:58;46179:6;46187:9;46198:6;46206:12;;46161:17;:58::i;:::-;44106:2146;;;:::o;14696:192::-;14782:7;14818:12;14810:6;;;;14802:29;;;;-1:-1:-1;;;14802:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14854:5:0;;;14696:192::o;49730:163::-;49771:7;49792:15;49809;49828:19;:17;:19::i;:::-;49791:56;;-1:-1:-1;49791:56:0;-1:-1:-1;49865:20:0;49791:56;;49865:11;:20::i;:::-;49858:27;;;;49730:163;:::o;5459:508::-;5876:4;5922:17;5954:7;5459:508;:::o;23044:177::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;23140:26:::1;:24;:26::i;:::-;23177:36;23200:4;23206:6;23177:22;:36::i;:::-;5312:14:::0;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;23044:177;;;:::o;30117:90::-;30178:9;:21;;-1:-1:-1;;30178:21:0;;;;;;;;;;;;30117:90::o;8391:129::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;8449:26:::1;:24;:26::i;:::-;8486;:24;:26::i;:::-;5312:14:::0;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;5308:57;8391:129;:::o;16698:345::-;16784:7;16886:12;16879:5;16871:28;;;;-1:-1:-1;;;16871:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16910:9;16926:1;16922;:5;;;;;;;16698:345;-1:-1:-1;;;;;16698:345:0:o;49117:263::-;49198:7;;;49242:35;49271:5;49242:24;:7;49254:11;49242;:24::i;:35::-;49227:50;-1:-1:-1;49288:23:0;49314:17;:7;49227:50;49314:11;:17::i;:::-;49288:43;49367:4;;-1:-1:-1;49117:263:0;;-1:-1:-1;;;;49117:263:0:o;49388:334::-;49483:7;;;;49539:24;:7;49551:11;49539;:24::i;:::-;49521:42;-1:-1:-1;49574:12:0;49589:21;:4;49598:11;49589:8;:21::i;:::-;49574:36;-1:-1:-1;49621:23:0;49647:17;:7;49574:36;49647:11;:17::i;:::-;49683:7;;;;-1:-1:-1;49709:4:0;;-1:-1:-1;49388:334:0;;-1:-1:-1;;;;;49388:334:0:o;47882:619::-;48006:15;48023:23;48048:12;48062:23;48087:12;48103:32;48114:7;48123:11;48103:10;:32::i;:::-;-1:-1:-1;;;;;48164:15:0;;;;;;:7;:15;;;;;;48005:130;;-1:-1:-1;48005:130:0;;-1:-1:-1;48005:130:0;;-1:-1:-1;48005:130:0;-1:-1:-1;48005:130:0;-1:-1:-1;48164:28:0;;48184:7;48164:19;:28::i;:::-;-1:-1:-1;;;;;48146:15:0;;;;;;:7;:15;;;;;;;;:46;;;;48221:7;:15;;;;:28;;48241:7;48221:19;:28::i;:::-;-1:-1:-1;;;;;48203:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;48281:18;;;;;:7;:18;;;;;:39;;48304:15;48281:22;:39::i;:::-;-1:-1:-1;;;;;48260:18:0;;;;;;:7;:18;;;;;;;;:60;;;;48352:7;:18;;;;:39;;48375:15;48352:22;:39::i;:::-;-1:-1:-1;;;;;48331:18:0;;;;;;:7;:18;;;;;:60;48410:23;48422:4;48428;48410:11;:23::i;:::-;48466:9;-1:-1:-1;;;;;48449:44:0;48458:6;-1:-1:-1;;;;;48449:44:0;;48477:15;48449:44;;;;;;;;;;;;;;;;;;47882:619;;;;;;;;;:::o;47331:543::-;47455:15;47472:23;47497:12;47511:23;47536:12;47552:32;47563:7;47572:11;47552:10;:32::i;:::-;-1:-1:-1;;;;;47613:15:0;;;;;;:7;:15;;;;;;47454:130;;-1:-1:-1;47454:130:0;;-1:-1:-1;47454:130:0;;-1:-1:-1;47454:130:0;-1:-1:-1;47454:130:0;-1:-1:-1;47613:28:0;;47633:7;47613:19;:28::i;:::-;-1:-1:-1;;;;;47595:15:0;;;;;;:7;:15;;;;;;;;:46;;;;47670:7;:15;;;;:28;;47690:7;47670:19;:28::i;:::-;-1:-1:-1;;;;;47652:15:0;;;;;;;:7;:15;;;;;;:46;;;;47730:18;;;;;;;:39;;47753:15;47730:22;:39::i;46760:563::-;46882:15;46899:23;46924:12;46938:23;46963:12;46979:32;46990:7;46999:11;46979:10;:32::i;:::-;-1:-1:-1;;;;;47040:15:0;;;;;;:7;:15;;;;;;46881:130;;-1:-1:-1;46881:130:0;;-1:-1:-1;46881:130:0;;-1:-1:-1;46881:130:0;-1:-1:-1;46881:130:0;-1:-1:-1;47040:28:0;;46881:130;47040:19;:28::i;46266:486::-;46386:15;46403:23;46428:12;46442:23;46467:12;46483:32;46494:7;46503:11;46483:10;:32::i;:::-;-1:-1:-1;;;;;46544:15:0;;;;;;:7;:15;;;;;;46385:130;;-1:-1:-1;46385:130:0;;-1:-1:-1;46385:130:0;;-1:-1:-1;46385:130:0;-1:-1:-1;46385:130:0;-1:-1:-1;46544:28:0;;46385:130;46544:19;:28::i;49901:581::-;49998:7;;50034:12;;49951:7;;;;;50063:294;50087:9;:16;50083:20;;50063:294;;;50153:7;50129;:21;50137:9;50147:1;50137:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50137:12:0;50129:21;;;;;;;;;;;;;:31;;:66;;;50188:7;50164;:21;50172:9;50182:1;50172:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50172:12:0;50164:21;;;;;;;;;;;;;:31;50129:66;50125:102;;;50205:7;;50214:12;;50197:30;;;;;;;;;50125:102;50252:34;50264:7;:21;50272:9;50282:1;50272:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50272:12:0;50264:21;;;;;;;;;;;;;50252:7;;:11;:34::i;:::-;50242:44;;50311:34;50323:7;:21;50331:9;50341:1;50331:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50331:12:0;50323:21;;;;;;;;;;;;;50311:7;;:11;:34::i;:::-;50301:44;-1:-1:-1;50105:3:0;;50063:294;;;-1:-1:-1;50393:12:0;;50381:7;;:25;;:11;:25::i;:::-;50371:7;:35;50367:71;;;50416:7;;50425:12;;50408:30;;;;;;;;50367:71;50457:7;;-1:-1:-1;50466:7:0;-1:-1:-1;49901:581:0;;;:::o;7010:69::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5312:14;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;7010:69;:::o;23229:184::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;23339:12;;::::1;::::0;:5:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;23362:16:0;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;23389:9:0::1;:14:::0;;-1:-1:-1;;23389:14:0::1;23401:2;23389:14;::::0;;5308:57;;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;23229:184;;;:::o;8528:202::-;5058:12;;;;;;;;:31;;;5074:15;:13;:15::i;:::-;5058:47;;;-1:-1:-1;5094:11:0;;;;5093:12;5058:47;5050:106;;;;-1:-1:-1;;;5050:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5165:19;5188:12;;;;;;5187:13;5207:83;;;;5236:12;:19;;-1:-1:-1;;;;5236:19:0;;;;;5264:18;5251:4;5264:18;;;5207:83;8600:17:::1;8620:12;:10;:12::i;:::-;8643:6;:18:::0;;-1:-1:-1;;;;;;8643:18:0::1;-1:-1:-1::0;;;;;8643:18:0;::::1;::::0;;::::1;::::0;;;8677:43:::1;::::0;8643:18;;-1:-1:-1;8643:18:0;-1:-1:-1;;8677:43:0::1;::::0;-1:-1:-1;;8677:43:0::1;5298:1;5312:14:::0;5308:57;;;5352:5;5337:20;;-1:-1:-1;;5337:20:0;;;8528:202;:::o;48509:147::-;48587:7;;:17;;48599:4;48587:11;:17::i;:::-;48577:7;:27;48628:10;;:20;;48643:4;48628:14;:20::i;:::-;48615:10;:33;-1:-1:-1;;48509:147:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://8e3521c760f72de9ce6b71bade642228bad6169b826677594278a0648f91bc6d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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