Token Spice

 

Overview ERC-20

Price
$0.00 @ 0.000000 FTM
Fully Diluted Market Cap
Total Supply:
57,896,044,618,658,100,000,000,000,000,000,000,000,000,000,000,000,000,000,000.513768 SFI

Holders:
348 addresses
Balance
19,628,966,301,070.17724648748282813 SFI

Value
$703,698,441,893,366.00 ( ~2,915,072,253,079,400.0000 FTM) [0.0000%]
0x0000000000000000000000000000000000000000
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Saffron is an asset collateralization platform where liquidity providers have access to dynamic exposure by selecting customized risk and return profiles.

Market

Volume (24H):$11,316.01
Market Capitalization:$2,848,829.00
Circulating Supply:80,045.00 SFI
Market Data Source: Coinmarketcap


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

Contract Source Code Verified (Exact Match)

Contract Name:
SFI

Compiler Version
v0.7.1+commit.f4a555be

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-22
*/

// File: contracts/lib/IERC20.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.7.1;

/**
 * @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: contracts/interfaces/IERC2612.sol


pragma solidity ^0.7.1;

/**
 * @dev Interface of the ERC2612 standard as defined in the EIP.
 *
 * Adds the {permit} method, which can be used to change one's
 * {IERC20-allowance} without having to send a transaction, by signing a
 * message. This allows users to spend tokens without having to hold Ether.
 *
 * See https://eips.ethereum.org/EIPS/eip-2612.
 */
interface IERC2612 {
    /**
     * @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens,
     * given `owner`'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;

    /**
     * @dev Returns the current ERC2612 nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);
}

// File: contracts/interfaces/IWERC10.sol


pragma solidity ^0.7.1;


/// @dev Wrapped ERC-20 v10 (WERC10) is an ERC-20 ERC-20 wrapper. You can `deposit` ERC-20 and obtain an WERC10 balance which can then be operated as an ERC-20 token. You can
/// `withdraw` ERC-20 from WERC10, which will then burn WERC10 token in your wallet. The amount of WERC10 token in any wallet is always identical to the
/// balance of ERC-20 deposited minus the ERC-20 withdrawn with that specific wallet.
interface IWERC10 is IERC20, IERC2612 {

    /// @dev Sets `value` as allowance of `spender` account over caller account's WERC10 token,
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// Emits {Approval} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);

    /// @dev Moves `value` WERC10 token from caller's account to account (`to`), 
    /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
    /// A transfer to `address(0)` triggers an ERC-20 withdraw matching the sent WERC10 token in favor of caller.
    /// Emits {Transfer} event.
    /// Returns boolean value indicating whether operation succeeded.
    /// Requirements:
    ///   - caller account must have at least `value` WERC10 token.
    /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
    function transferAndCall(address to, uint value, bytes calldata data) external returns (bool);
}

// File: contracts/SFI.sol


pragma solidity ^0.7.1;




interface ITransferReceiver {
    function onTokenTransfer(address, uint, bytes calldata) external returns (bool);
}

interface IApprovalReceiver {
    function onTokenApproval(address, uint, bytes calldata) external returns (bool);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
  using Address for address;

  function safeTransfer(IERC20 token, address to, uint value) internal {
    callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
  }

  function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
    callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
  }

  function safeApprove(IERC20 token, address spender, uint value) internal {
    require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
           );
           callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
  }
  function callOptionalReturn(IERC20 token, bytes memory data) private {
    require(address(token).isContract(), "SafeERC20: call to non-contract");

    // solhint-disable-next-line avoid-low-level-calls
    (bool success, bytes memory returndata) = address(token).call(data);
    require(success, "SafeERC20: low-level call failed");

    if (returndata.length > 0) { // Return data is optional
      // solhint-disable-next-line max-line-length
      require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
    }
  }
}

contract SFI is IWERC10 {
  using SafeERC20 for IERC20;

  string public name;
  string public symbol;
  uint8  public immutable decimals;

  address public governance;
  uint256 public MAX_TOKENS = 100000 ether;

  bytes32 public constant PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
  bytes32 public constant TRANSFER_TYPEHASH = keccak256("Transfer(address owner,address to,uint256 value,uint256 nonce,uint256 deadline)");
  bytes32 public immutable DOMAIN_SEPARATOR;

  address private _oldOwner;
  address private _newOwner;
  uint256 private _newOwnerEffectiveTime;

  /// @dev Records amount of WERC10 token owned by account.
  mapping (address => uint256) public override balanceOf;
  uint256 private _totalSupply;

  modifier onlyOwner() {
    require(msg.sender == owner(), "only owner");
    _;
  }
      
  function owner() public view returns (address) {
    if (block.timestamp >= _newOwnerEffectiveTime) {
      return _newOwner;
    }
    return _oldOwner;
  }

  function changeDCRMOwner(address newOwner) public onlyOwner returns (bool) {
    require(newOwner != address(0), "new owner is the zero address");
    _oldOwner = owner();
    _newOwner = newOwner;
    _newOwnerEffectiveTime = block.timestamp + 2*24*3600;
    emit LogChangeDCRMOwner(_oldOwner, _newOwner, _newOwnerEffectiveTime);
    return true;
  }

  function Swapin(bytes32 txhash, address account, uint256 amount) public onlyOwner returns (bool) {
    _mint(account, amount);
    emit LogSwapin(txhash, account, amount);
    return true;
  }

  function Swapout(uint256 amount, address bindaddr) public returns (bool) {
    require(bindaddr != address(0), "bind address is the zero address");
    _burn(msg.sender, amount);
    emit LogSwapout(msg.sender, bindaddr, amount);
    return true;
  }

  /// @dev Records current ERC2612 nonce for account. This value must be included whenever signature is generated for {permit}.
  /// Every successful call to {permit} increases account's nonce by one. This prevents signature from being used multiple times.
  mapping (address => uint256) public override nonces;

  /// @dev Records number of WERC10 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}.
  mapping (address => mapping (address => uint256)) public override allowance;

  event LogChangeDCRMOwner(address indexed oldOwner, address indexed newOwner, uint indexed effectiveTime);
  event LogSwapin(bytes32 indexed txhash, address indexed account, uint amount);
  event LogSwapout(address indexed account, address indexed bindaddr, uint amount);

  constructor (string memory _name, string memory _symbol, uint8 _decimals, address _owner) {
    name = _name;
    symbol = _symbol;
    decimals = _decimals;

    // Initial governance is Saffron Deployer
    governance = msg.sender;

    _newOwner = _owner;
    _newOwnerEffectiveTime = block.timestamp;

    uint256 chainId;
    assembly {chainId := chainid()}
    DOMAIN_SEPARATOR = keccak256(
      abi.encode(
        keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
        keccak256(bytes(name)),
        keccak256(bytes("1")),
        chainId,
        address(this)));
  }

  function set_governance(address to) external {
    require(msg.sender == governance, "must be governance");
    governance = to;
  }

  /// @dev Returns the total supply of WERC10 token as the ETH held in this contract.
  function totalSupply() external view override returns (uint256) {
    return _totalSupply;
  }

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

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

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

    balanceOf[account] -= amount;
    _totalSupply -= amount;
    emit Transfer(account, address(0), amount);
  }

  /// @dev Sets `value` as allowance of `spender` account over caller account's WERC10 token.
  /// Emits {Approval} event.
  /// Returns boolean value indicating whether operation succeeded.
  function approve(address spender, uint256 value) external override returns (bool) {
    // _approve(msg.sender, spender, value);
    allowance[msg.sender][spender] = value;
    emit Approval(msg.sender, spender, value);

    return true;
  }

  /// @dev Sets `value` as allowance of `spender` account over caller account's WERC10 token,
  /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
  /// Emits {Approval} event.
  /// Returns boolean value indicating whether operation succeeded.
  /// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677.
  function approveAndCall(address spender, uint256 value, bytes calldata data) external override returns (bool) {
    // _approve(msg.sender, spender, value);
    allowance[msg.sender][spender] = value;
    emit Approval(msg.sender, spender, value);

    return IApprovalReceiver(spender).onTokenApproval(msg.sender, value, data);
  }

  /// @dev Sets `value` as allowance of `spender` account over `owner` account's WERC10 token, given `owner` account's signed approval.
  /// Emits {Approval} event.
  /// Requirements:
  ///   - `deadline` must be timestamp in future.
  ///   - `v`, `r` and `s` must be valid `secp256k1` signature from `owner` account over EIP712-formatted function arguments.
  ///   - the signature must use `owner` account's current nonce (see {nonces}).
  ///   - the signer cannot be zero address and must be `owner` account.
  /// For more information on signature format, see https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section].
  /// WERC10 token implementation adapted from https://github.com/albertocuestacanada/ERC20Permit/blob/master/contracts/ERC20Permit.sol.
  function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override {
    require(block.timestamp <= deadline, "WERC10: Expired permit");

    bytes32 hashStruct = keccak256(
      abi.encode(
        PERMIT_TYPEHASH,
        target,
        spender,
        value,
        nonces[target]++,
        deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        // _approve(owner, spender, value);
        allowance[target][spender] = value;
        emit Approval(target, spender, value);
  }

  function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool) {
    require(block.timestamp <= deadline, "WERC10: Expired permit");

    bytes32 hashStruct = keccak256(
      abi.encode(
        TRANSFER_TYPEHASH,
        target,
        to,
        value,
        nonces[target]++,
        deadline));

        require(verifyEIP712(target, hashStruct, v, r, s) || verifyPersonalSign(target, hashStruct, v, r, s));

        require(to != address(0) || to != address(this));

        uint256 balance = balanceOf[target];
        require(balance >= value, "WERC10: transfer amount exceeds balance");

        balanceOf[target] = balance - value;
        balanceOf[to] += value;
        emit Transfer(target, to, value);

        return true;
  }

  function verifyEIP712(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal view returns (bool) {
    bytes32 hash = keccak256(
      abi.encodePacked(
        "\x19\x01",
        DOMAIN_SEPARATOR,
        hashStruct));
        address signer = ecrecover(hash, v, r, s);
        return (signer != address(0) && signer == target);
  }

  function verifyPersonalSign(address target, bytes32 hashStruct, uint8 v, bytes32 r, bytes32 s) internal pure returns (bool) {
    bytes32 hash = prefixed(hashStruct);
    address signer = ecrecover(hash, v, r, s);
    return (signer != address(0) && signer == target);
  }

  // Builds a prefixed hash to mimic the behavior of eth_sign.
  function prefixed(bytes32 hash) internal pure returns (bytes32) {
    return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
  }

  /// @dev Moves `value` WERC10 token from caller's account to account (`to`).
  /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WERC10 token in favor of caller.
  /// Emits {Transfer} event.
  /// Returns boolean value indicating whether operation succeeded.
  /// Requirements:
  ///   - caller account must have at least `value` WERC10 token.
  function transfer(address to, uint256 value) external override returns (bool) {
    require(to != address(0) || to != address(this));
    uint256 balance = balanceOf[msg.sender];
    require(balance >= value, "WERC10: transfer amount exceeds balance");

    balanceOf[msg.sender] = balance - value;
    balanceOf[to] += value;
    emit Transfer(msg.sender, to, value);

    return true;
  }

  /// @dev Moves `value` WERC10 token from account (`from`) to account (`to`) using allowance mechanism.
  /// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`.
  /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WERC10 token in favor of caller.
  /// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`),
  /// unless allowance is set to `type(uint256).max`
  /// Emits {Transfer} event.
  /// Returns boolean value indicating whether operation succeeded.
  /// Requirements:
  ///   - `from` account must have at least `value` balance of WERC10 token.
  ///   - `from` account must have approved caller to spend at least `value` of WERC10 token, unless `from` and caller are the same account.
  function transferFrom(address from, address to, uint256 value) external override returns (bool) {
    require(to != address(0) || to != address(this));
    if (from != msg.sender) {
      // _decreaseAllowance(from, msg.sender, value);
      uint256 allowed = allowance[from][msg.sender];
      if (allowed != type(uint256).max) {
        require(allowed >= value, "WERC10: request exceeds allowance");
        uint256 reduced = allowed - value;
        allowance[from][msg.sender] = reduced;
        emit Approval(from, msg.sender, reduced);
      }
    }

    uint256 balance = balanceOf[from];
    require(balance >= value, "WERC10: transfer amount exceeds balance");

    balanceOf[from] = balance - value;
    balanceOf[to] += value;
    emit Transfer(from, to, value);

    return true;
  }

  /// @dev Moves `value` WERC10 token from caller's account to account (`to`), 
  /// after which a call is executed to an ERC677-compliant contract with the `data` parameter.
  /// A transfer to `address(0)` triggers an ETH withdraw matching the sent WERC10 token in favor of caller.
  /// Emits {Transfer} event.
  /// Returns boolean value indicating whether operation succeeded.
  /// Requirements:
  ///   - caller account must have at least `value` WERC10 token.
  /// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677.
  function transferAndCall(address to, uint value, bytes calldata data) external override returns (bool) {
    require(to != address(0) || to != address(this));

    uint256 balance = balanceOf[msg.sender];
    require(balance >= value, "WERC10: transfer amount exceeds balance");

    balanceOf[msg.sender] = balance - value;
    balanceOf[to] += value;
    emit Transfer(msg.sender, to, value);

    return ITransferReceiver(to).onTokenTransfer(msg.sender, value, data);
  }

  event ErcSwept(address who, address to, address token, uint256 amount);
  function erc_sweep(address _token, address _to) public {
    require(msg.sender == governance, "must be governance");

    IERC20 tkn = IERC20(_token);
    uint256 tBal = tkn.balanceOf(address(this));
    tkn.safeTransfer(_to, tBal);

    emit ErcSwept(msg.sender, _to, _token, tBal);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ErcSwept","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"}],"name":"LogChangeDCRMOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapin","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"bindaddr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSwapout","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":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txhash","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Swapin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"bindaddr","type":"address"}],"name":"Swapout","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TRANSFER_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"approveAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeDCRMOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"erc_sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"set_governance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"transferAndCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"transferWithPermit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60c060405269152d02c7e14af68000006003553480156200001f57600080fd5b5060405162001f7838038062001f78833981810160405260808110156200004557600080fd5b81019080805160405193929190846401000000008211156200006657600080fd5b9083019060208201858111156200007c57600080fd5b82516401000000008111828201881017156200009757600080fd5b82525081516020918201929091019080838360005b83811015620000c6578181015183820152602001620000ac565b50505050905090810190601f168015620000f45780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011857600080fd5b9083019060208201858111156200012e57600080fd5b82516401000000008111828201881017156200014957600080fd5b82525081516020918201929091019080838360005b83811015620001785781810151838201526020016200015e565b50505050905090810190601f168015620001a65780820380516001836020036101000a031916815260200191505b506040908152602082810151929091015186519294509250620001cf9160009187019062000350565b508251620001e590600190602086019062000350565b5060f882901b7fff000000000000000000000000000000000000000000000000000000000000001660805260028054336001600160a01b0319918216178255600580549091166001600160a01b038416179055426006556040516000805446937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9391829184916101006001821615026000190116048015620002c25780601f106200029f576101008083540402835291820191620002c2565b820191906000526020600020905b815481529060010190602001808311620002ad575b505060408051918290038220828201825260018352603160f81b602093840152815180840196909652858201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606086015260808501959095523060a08086019190915285518086038201815260c0909501909552835193019290922090925250620003ec945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200039357805160ff1916838001178555620003c3565b82800160010185558215620003c3579182015b82811115620003c3578251825591602001919060010190620003a6565b50620003d1929150620003d5565b5090565b5b80821115620003d15760008155600101620003d6565b60805160f81c60a051611b606200041860003980610ad45280611569525080610ab05250611b606000f3fe608060405234801561001057600080fd5b50600436106101725760003560e01c8063605629d6116100de578063a9059cbb11610097578063d505accf11610071578063d505accf14610569578063dd62ed3e146105ba578063ec126c77146105e8578063f47c84c51461061a57610172565b8063a9059cbb14610492578063b524f3a5146104be578063cae9ca51146104e457610172565b8063605629d6146103b9578063628d6cba1461040a57806370a08231146104365780637ecebe001461045c5780638da5cb5b1461048257806395d89b411461048a57610172565b80632b666fcf116101305780632b666fcf146102b457806330adf81f146102e2578063313ce567146102ea5780633644e515146103085780634000aea0146103105780635aa6e6751461039557610172565b8062bf26f41461017757806306fdde0314610191578063070313fa1461020e578063095ea7b31461023657806318160ddd1461027657806323b872dd1461027e575b600080fd5b61017f610622565b60408051918252519081900360200190f35b610199610646565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101d35781810151838201526020016101bb565b50505050905090810190601f1680156102005780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102346004803603602081101561022457600080fd5b50356001600160a01b03166106d4565b005b6102626004803603604081101561024c57600080fd5b506001600160a01b03813516906020013561074a565b604080519115158252519081900360200190f35b61017f61079e565b6102626004803603606081101561029457600080fd5b506001600160a01b038135811691602081013590911690604001356107a5565b610234600480360360408110156102ca57600080fd5b506001600160a01b0381358116916020013516610953565b61017f610a8a565b6102f2610aae565b6040805160ff9092168252519081900360200190f35b61017f610ad2565b6102626004803603606081101561032657600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561035657600080fd5b82018360208201111561036857600080fd5b8035906020019184600183028401116401000000008311171561038a57600080fd5b509092509050610af6565b61039d610c82565b604080516001600160a01b039092168252519081900360200190f35b610262600480360360e08110156103cf57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135610c91565b6102626004803603604081101561042057600080fd5b50803590602001356001600160a01b0316610e77565b61017f6004803603602081101561044c57600080fd5b50356001600160a01b0316610f27565b61017f6004803603602081101561047257600080fd5b50356001600160a01b0316610f39565b61039d610f4b565b610199610f78565b610262600480360360408110156104a857600080fd5b506001600160a01b038135169060200135610fd2565b610262600480360360208110156104d457600080fd5b50356001600160a01b03166110a7565b610262600480360360608110156104fa57600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561052a57600080fd5b82018360208201111561053c57600080fd5b8035906020019184600183028401116401000000008311171561055e57600080fd5b5090925090506111db565b610234600480360360e081101561057f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356112e5565b61017f600480360360408110156105d057600080fd5b506001600160a01b038135811691602001351661143a565b610262600480360360608110156105fe57600080fd5b508035906001600160a01b036020820135169060400135611457565b61017f611507565b7f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd5981565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106cc5780601f106106a1576101008083540402835291602001916106cc565b820191906000526020600020905b8154815290600101906020018083116106af57829003601f168201915b505050505081565b6002546001600160a01b03163314610728576040805162461bcd60e51b81526020600482015260126024820152716d75737420626520676f7665726e616e636560701b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b336000818152600a602090815260408083206001600160a01b03871680855290835281842086905581518681529151939490939092600080516020611a99833981519152928290030190a350600192915050565b6008545b90565b60006001600160a01b0383161515806107c757506001600160a01b0383163014155b6107d057600080fd5b6001600160a01b038416331461089d576001600160a01b0384166000908152600a60209081526040808320338452909152902054600019811461089b578281101561084c5760405162461bcd60e51b8152600401808060200182810382526021815260200180611ae36021913960400191505060405180910390fd5b6001600160a01b0385166000818152600a6020908152604080832033808552908352928190208786039081905581518181529151909492600080516020611a99833981519152928290030190a3505b505b6001600160a01b038416600090815260076020526040902054828110156108f55760405162461bcd60e51b8152600401808060200182810382526027815260200180611b046027913960400191505060405180910390fd5b6001600160a01b038086166000818152600760209081526040808320888703905593881680835291849020805488019055835187815293519193600080516020611a58833981519152929081900390910190a3506001949350505050565b6002546001600160a01b031633146109a7576040805162461bcd60e51b81526020600482015260126024820152716d75737420626520676f7665726e616e636560701b604482015290519081900360640190fd5b604080516370a0823160e01b8152306004820152905183916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156109f257600080fd5b505afa158015610a06573d6000803e3d6000fd5b505050506040513d6020811015610a1c57600080fd5b50519050610a346001600160a01b038316848361150d565b604080513381526001600160a01b0380861660208301528616818301526060810183905290517f2c4e64c7c0957a81c0076a0a3f3c7d9f0a5d6158292071c794436f829d12cfb79181900360800190a150505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160a01b038516151580610b1857506001600160a01b0385163014155b610b2157600080fd5b3360009081526007602052604090205484811015610b705760405162461bcd60e51b8152600401808060200182810382526027815260200180611b046027913960400191505060405180910390fd5b33600081815260076020908152604080832089860390556001600160a01b038a168084529281902080548a01905580518981529051929392600080516020611a58833981519152929181900390910190a3856001600160a01b031663a4c0ed36338787876040518563ffffffff1660e01b815260040180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b158015610c4c57600080fd5b505af1158015610c60573d6000803e3d6000fd5b505050506040513d6020811015610c7657600080fd5b50519695505050505050565b6002546001600160a01b031681565b600084421115610ce1576040805162461bcd60e51b815260206004820152601660248201527515d15490cc4c0e88115e1c1a5c9959081c195c9b5a5d60521b604482015290519081900360640190fd5b6001600160a01b0380891660008181526009602090815260409182902080546001810190915582517f42ce63790c28229c123925d83266e77c04d28784552ab68b350a9003226cbd598184015280840194909452938b166060840152608083018a905260a083019390935260c08083018990528151808403909101815260e090920190528051910120610d778982878787611564565b80610d8a5750610d8a8982878787611663565b610d9357600080fd5b6001600160a01b038816151580610db357506001600160a01b0388163014155b610dbc57600080fd5b6001600160a01b03891660009081526007602052604090205487811015610e145760405162461bcd60e51b8152600401808060200182810382526027815260200180611b046027913960400191505060405180910390fd5b6001600160a01b03808b1660008181526007602090815260408083208d87039055938d168083529184902080548d01905583518c815293519193600080516020611a58833981519152929081900390910190a35060019998505050505050505050565b60006001600160a01b038216610ed4576040805162461bcd60e51b815260206004820181905260248201527f62696e64206164647265737320697320746865207a65726f2061646472657373604482015290519081900360640190fd5b610ede33846116cd565b6040805184815290516001600160a01b0384169133917f6b616089d04950dc06c45c6dd787d657980543f89651aec47924752c7d16c8889181900360200190a350600192915050565b60076020526000908152604090205481565b60096020526000908152604090205481565b60006006544210610f6857506005546001600160a01b03166107a2565b506004546001600160a01b031690565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156106cc5780601f106106a1576101008083540402835291602001916106cc565b60006001600160a01b038316151580610ff457506001600160a01b0383163014155b610ffd57600080fd5b336000908152600760205260409020548281101561104c5760405162461bcd60e51b8152600401808060200182810382526027815260200180611b046027913960400191505060405180910390fd5b33600081815260076020908152604080832087860390556001600160a01b0388168084529281902080548801905580518781529051929392600080516020611a58833981519152929181900390910190a35060019392505050565b60006110b1610f4b565b6001600160a01b0316336001600160a01b031614611103576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6001600160a01b03821661115e576040805162461bcd60e51b815260206004820152601d60248201527f6e6577206f776e657220697320746865207a65726f2061646472657373000000604482015290519081900360640190fd5b611166610f4b565b600480546001600160a01b03199081166001600160a01b039384161791829055600580549091168584161790819055426202a300016006819055604051909391821692909116907fe1968d4263a733e2597ef67ea6ad267343bba5f8bf0f99d85190e06b05d824d990600090a4506001919050565b336000818152600a602090815260408083206001600160a01b03891680855290835281842088905581518881529151939490939092600080516020611a99833981519152928290030190a3846001600160a01b031662ba451f338686866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505095505050505050602060405180830381600087803b1580156112b057600080fd5b505af11580156112c4573d6000803e3d6000fd5b505050506040513d60208110156112da57600080fd5b505195945050505050565b83421115611333576040805162461bcd60e51b815260206004820152601660248201527515d15490cc4c0e88115e1c1a5c9959081c195c9b5a5d60521b604482015290519081900360640190fd5b6001600160a01b0380881660008181526009602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938a1660608401526080830189905260a083019390935260c08083018890528151808403909101815260e0909201905280519101206113c98882868686611564565b806113dc57506113dc8882868686611663565b6113e557600080fd5b6001600160a01b038089166000818152600a60209081526040808320948c16808452948252918290208a905581518a81529151600080516020611a998339815191529281900390910190a35050505050505050565b600a60209081526000928352604080842090915290825290205481565b6000611461610f4b565b6001600160a01b0316336001600160a01b0316146114b3576040805162461bcd60e51b815260206004820152600a60248201526937b7363c9037bbb732b960b11b604482015290519081900360640190fd5b6114bd8383611764565b6040805183815290516001600160a01b0385169186917f05d0634fe981be85c22e2942a880821b70095d84e152c3ea3c17a4e4250d9d619181900360200190a35060019392505050565b60035481565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261155f90849061180c565b505050565b6000807f000000000000000000000000000000000000000000000000000000000000000086604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611621573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906116575750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b60008061166f866119ca565b9050600060018287878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611621573d6000803e3d6000fd5b6001600160a01b0382166117125760405162461bcd60e51b8152600401808060200182810382526021815260200180611a786021913960400191505060405180910390fd5b6001600160a01b03821660008181526007602090815260408083208054869003905560088054869003905580518581529051929392600080516020611a58833981519152929181900390910190a35050565b6001600160a01b0382166117bf576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b60088054820190556001600160a01b038216600081815260076020908152604080832080548601905580518581529051600080516020611a58833981519152929181900390910190a35050565b61181e826001600160a01b0316611a1b565b61186f576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106118ad5780518252601f19909201916020918201910161188e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461190f576040519150601f19603f3d011682016040523d82523d6000602084013e611914565b606091505b50915091508161196b576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b8051156119c45780806020019051602081101561198757600080fd5b50516119c45760405162461bcd60e51b815260040180806020018281038252602a815260200180611ab9602a913960400191505060405180910390fd5b50505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590611a4f5750808214155b94935050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f20616464726573738c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645745524331303a2072657175657374206578636565647320616c6c6f77616e63655745524331303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a264697066735822122028c61540adcb41e3a7bf493c7478c9af661df9e19d657a030e7c6b2a251ccdea64736f6c63430007010033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000c564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe0000000000000000000000000000000000000000000000000000000000000005537069636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035346490000000000000000000000000000000000000000000000000000000000

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000c564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe0000000000000000000000000000000000000000000000000000000000000005537069636500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035346490000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Spice
Arg [1] : _symbol (string): SFI
Arg [2] : _decimals (uint8): 18
Arg [3] : _owner (address): 0xc564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 000000000000000000000000c564ee9f21ed8a2d8e7e76c085740d5e4c5fafbe
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 5370696365000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [7] : 5346490000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

8447:13031:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8815:136;;;:::i;:::-;;;;;;;;;;;;;;;;8509:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11840:135;;;;;;;;;;;;;;;;-1:-1:-1;11840:135:0;-1:-1:-1;;;;;11840:135:0;;:::i;:::-;;13436:247;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13436:247:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12068:96;;;:::i;19210:817::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19210:817:0;;;;;;;;;;;;;;;;;:::i;21179:296::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21179:296:0;;;;;;;;;;:::i;8673:137::-;;;:::i;8557:32::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8956:41;;;:::i;20613:485::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20613:485:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20613:485:0;;-1:-1:-1;20613:485:0;-1:-1:-1;20613:485:0;:::i;8596:25::-;;;:::i;:::-;;;;-1:-1:-1;;;;;8596:25:0;;;;;;;;;;;;;;15868:849;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15868:849:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10096:255::-;;;;;;;;;;;;;;;;-1:-1:-1;10096:255:0;;;;;;-1:-1:-1;;;;;10096:255:0;;:::i;9170:54::-;;;;;;;;;;;;;;;;-1:-1:-1;9170:54:0;-1:-1:-1;;;;;9170:54:0;;:::i;10617:51::-;;;;;;;;;;;;;;;;-1:-1:-1;10617:51:0;-1:-1:-1;;;;;10617:51:0;;:::i;9362:162::-;;;:::i;8532:20::-;;;:::i;17975:400::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17975:400:0;;;;;;;;:::i;9530:358::-;;;;;;;;;;;;;;;;-1:-1:-1;9530:358:0;-1:-1:-1;;;;;9530:358:0;;:::i;14084:338::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14084:338:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14084:338:0;;-1:-1:-1;14084:338:0;-1:-1:-1;14084:338:0;:::i;15219:643::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15219:643:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10826:75::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10826:75:0;;;;;;;;;;:::i;9894:196::-;;;;;;;;;;;;;;;;-1:-1:-1;9894:196:0;;;-1:-1:-1;;;;;9894:196:0;;;;;;;;;;:::i;8626:40::-;;;:::i;8815:136::-;8859:92;8815:136;:::o;8509:18::-;;;;;;;;;;;;;;;-1:-1:-1;;8509:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11840:135::-;11914:10;;-1:-1:-1;;;;;11914:10:0;11900;:24;11892:55;;;;;-1:-1:-1;;;11892:55:0;;;;;;;;;;;;-1:-1:-1;;;11892:55:0;;;;;;;;;;;;;;;11954:10;:15;;-1:-1:-1;;;;;;11954:15:0;-1:-1:-1;;;;;11954:15:0;;;;;;;;;;11840:135::o;13436:247::-;13581:10;13512:4;13571:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;13571:30:0;;;;;;;;;;;:38;;;13621:36;;;;;;;13512:4;;13571:30;;13581:10;;-1:-1:-1;;;;;;;;;;;13621:36:0;;;;;;;-1:-1:-1;13673:4:0;13436:247;;;;:::o;12068:96::-;12146:12;;12068:96;;:::o;19210:817::-;19300:4;-1:-1:-1;;;;;19321:16:0;;;;;:39;;-1:-1:-1;;;;;;19341:19:0;;19355:4;19341:19;;19321:39;19313:48;;;;;;-1:-1:-1;;;;;19372:18:0;;19380:10;19372:18;19368:409;;-1:-1:-1;;;;;19474:15:0;;19456;19474;;;:9;:15;;;;;;;;19490:10;19474:27;;;;;;;;-1:-1:-1;;19514:28:0;;19510:260;;19574:5;19563:7;:16;;19555:62;;;;-1:-1:-1;;;19555:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19672:15:0;;19628;19672;;;:9;:15;;;;;;;;19688:10;19672:27;;;;;;;;;;19646:15;;;19672:37;;;;19725:35;;;;;;;19646:15;;19672;-1:-1:-1;;;;;;;;;;;19725:35:0;;;;;;;19510:260;;19368:409;;-1:-1:-1;;;;;19803:15:0;;19785;19803;;;:9;:15;;;;;;19833:16;;;;19825:68;;;;-1:-1:-1;;;19825:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19902:15:0;;;;;;;:9;:15;;;;;;;;19920;;;19902:33;;19942:13;;;;;;;;;;:22;;;;;;19976:25;;;;;;;19942:13;;-1:-1:-1;;;;;;;;;;;19976:25:0;;;;;;;;;;-1:-1:-1;20017:4:0;;19210:817;-1:-1:-1;;;;19210:817:0:o;21179:296::-;21263:10;;-1:-1:-1;;;;;21263:10:0;21249;:24;21241:55;;;;;-1:-1:-1;;;21241:55:0;;;;;;;;;;;;-1:-1:-1;;;21241:55:0;;;;;;;;;;;;;;;21354:28;;;-1:-1:-1;;;21354:28:0;;21376:4;21354:28;;;;;;21325:6;;21305:10;;-1:-1:-1;;;;;21354:13:0;;;;;:28;;;;;;;;;;;;;;:13;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21354:28:0;;-1:-1:-1;21389:27:0;-1:-1:-1;;;;;21389:16:0;;21406:3;21354:28;21389:16;:27::i;:::-;21430:39;;;21439:10;21430:39;;-1:-1:-1;;;;;21430:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21179:296;;;;:::o;8673:137::-;8715:95;8673:137;:::o;8557:32::-;;;:::o;8956:41::-;;;:::o;20613:485::-;20710:4;-1:-1:-1;;;;;20731:16:0;;;;;:39;;-1:-1:-1;;;;;;20751:19:0;;20765:4;20751:19;;20731:39;20723:48;;;;;;20808:10;20780:15;20798:21;;;:9;:21;;;;;;20834:16;;;;20826:68;;;;-1:-1:-1;;;20826:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20913:10;20903:21;;;;:9;:21;;;;;;;;20927:15;;;20903:39;;-1:-1:-1;;;;;20949:13:0;;;;;;;;;:22;;;;;;20983:31;;;;;;;20949:13;;20913:10;-1:-1:-1;;;;;;;;;;;20983:31:0;;;;;;;;;;21048:2;-1:-1:-1;;;;;21030:37:0;;21068:10;21080:5;21087:4;;21030:62;;;;;;;;;;;;;-1:-1:-1;;;;;21030:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21030:62:0;;20613:485;-1:-1:-1;;;;;;20613:485:0:o;8596:25::-;;;-1:-1:-1;;;;;8596:25:0;;:::o;15868:849::-;16006:4;16046:8;16027:15;:27;;16019:62;;;;;-1:-1:-1;;;16019:62:0;;;;;;;;;;;;-1:-1:-1;;;16019:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16224:14:0;;;16090:18;16224:14;;;:6;:14;;;;;;;;;:16;;;;;;;;16129:131;;8859:92;16129:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16111:150;;;;;16282:41;16178:6;16111:150;16315:1;16318;16321;16282:12;:41::i;:::-;:92;;;;16327:47;16346:6;16354:10;16366:1;16369;16372;16327:18;:47::i;:::-;16274:101;;;;;;-1:-1:-1;;;;;16396:16:0;;;;;:39;;-1:-1:-1;;;;;;16416:19:0;;16430:4;16416:19;;16396:39;16388:48;;;;;;-1:-1:-1;;;;;16467:17:0;;16449:15;16467:17;;;:9;:17;;;;;;16503:16;;;;16495:68;;;;-1:-1:-1;;;16495:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16576:17:0;;;;;;;:9;:17;;;;;;;;16596:15;;;16576:35;;16622:13;;;;;;;;;;:22;;;;;;16660:27;;;;;;;16622:13;;-1:-1:-1;;;;;;;;;;;16660:27:0;;;;;;;;;;-1:-1:-1;16707:4:0;;15868:849;-1:-1:-1;;;;;;;;;15868:849:0:o;10096:255::-;10163:4;-1:-1:-1;;;;;10184:22:0;;10176:67;;;;;-1:-1:-1;;;10176:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10250:25;10256:10;10268:6;10250:5;:25::i;:::-;10287:40;;;;;;;;-1:-1:-1;;;;;10287:40:0;;;10298:10;;10287:40;;;;;;;;;-1:-1:-1;10341:4:0;10096:255;;;;:::o;9170:54::-;;;;;;;;;;;;;:::o;10617:51::-;;;;;;;;;;;;;:::o;9362:162::-;9400:7;9439:22;;9420:15;:41;9416:80;;-1:-1:-1;9479:9:0;;-1:-1:-1;;;;;9479:9:0;9472:16;;9416:80;-1:-1:-1;9509:9:0;;-1:-1:-1;;;;;9509:9:0;9362:162;:::o;8532:20::-;;;;;;;;;;;;;;;-1:-1:-1;;8532:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17975:400;18047:4;-1:-1:-1;;;;;18068:16:0;;;;;:39;;-1:-1:-1;;;;;;18088:19:0;;18102:4;18088:19;;18068:39;18060:48;;;;;;18143:10;18115:15;18133:21;;;:9;:21;;;;;;18169:16;;;;18161:68;;;;-1:-1:-1;;;18161:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18248:10;18238:21;;;;:9;:21;;;;;;;;18262:15;;;18238:39;;-1:-1:-1;;;;;18284:13:0;;;;;;;;;:22;;;;;;18318:31;;;;;;;18284:13;;18248:10;-1:-1:-1;;;;;;;;;;;18318:31:0;;;;;;;;;;-1:-1:-1;18365:4:0;;17975:400;-1:-1:-1;;;17975:400:0:o;9530:358::-;9599:4;9314:7;:5;:7::i;:::-;-1:-1:-1;;;;;9300:21:0;:10;-1:-1:-1;;;;;9300:21:0;;9292:44;;;;;-1:-1:-1;;;9292:44:0;;;;;;;;;;;;-1:-1:-1;;;9292:44:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;9620:22:0;::::1;9612:64;;;::::0;;-1:-1:-1;;;9612:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;9695:7;:5;:7::i;:::-;9683:9;:19:::0;;-1:-1:-1;;;;;;9683:19:0;;::::1;-1:-1:-1::0;;;;;9683:19:0;;::::1;;::::0;;;;9709:9:::1;:20:::0;;;;::::1;::::0;;::::1;;::::0;;;;9761:15:::1;9779:9;9761:27;9736:22;:52:::0;;;9800:64:::1;::::0;9761:27;;9830:9;;::::1;::::0;9819;;::::1;::::0;9800:64:::1;::::0;-1:-1:-1;;9800:64:0::1;-1:-1:-1::0;9878:4:0::1;9530:358:::0;;;:::o;14084:338::-;14257:10;14188:4;14247:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;14247:30:0;;;;;;;;;;;:38;;;14297:36;;;;;;;14188:4;;14247:30;;14257:10;;-1:-1:-1;;;;;;;;;;;14297:36:0;;;;;;;14367:7;-1:-1:-1;;;;;14349:42:0;;14392:10;14404:5;14411:4;;14349:67;;;;;;;;;;;;;-1:-1:-1;;;;;14349:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14349:67:0;;14084:338;-1:-1:-1;;;;;14084:338:0:o;15219:643::-;15384:8;15365:15;:27;;15357:62;;;;;-1:-1:-1;;;15357:62:0;;;;;;;;;;;;-1:-1:-1;;;15357:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15565:14:0;;;15428:18;15565:14;;;:6;:14;;;;;;;;;:16;;;;;;;;15467:134;;8715:95;15467:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15449:153;;;;;15623:41;15514:6;15449:153;15656:1;15659;15662;15623:12;:41::i;:::-;:92;;;;15668:47;15687:6;15695:10;15707:1;15710;15713;15668:18;:47::i;:::-;15615:101;;;;;;-1:-1:-1;;;;;15774:17:0;;;;;;;:9;:17;;;;;;;;:26;;;;;;;;;;;;;:34;;;15824:32;;;;;;;-1:-1:-1;;;;;;;;;;;15824:32:0;;;;;;;;;15219:643;;;;;;;;:::o;10826:75::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;9894:196::-;9985:4;9314:7;:5;:7::i;:::-;-1:-1:-1;;;;;9300:21:0;:10;-1:-1:-1;;;;;9300:21:0;;9292:44;;;;;-1:-1:-1;;;9292:44:0;;;;;;;;;;;;-1:-1:-1;;;9292:44:0;;;;;;;;;;;;;;;9998:22:::1;10004:7;10013:6;9998:5;:22::i;:::-;10032:34;::::0;;;;;;;-1:-1:-1;;;;;10032:34:0;::::1;::::0;10042:6;;10032:34:::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;10080:4:0::1;9894:196:::0;;;;;:::o;8626:40::-;;;;:::o;7158:167::-;7260:58;;;-1:-1:-1;;;;;7260:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7260:58:0;-1:-1:-1;;;7260:58:0;;;7234:85;;7253:5;;7234:18;:85::i;:::-;7158:167;;;:::o;16723:363::-;16835:4;16848:12;16929:16;16956:10;16881:86;;;;;;-1:-1:-1;;;16881:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16863:105;;;;;;16848:120;;16979:14;16996:24;17006:4;17012:1;17015;17018;16996:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16996:24:0;;-1:-1:-1;;16996:24:0;;;-1:-1:-1;;;;;;;17039:20:0;;;;;;:40;;;17073:6;-1:-1:-1;;;;;17063:16:0;:6;-1:-1:-1;;;;;17063:16:0;;17039:40;17031:49;16723:363;-1:-1:-1;;;;;;;;16723:363:0:o;17092:276::-;17210:4;17223:12;17238:20;17247:10;17238:8;:20::i;:::-;17223:35;;17265:14;17282:24;17292:4;17298:1;17301;17304;17282:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12983:252;-1:-1:-1;;;;;13055:21:0;;13047:67;;;;-1:-1:-1;;;13047:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13123:18:0;;;;;;:9;:18;;;;;;;;:28;;;;;;;13158:12;:22;;;;;;;13192:37;;;;;;;13123:18;;;-1:-1:-1;;;;;;;;;;;13192:37:0;;;;;;;;;;12983:252;;:::o;12425:250::-;-1:-1:-1;;;;;12497:21:0;;12489:65;;;;;-1:-1:-1;;;12489:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12563:12;:22;;;;;;-1:-1:-1;;;;;12592:18:0;;12563:12;12592:18;;;:9;:18;;;;;;;;:28;;;;;;12632:37;;;;;;;-1:-1:-1;;;;;;;;;;;12632:37:0;;;;;;;;;;12425:250;;:::o;7880:560::-;7964:27;7972:5;-1:-1:-1;;;;;7964:25:0;;:27::i;:::-;7956:71;;;;;-1:-1:-1;;;7956:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8093:12;8107:23;8142:5;-1:-1:-1;;;;;8134:19:0;8154:4;8134:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8134:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8092:67;;;;8174:7;8166:52;;;;;-1:-1:-1;;;8166:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8231:17;;:21;8227:208;;8361:10;8350:30;;;;;;;;;;;;;;;-1:-1:-1;8350:30:0;8342:85;;;;-1:-1:-1;;;8342:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7880:560;;;;:::o;17438:153::-;17526:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17516:69;;;;;;17438:153::o;6722:374::-;6782:4;7005:20;;6848:66;7045:15;;;;;:42;;;7076:11;7064:8;:23;;7045:42;7037:51;6722:374;-1:-1:-1;;;;6722:374:0:o

Swarm Source

ipfs://28c61540adcb41e3a7bf493c7478c9af661df9e19d657a030e7c6b2a251ccdea
Loading