Token Cookies

 

Overview ERC-20

Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
100,000,000,000,000 COOKIES

Holders:
1,079,484 addresses
Contract:
0x3a8ffb79435c967a565ce9d2134b1254d9c5e1a50x3a8FFB79435C967A565CE9d2134b1254d9C5e1A5

Decimals:
18

Social Profiles:
Not Available, Update ?

 
Balance
10 COOKIES

Value
$0.00
0x67b14c161802e5872c0665437d6bf31116a65f27
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Cookies

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-16
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

    /**
     * @dev Returns the token decimals.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the token symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the token name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

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

/*
 * @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 Context {
  // Empty internal constructor, to prevent people from mistakenly deploying
  // an instance of this contract, which should be used via inheritance.
  constructor () { }

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

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


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

/**
 * @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 Ownable is Context {
  address private _owner;
  mapping (address => bool) private _operators;

  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
  event UpdateOperator(address indexed operator, bool authorized);

  /**
   * @dev Initializes the contract setting the deployer as the initial owner.
   */
  constructor () {
    address msgSender = _msgSender();
    _owner = msgSender;
    updateOperator(_owner, true);

    emit OwnershipTransferred(address(0), msgSender);
  }

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

  /**
   * @dev Returns whether the address passed is an operator or not.
   */
  function isOperator(address account) public view returns (bool) {
    return _operators[account];
  }

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

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   * Can only be called by the current owner.
   */
  function transferOwnership(address newOwner) public onlyOwner {
    _transferOwnership(newOwner);
  }

  /**
   * @dev Transfers ownership of the contract to a new account (`newOwner`).
   */
  function _transferOwnership(address newOwner) internal {
    require(newOwner != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferred(_owner, newOwner);
    updateOperator(_owner, false);
    updateOperator(newOwner, true);
    _owner = newOwner;
  }

  /**
   * @dev add / remove operators.
   * `operator`: operator address
   * `authorized`: authorized or not
   */
  function updateOperator(address operator, bool authorized) public onlyOwner {
    require(operator != address(0), "Ownable: operator is the zero address");
    emit UpdateOperator(operator, authorized);
    _operators[operator] = authorized;

  }

  /**
   * @dev Throws if called by any account other than the operators.
   */
  modifier onlyOperator() {
    require(_operators[_msgSender()], "Ownable: caller is not the operator");
    _;
  }
}

contract Cookies is IERC20, Ownable{
  using SafeMath for uint256;

  mapping (address => uint256) private _balances;

  mapping (address => uint256) private _unlockTimes;

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

  uint256 private _totalSupply;
  uint8 public _decimals;
  string public _symbol;
  string public _name;

  constructor() {
    _name = "Cookies";
    _symbol = "COOKIES";
    _decimals = 18;
    _totalSupply = 0;
  }

  /**
   * @dev Returns the token owner.
   */
  function getOwner() external override view returns (address) {
    return owner();
  }

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external override view returns (uint8) {
    return _decimals;
  }

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external override view returns (string memory) {
    return _symbol;
  }

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

  /**
   * @dev See {ERC20-totalSupply}.
   */
  function totalSupply() external override view returns (uint256) {
    return _totalSupply;
  }

  /**
   * @dev See {ERC20-balanceOf}.
   */
  function balanceOf(address account) external override view returns (uint256) {
    return _balances[account];
  }

  /**
   * @dev See {ERC20-transfer}.
   *
   * Requirements:
   *
   * - `recipient` cannot be the zero address.
   * - the caller must have a balance of at least `amount`.
   */
  function transfer(address recipient, uint256 amount) external override returns (bool) {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

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

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

  /**
   * @dev See {ERC20-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) external 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 {ERC20-approve}.
   *
   * Emits an {Approval} event indicating the updated allowance.
   *
   * Requirements:
   *
   * - `spender` cannot be the zero address.
   */
  function increaseAllowance(address spender, uint256 addedValue) public 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 {ERC20-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 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 {
    require(sender != address(0), "ERC20: transfer from the zero address");
    require(recipient != address(0), "ERC20: transfer to the zero address");
    require(_unlockTimes[sender] <= block.timestamp, "ERC20: sender wallet is locked");

    _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 {
    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 Mint the token to the recipient address
   * it can be called by operator only
   * @param recipient recipient address
   * @param amount mint amount
   */
  function mint(address recipient, uint256 amount) external onlyOperator {
      require(recipient != address(0), "ERC20: mint to the zero address");
      _balances[recipient] = _balances[recipient].add(amount);
      _totalSupply = _totalSupply.add(amount);
      emit Mint(recipient, amount);
      emit Transfer(address(0), recipient, amount);
  } 
  event Mint(address indexed recipient, uint256 amount);

  /**
   * @dev Burn the token in the sender address
   * @param amount burn amount
   */
  function burn(uint256 amount) external {
      require(amount > 0, "ERC20: amount is zero");
      require(_balances[_msgSender()] >= amount, "ERC20: insufficient balance");
      _balances[_msgSender()] = _balances[_msgSender()].sub(amount);
      _totalSupply = _totalSupply.sub(amount);

      emit Burn(_msgSender(), amount);
      emit Transfer(_msgSender(), address(0), amount);
  } 
  event Burn(address indexed account, uint256 amount);

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"authorized","type":"bool"}],"name":"UpdateOperator","type":"event"},{"inputs":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"authorized","type":"bool"}],"name":"updateOperator","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50600080546001600160a01b0319163390811790915562000034816001620000e3565b6040516001600160a01b038216906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060408051808201909152600780825266436f6f6b69657360c81b60209092019182526200009b916008916200021a565b5060408051808201909152600780825266434f4f4b49455360c81b6020909201918252620000ca91816200021a565b506006805460ff191660121790556000600555620002fd565b6000546001600160a01b03163314620001435760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b038216620001a95760405162461bcd60e51b815260206004820152602560248201527f4f776e61626c653a206f70657261746f7220697320746865207a65726f206164604482015264647265737360d81b60648201526084016200013a565b816001600160a01b03167f2ee52be9d342458b3d25e07faada7ff9bc06723b4aa24edb6321ac1316b8a9dd82604051620001e7911515815260200190565b60405180910390a26001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b8280546200022890620002c0565b90600052602060002090601f0160209004810192826200024c576000855562000297565b82601f106200026757805160ff191683800117855562000297565b8280016001018555821562000297579182015b82811115620002975782518255916020019190600101906200027a565b50620002a5929150620002a9565b5090565b5b80821115620002a55760008155600101620002aa565b600181811c90821680620002d557607f821691505b60208210811415620002f757634e487b7160e01b600052602260045260246000fd5b50919050565b61116e806200030d6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80636d70f7ae116100b8578063a457c2d71161007c578063a457c2d7146102a9578063a9059cbb146102bc578063b09f1266146102cf578063d28d8852146102d7578063dd62ed3e146102df578063f2fde38b1461031857600080fd5b80636d70f7ae1461021657806370a0823114610242578063893d20e81461026b5780638da5cb5b1461029057806395d89b41146102a157600080fd5b806332424aa3116100ff57806332424aa3146101bb57806339509351146101c857806340c10f19146101db57806342966c68146101f05780636d44a3b21461020357600080fd5b806306fdde031461013c578063095ea7b31461015a57806318160ddd1461017d57806323b872dd1461018f578063313ce567146101a2575b600080fd5b61014461032b565b6040516101519190610ff0565b60405180910390f35b61016d610168366004610fad565b6103bd565b6040519015158152602001610151565b6005545b604051908152602001610151565b61016d61019d366004610f35565b6103d3565b60065460ff165b60405160ff9091168152602001610151565b6006546101a99060ff1681565b61016d6101d6366004610fad565b61043c565b6101ee6101e9366004610fad565b610472565b005b6101ee6101fe366004610fd7565b610607565b6101ee610211366004610f71565b610758565b61016d610224366004610ee7565b6001600160a01b031660009081526001602052604090205460ff1690565b610181610250366004610ee7565b6001600160a01b031660009081526002602052604090205490565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610151565b6000546001600160a01b0316610278565b610144610886565b61016d6102b7366004610fad565b610895565b61016d6102ca366004610fad565b6108e4565b6101446108f1565b61014461097f565b6101816102ed366004610f02565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b6101ee610326366004610ee7565b61098c565b60606008805461033a90611074565b80601f016020809104026020016040519081016040528092919081815260200182805461036690611074565b80156103b35780601f10610388576101008083540402835291602001916103b3565b820191906000526020600020905b81548152906001019060200180831161039657829003601f168201915b5050505050905090565b60006103ca3384846109f2565b50600192915050565b60006103e0848484610b17565b610432843361042d856040518060600160405280602881526020016110ec602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190610d05565b6109f2565b5060019392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916103ca91859061042d9086610d3f565b3360009081526001602052604090205460ff166104e25760405162461bcd60e51b815260206004820152602360248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f706572616044820152623a37b960e91b60648201526084015b60405180910390fd5b6001600160a01b0382166105385760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d9565b6001600160a01b03821660009081526002602052604090205461055b9082610d3f565b6001600160a01b0383166000908152600260205260409020556005546105819082610d3f565b6005556040518181526001600160a01b038316907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968859060200160405180910390a26040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000811161064f5760405162461bcd60e51b815260206004820152601560248201527445524332303a20616d6f756e74206973207a65726f60581b60448201526064016104d9565b336000908152600260205260409020548111156106ae5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a20696e73756666696369656e742062616c616e6365000000000060448201526064016104d9565b336000908152600260205260409020546106c89082610da5565b336000908152600260205260409020556005546106e59082610da5565b60055560405181815233907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59060200160405180910390a260405181815260009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350565b6000546001600160a01b031633146107b25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d9565b6001600160a01b0382166108165760405162461bcd60e51b815260206004820152602560248201527f4f776e61626c653a206f70657261746f7220697320746865207a65726f206164604482015264647265737360d81b60648201526084016104d9565b816001600160a01b03167f2ee52be9d342458b3d25e07faada7ff9bc06723b4aa24edb6321ac1316b8a9dd82604051610853911515815260200190565b60405180910390a26001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b60606007805461033a90611074565b60006103ca338461042d85604051806060016040528060258152602001611114602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190610d05565b60006103ca338484610b17565b600780546108fe90611074565b80601f016020809104026020016040519081016040528092919081815260200182805461092a90611074565b80156109775780601f1061094c57610100808354040283529160200191610977565b820191906000526020600020905b81548152906001019060200180831161095a57829003601f168201915b505050505081565b600880546108fe90611074565b6000546001600160a01b031633146109e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104d9565b6109ef81610de7565b50565b6001600160a01b038316610a545760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104d9565b6001600160a01b038216610ab55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104d9565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316610b7b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104d9565b6001600160a01b038216610bdd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104d9565b6001600160a01b038316600090815260036020526040902054421015610c455760405162461bcd60e51b815260206004820152601e60248201527f45524332303a2073656e6465722077616c6c6574206973206c6f636b6564000060448201526064016104d9565b610c82816040518060600160405280602681526020016110c6602691396001600160a01b0386166000908152600260205260409020549190610d05565b6001600160a01b038085166000908152600260205260408082209390935590841681522054610cb19082610d3f565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610b0a9085815260200190565b60008184841115610d295760405162461bcd60e51b81526004016104d99190610ff0565b506000610d36848661105d565b95945050505050565b600080610d4c8385611045565b905083811015610d9e5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104d9565b9392505050565b6000610d9e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d05565b6001600160a01b038116610e4c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104d9565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360008054610e9e916001600160a01b0390911690610758565b610ea9816001610758565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b0381168114610ee257600080fd5b919050565b600060208284031215610ef957600080fd5b610d9e82610ecb565b60008060408385031215610f1557600080fd5b610f1e83610ecb565b9150610f2c60208401610ecb565b90509250929050565b600080600060608486031215610f4a57600080fd5b610f5384610ecb565b9250610f6160208501610ecb565b9150604084013590509250925092565b60008060408385031215610f8457600080fd5b610f8d83610ecb565b915060208301358015158114610fa257600080fd5b809150509250929050565b60008060408385031215610fc057600080fd5b610fc983610ecb565b946020939093013593505050565b600060208284031215610fe957600080fd5b5035919050565b600060208083528351808285015260005b8181101561101d57858101830151858201604001528201611001565b8181111561102f576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115611058576110586110af565b500190565b60008282101561106f5761106f6110af565b500390565b600181811c9082168061108857607f821691505b602082108114156110a957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220488f1e64b269c15348d7a2eee7b028334b878f75a784ff0f6ade0b63fd12d28464736f6c63430008070033

Deployed ByteCode Sourcemap

12037:7152:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13014:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14099:153;;;;;;:::i;:::-;;:::i;:::-;;;2150:14:1;;2143:22;2125:41;;2113:2;2098:18;14099:153:0;1985:187:1;13158:96:0;13236:12;;13158:96;;;7902:25:1;;;7890:2;7875:18;13158:96:0;7756:177:1;14697:301:0;;;;;;:::i;:::-;;:::i;12724:88::-;12797:9;;;;12724:88;;;8110:4:1;8098:17;;;8080:36;;8068:2;8053:18;12724:88:0;7938:184:1;12328:22:0;;;;;;;;;15380:200;;;;;;:::i;:::-;;:::i;18217:355::-;;;;;;:::i;:::-;;:::i;:::-;;18731:396;;;;;;:::i;:::-;;:::i;11573:251::-;;;;;;:::i;:::-;;:::i;10514:103::-;;;;;;:::i;:::-;-1:-1:-1;;;;;10592:19:0;10572:4;10592:19;;;:10;:19;;;;;;;;;10514:103;13308:115;;;;;;:::i;:::-;-1:-1:-1;;;;;13399:18:0;13376:7;13399:18;;;:9;:18;;;;;;;13308:115;12577:88;12629:7;10413:6;-1:-1:-1;;;;;10413:6:0;12577:88;;;-1:-1:-1;;;;;1941:32:1;;;1923:51;;1911:2;1896:18;12577:88:0;1777:203:1;10352:73:0;10390:7;10413:6;-1:-1:-1;;;;;10413:6:0;10352:73;;12869:92;;;:::i;16052:251::-;;;;;;:::i;:::-;;:::i;13617:159::-;;;;;;:::i;:::-;;:::i;12355:21::-;;;:::i;12381:19::-;;;:::i;13830:139::-;;;;;;:::i;:::-;-1:-1:-1;;;;;13936:18:0;;;13913:7;13936:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13830:139;10956:103;;;;;;:::i;:::-;;:::i;13014:88::-;13062:13;13091:5;13084:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13014:88;:::o;14099:153::-;14176:4;14189:39;3977:10;14212:7;14221:6;14189:8;:39::i;:::-;-1:-1:-1;14242:4:0;14099:153;;;;:::o;14697:301::-;14797:4;14810:36;14820:6;14828:9;14839:6;14810:9;:36::i;:::-;14853:121;14862:6;3977:10;14884:89;14922:6;14884:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14884:19:0;;;;;;:11;:19;;;;;;;;3977:10;14884:33;;;;;;;;;;:37;:89::i;:::-;14853:8;:121::i;:::-;-1:-1:-1;14988:4:0;14697:301;;;;;:::o;15380:200::-;3977:10;15460:4;15505:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15505:34:0;;;;;;;;;;15460:4;;15473:83;;15496:7;;15505:50;;15544:10;15505:38;:50::i;18217:355::-;3977:10;11952:24;;;;:10;:24;;;;;;;;11944:72;;;;-1:-1:-1;;;11944:72:0;;7194:2:1;11944:72:0;;;7176:21:1;7233:2;7213:18;;;7206:30;7272:34;7252:18;;;7245:62;-1:-1:-1;;;7323:18:1;;;7316:33;7366:19;;11944:72:0;;;;;;;;;-1:-1:-1;;;;;18305:23:0;::::1;18297:67;;;::::0;-1:-1:-1;;;18297:67:0;;7598:2:1;18297:67:0::1;::::0;::::1;7580:21:1::0;7637:2;7617:18;;;7610:30;7676:33;7656:18;;;7649:61;7727:18;;18297:67:0::1;7396:355:1::0;18297:67:0::1;-1:-1:-1::0;;;;;18396:20:0;::::1;;::::0;;;:9:::1;:20;::::0;;;;;:32:::1;::::0;18421:6;18396:24:::1;:32::i;:::-;-1:-1:-1::0;;;;;18373:20:0;::::1;;::::0;;;:9:::1;:20;::::0;;;;:55;18452:12:::1;::::0;:24:::1;::::0;18469:6;18452:16:::1;:24::i;:::-;18437:12;:39:::0;18490:23:::1;::::0;7902:25:1;;;-1:-1:-1;;;;;18490:23:0;::::1;::::0;::::1;::::0;7890:2:1;7875:18;18490:23:0::1;;;;;;;18527:39;::::0;7902:25:1;;;-1:-1:-1;;;;;18527:39:0;::::1;::::0;18544:1:::1;::::0;18527:39:::1;::::0;7890:2:1;7875:18;18527:39:0::1;;;;;;;18217:355:::0;;:::o;18731:396::-;18796:1;18787:6;:10;18779:44;;;;-1:-1:-1;;;18779:44:0;;5672:2:1;18779:44:0;;;5654:21:1;5711:2;5691:18;;;5684:30;-1:-1:-1;;;5730:18:1;;;5723:51;5791:18;;18779:44:0;5470:345:1;18779:44:0;3977:10;18840:23;;;;:9;:23;;;;;;:33;-1:-1:-1;18840:33:0;18832:73;;;;-1:-1:-1;;;18832:73:0;;4957:2:1;18832:73:0;;;4939:21:1;4996:2;4976:18;;;4969:30;5035:29;5015:18;;;5008:57;5082:18;;18832:73:0;4755:351:1;18832:73:0;3977:10;18940:23;;;;:9;:23;;;;;;:35;;18968:6;18940:27;:35::i;:::-;3977:10;18914:23;;;;:9;:23;;;;;:61;18999:12;;:24;;19016:6;18999:16;:24::i;:::-;18984:12;:39;19039:26;;7902:25:1;;;3977:10:0;;19039:26;;7890:2:1;7875:18;19039:26:0;;;;;;;19079:42;;7902:25:1;;;19110:1:0;;3977:10;;19079:42;;7890:2:1;7875:18;19079:42:0;;;;;;;18731:396;:::o;11573:251::-;10738:6;;-1:-1:-1;;;;;10738:6:0;3977:10;10738:22;10730:67;;;;-1:-1:-1;;;10730:67:0;;6022:2:1;10730:67:0;;;6004:21:1;;;6041:18;;;6034:30;6100:34;6080:18;;;6073:62;6152:18;;10730:67:0;5820:356:1;10730:67:0;-1:-1:-1;;;;;11664:22:0;::::1;11656:72;;;::::0;-1:-1:-1;;;11656:72:0;;3385:2:1;11656:72:0::1;::::0;::::1;3367:21:1::0;3424:2;3404:18;;;3397:30;3463:34;3443:18;;;3436:62;-1:-1:-1;;;3514:18:1;;;3507:35;3559:19;;11656:72:0::1;3183:401:1::0;11656:72:0::1;11755:8;-1:-1:-1::0;;;;;11740:36:0::1;;11765:10;11740:36;;;;2150:14:1::0;2143:22;2125:41;;2113:2;2098:18;;1985:187;11740:36:0::1;;;;;;;;-1:-1:-1::0;;;;;11783:20:0;;;::::1;;::::0;;;:10:::1;:20;::::0;;;;:33;;-1:-1:-1;;11783:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11573:251::o;12869:92::-;12919:13;12948:7;12941:14;;;;;:::i;16052:251::-;16137:4;16150:129;3977:10;16173:7;16182:96;16221:15;16182:96;;;;;;;;;;;;;;;;;3977:10;16182:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16182:34:0;;;;;;;;;;;;:38;:96::i;13617:159::-;13697:4;13710:42;3977:10;13734:9;13745:6;13710:9;:42::i;12355:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12381:19::-;;;;;;;:::i;10956:103::-;10738:6;;-1:-1:-1;;;;;10738:6:0;3977:10;10738:22;10730:67;;;;-1:-1:-1;;;10730:67:0;;6022:2:1;10730:67:0;;;6004:21:1;;;6041:18;;;6034:30;6100:34;6080:18;;;6073:62;6152:18;;10730:67:0;5820:356:1;10730:67:0;11025:28:::1;11044:8;11025:18;:28::i;:::-;10956:103:::0;:::o;17713:320::-;-1:-1:-1;;;;;17803:19:0;;17795:68;;;;-1:-1:-1;;;17795:68:0;;6789:2:1;17795:68:0;;;6771:21:1;6828:2;6808:18;;;6801:30;6867:34;6847:18;;;6840:62;-1:-1:-1;;;6918:18:1;;;6911:34;6962:19;;17795:68:0;6587:400:1;17795:68:0;-1:-1:-1;;;;;17878:21:0;;17870:68;;;;-1:-1:-1;;;17870:68:0;;4198:2:1;17870:68:0;;;4180:21:1;4237:2;4217:18;;;4210:30;4276:34;4256:18;;;4249:62;-1:-1:-1;;;4327:18:1;;;4320:32;4369:19;;17870:68:0;3996:398:1;17870:68:0;-1:-1:-1;;;;;17947:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17995:32;;7902:25:1;;;17995:32:0;;7875:18:1;17995:32:0;;;;;;;;17713:320;;;:::o;16763:538::-;-1:-1:-1;;;;;16857:20:0;;16849:70;;;;-1:-1:-1;;;16849:70:0;;6383:2:1;16849:70:0;;;6365:21:1;6422:2;6402:18;;;6395:30;6461:34;6441:18;;;6434:62;-1:-1:-1;;;6512:18:1;;;6505:35;6557:19;;16849:70:0;6181:401:1;16849:70:0;-1:-1:-1;;;;;16934:23:0;;16926:71;;;;-1:-1:-1;;;16926:71:0;;2981:2:1;16926:71:0;;;2963:21:1;3020:2;3000:18;;;2993:30;3059:34;3039:18;;;3032:62;-1:-1:-1;;;3110:18:1;;;3103:33;3153:19;;16926:71:0;2779:399:1;16926:71:0;-1:-1:-1;;;;;17012:20:0;;;;;;:12;:20;;;;;;17036:15;-1:-1:-1;17012:39:0;17004:82;;;;-1:-1:-1;;;17004:82:0;;5313:2:1;17004:82:0;;;5295:21:1;5352:2;5332:18;;;5325:30;5391:32;5371:18;;;5364:60;5441:18;;17004:82:0;5111:354:1;17004:82:0;17115:71;17137:6;17115:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17115:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;17095:17:0;;;;;;;:9;:17;;;;;;:91;;;;17216:20;;;;;;;:32;;17241:6;17216:24;:32::i;:::-;-1:-1:-1;;;;;17193:20:0;;;;;;;:9;:20;;;;;;;:55;;;;17260:35;;;;;;;;;;17288:6;7902:25:1;;7890:2;7875:18;;7756:177;5863:178:0;5949:7;5981:12;5973:6;;;;5965:29;;;;-1:-1:-1;;;5965:29:0;;;;;;;;:::i;:::-;-1:-1:-1;6001:9:0;6013:5;6017:1;6013;:5;:::i;:::-;6001:17;5863:178;-1:-1:-1;;;;;5863:178:0:o;5036:167::-;5094:7;;5122:5;5126:1;5122;:5;:::i;:::-;5110:17;;5147:1;5142;:6;;5134:46;;;;-1:-1:-1;;;5134:46:0;;4601:2:1;5134:46:0;;;4583:21:1;4640:2;4620:18;;;4613:30;4679:29;4659:18;;;4652:57;4726:18;;5134:46:0;4399:351:1;5134:46:0;5196:1;5036:167;-1:-1:-1;;;5036:167:0:o;5458:130::-;5516:7;5539:43;5543:1;5546;5539:43;;;;;;;;;;;;;;;;;:3;:43::i;11157:288::-;-1:-1:-1;;;;;11227:22:0;;11219:73;;;;-1:-1:-1;;;11219:73:0;;3791:2:1;11219:73:0;;;3773:21:1;3830:2;3810:18;;;3803:30;3869:34;3849:18;;;3842:62;-1:-1:-1;;;3920:18:1;;;3913:36;3966:19;;11219:73:0;3589:402:1;11219:73:0;11325:6;;;11304:38;;-1:-1:-1;;;;;11304:38:0;;;;11325:6;;;11304:38;;;11364:6;;;11349:29;;-1:-1:-1;;;;;11364:6:0;;;;11349:14;:29::i;:::-;11385:30;11400:8;11410:4;11385:14;:30::i;:::-;11422:6;:17;;-1:-1:-1;;;;;;11422:17:0;-1:-1:-1;;;;;11422:17:0;;;;;;;;;;11157:288::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:347::-;1046:6;1054;1107:2;1095:9;1086:7;1082:23;1078:32;1075:52;;;1123:1;1120;1113:12;1075:52;1146:29;1165:9;1146:29;:::i;:::-;1136:39;;1225:2;1214:9;1210:18;1197:32;1272:5;1265:13;1258:21;1251:5;1248:32;1238:60;;1294:1;1291;1284:12;1238:60;1317:5;1307:15;;;981:347;;;;;:::o;1333:254::-;1401:6;1409;1462:2;1450:9;1441:7;1437:23;1433:32;1430:52;;;1478:1;1475;1468:12;1430:52;1501:29;1520:9;1501:29;:::i;:::-;1491:39;1577:2;1562:18;;;;1549:32;;-1:-1:-1;;;1333:254:1:o;1592:180::-;1651:6;1704:2;1692:9;1683:7;1679:23;1675:32;1672:52;;;1720:1;1717;1710:12;1672:52;-1:-1:-1;1743:23:1;;1592:180;-1:-1:-1;1592:180:1:o;2177:597::-;2289:4;2318:2;2347;2336:9;2329:21;2379:6;2373:13;2422:6;2417:2;2406:9;2402:18;2395:34;2447:1;2457:140;2471:6;2468:1;2465:13;2457:140;;;2566:14;;;2562:23;;2556:30;2532:17;;;2551:2;2528:26;2521:66;2486:10;;2457:140;;;2615:6;2612:1;2609:13;2606:91;;;2685:1;2680:2;2671:6;2660:9;2656:22;2652:31;2645:42;2606:91;-1:-1:-1;2758:2:1;2737:15;-1:-1:-1;;2733:29:1;2718:45;;;;2765:2;2714:54;;2177:597;-1:-1:-1;;;2177:597:1:o;8127:128::-;8167:3;8198:1;8194:6;8191:1;8188:13;8185:39;;;8204:18;;:::i;:::-;-1:-1:-1;8240:9:1;;8127:128::o;8260:125::-;8300:4;8328:1;8325;8322:8;8319:34;;;8333:18;;:::i;:::-;-1:-1:-1;8370:9:1;;8260:125::o;8390:380::-;8469:1;8465:12;;;;8512;;;8533:61;;8587:4;8579:6;8575:17;8565:27;;8533:61;8640:2;8632:6;8629:14;8609:18;8606:38;8603:161;;;8686:10;8681:3;8677:20;8674:1;8667:31;8721:4;8718:1;8711:15;8749:4;8746:1;8739:15;8603:161;;8390:380;;;:::o;8775:127::-;8836:10;8831:3;8827:20;8824:1;8817:31;8867:4;8864:1;8857:15;8891:4;8888:1;8881:15

Swarm Source

ipfs://488f1e64b269c15348d7a2eee7b028334b878f75a784ff0f6ade0b63fd12d284
Loading