ETH Price: $2,992.17 (-2.18%)
Gas: 3 Gwei

Token

Bellevue Network (BLV)
 

Overview

Max Total Supply

10,116,703,828.615868565569978552 BLV

Holders

763 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
300 BLV

Value
$0.00
0xa33a8b1171941b4eb04a57605dccdeffd4860eb8
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Bellevue Network is a decentralized price-reactive cryptocurrency backed by an integrated, transparent and open source treasury. The in-built treasury plays an important part of the overall success of the project and ensures there's enough funds for accelerated growth.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Token

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-09-28
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
  /**
   * @dev Returns true if `account` is a contract.
   *
   * [IMPORTANT]
   * ====
   * It is unsafe to assume that an address for which this function returns
   * false is an externally-owned account (EOA) and not a contract.
   *
   * Among others, `isContract` will return false for the following
   * types of addresses:
   *
   *  - an externally-owned account
   *  - a contract in construction
   *  - an address where a contract will be created
   *  - an address where a contract lived, but was destroyed
   * ====
   */
  function isContract(address account) internal view returns (bool) {
    // This method relies in extcodesize, which returns 0 for contracts in
    // construction, since the code is only stored at the end of the
    // constructor execution.

    uint256 size;
    // solhint-disable-next-line no-inline-assembly
    assembly { size := extcodesize(account) }
    return size > 0;
  }

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

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

  /**
   * @dev Performs a Solidity function call using a low level `call`. A
   * plain`call` is an unsafe replacement for a function call: use this
   * function instead.
   *
   * If `target` reverts with a revert reason, it is bubbled up by this
   * function (like regular Solidity function calls).
   *
   * Returns the raw returned data. To convert to the expected return value,
   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
   *
   * Requirements:
   *
   * - `target` must be a contract.
   * - calling `target` with `data` must not revert.
   *
   * _Available since v3.1._
   */
  function functionCall(address target, bytes memory data) internal returns (bytes memory) {
    return functionCall(target, data, "Address: low-level call failed");
  }

  /**
   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
   * `errorMessage` as a fallback revert reason when `target` reverts.
   *
   * _Available since v3.1._
   */
  function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
    return _functionCallWithValue(target, data, 0, errorMessage);
  }

  /**
   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
   * but also transferring `value` wei to `target`.
   *
   * Requirements:
   *
   * - the calling contract must have an ETH balance of at least `value`.
   * - the called Solidity function must be `payable`.
   *
   * _Available since v3.1._
   */
  function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
    return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
  }

  /**
   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
   * with `errorMessage` as a fallback revert reason when `target` reverts.
   *
   * _Available since v3.1._
   */
  function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
    require(address(this).balance >= value, "Address: insufficient balance for call");
    return _functionCallWithValue(target, data, value, errorMessage);
  }

  function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
    require(isContract(target), "Address: call to non-contract");

    // solhint-disable-next-line avoid-low-level-calls
    (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
    if (success) {
      return returndata;
    } else {
      // Look for revert reason and bubble it up if present
      if (returndata.length > 0) {
        // The easiest way to bubble the revert reason is using memory via assembly

        // solhint-disable-next-line no-inline-assembly
        assembly {
          let returndata_size := mload(returndata)
          revert(add(32, returndata), returndata_size)
        }
      } else {
        revert(errorMessage);
      }
    }
  }
}

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

}

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

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

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

contract Ownable is Context {
  address private _owner;

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

  /**
   * @dev Initializes the contract setting the deployer as the initial owner.
   */
  constructor () internal {
    address msgSender = _msgSender();
    _owner = msgSender;
    emit OwnershipTransferred(address(0), msgSender);
  }

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

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

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

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

abstract contract StakeBLVToken {
  function transferHook(address sender, address recipient, uint256 amount, uint256 senderBalance, uint256 recipientBalance) external virtual returns (uint256, uint256, uint256);
  function updateMyStakes(address staker, uint256 balance, uint256 totalSupply) external virtual returns (uint256);
}


/**
 * @dev Implementation of the  BLV
 * BLV is a price-reactive cryptocurrency.
 * That is, the inflation rate of the token is wholly dependent on its market activity.
 * Minting does not happen when the price is less than the day prior.
 * When the price is greater than the day prior, the inflation for that day is
 * a function of its price, percent increase, volume, any positive price streaks,
 * and the amount of time any given holder has been holding.
 * In the first iteration, the dev team acts as the price oracle, but in the future, we plan to integrate a Chainlink price oracle.
 */
contract Token is Ownable, IERC20 {
  using SafeMath for uint256;
  using Address for address;

  mapping (address => uint256) private _balances;

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

  uint256 private _totalSupply;

  string public constant _name = "Bellevue Network";
  string public constant _symbol = "BLV";
  uint8 public constant _decimals = 18;

  StakeBLVToken public _stakingContract;

  address public _intervalWatcher;

  address public _teamWallet;
  address public _treasuryWallet;
    
  uint public startTimestamp;
  
  bool public freeze;
  
  bool private _stakingEnabled;
  
  struct Vester {
      uint lastRelease;
      uint balanceRemaining;
      uint balanceInit;
  }
    
  mapping (address => Vester) public vesters;


  modifier onlyWatcher() {
    assert(_msgSender() == _intervalWatcher/*, "Caller must be watcher."*/);
    _;
  }

  modifier onlyStakingContract() {
    require(msg.sender == address(_stakingContract), "Ownable: caller is not the staking contract");
    _;
  }

  event ErrorMessage(string errorMessage);

  constructor () public {
    
    startTimestamp = block.timestamp;

    _stakingEnabled = false;
    _treasuryWallet = 0xF40B0918D6b78fd705F30D92C9626ad218F1aEcE;
    _teamWallet = 0x2BFA783D7f38aAAa997650aE0EfdBDF632288A7F;
    _intervalWatcher = msg.sender;
    
    freeze = false;
    transferOwnership(0x6f3Bdb71C8d42b5a5DEe58b1a66f8a299EC4d216);
    
    _mint(0xb1412DFFBb7db18F8686Ea4787c30cA40BC6D1a8, 1000000E18);
    _mint(0xd1d784920983CdB17EE125887c875548D149E856, 1000000E18);
    _mint(0x2366ff0577e53984Bc0E103c803658DA1Ef7d19A, 425000E18);
    _mint(0x380D463383201f1758a7c59aE569d79bA84D7263, 425000E18);
    _mint(0xf8880975805Fc659C756aBfE879002FDa1470768, 425000E18);
    _mint(0xE20cf34fD6B38689eb68968E90F25CC6B80B16FB, 425000E18);
    _mint(0xa2B9a5f796ef1f68B2aEF0c984F961beD1085500, 425000E18);
    _mint(0x15DD94C2F7A78Be9b7d8711C09083F4F6EFc1029, 425000E18);
    _mint(0xD388BD277F390Cb36A90DEf9771c47869b266BAE, 425000E18);
    _mint(0x93f5af632Ce523286e033f0510E9b3C9710F4489, 425000E18);
    _mint(0x85D72d2D43c7BF149abf2132bDA2992087a9527e, 425000E18);
    _mint(0x4f5304E7CC2efD8a12d92703fF4964A79276a638, 425000E18);
    _mint(0xD733801c2512ce294a34b3a8878365dd30c7d791, 425000E18);
    
    _mint(0x7af6701EF2456F25e22a6e4Bfd70bCdFA0aEeB97, 425000E18);
    _mint(0x41a9A2bb121FE08592678Fc2c6fd0498b914a3c7, 425000E18);
    _mint(0x4530B100BF6400268E22fE64d7548fFaafA8dC39, 425000E18);
    _mint(0xbb257625458a12374daf2AD0c91d5A215732F206, 425000E18);
    _mint(0x84998f375355AE7AE7f60e8ecF1D24ad59948e9a, 425000E18);
    _mint(0x25054f27C9972B341Aee6c0D373A652566075431, 425000E18);
    _mint(0x7Da3c02716676f81790726c91BF4D05f14E98677, 425000E18);
    _mint(0xbbDBD6Bb3C05a7c966c203502e0a5A373E01e103, 425000E18);
    _mint(0x2604afb5A64992e5aBBF25865C9d3387adE92bad, 425000E18);
    _mint(0x4f6EB296cCAC2668640934208538EE8e3d3C846c, 425000E18);
    _mint(0x2F7B7aFbcaC8A70a1E0fe712a644e4621EdBB832, 425000E18);
    _mint(0x0C780749E6d0bE3C64c130450B20C40b843fbEC4, 425000E18);
    
    
    _mint(0xa4e74aE45F53045e07e3189933Bb5B1286BaeD54, 425000E18);
    _mint(0x6766c0Ad04d5aA6B53D8E42738dafBA490B0A7a3, 425000E18);
    _mint(0xC419528eDA383691e1aA13C381D977343CB9E5D0, 425000E18);
    _mint(0x515e4940850c217B8f4f2E3D2bE0aC6A52F17624, 425000E18);
    _mint(0x946C2a67373e64D5B318f9A669fE5664256491d6, 425000E18);
    _mint(0x6CDB0A4902C81E9C63De8c486F31e8d5DDc0A9f7, 425000E18);
    _mint(0x907b4128FF43eD92b14b8145a01e8f9bC6890E3E, 425000E18);
    _mint(0x3481fBA85c1b227Cd401d4ef2e2390f505738B08, 425000E18);
    _mint(0x06C8940CFEc1e9596123a2b0fA965F9E3758422f, 425000E18);
    _mint(0x5AaAEF91F93bE4dE932b8e7324aBBF9f26DAa706, 425000E18);
    _mint(0xEF572FbBdB552A00bdc2a3E3Bc9306df9E9e169d, 425000E18);
    _mint(0xE8609d2608Fb5555cb84e5D03c5B837A116fA8AD, 425000E18);
    
    _mint(0x05BaD2724b1415a8B6B3000a30E37d9C637D7340, 425000E18);
    _mint(0x2b82FEaC8778CE69eBbaE549DcfB558C6024714a, 425000E18);
    _mint(0xDBe24A37f06CAb8C8A786dDF0439ea5cB28e5328, 425000E18);
    _mint(0x318f1cFD866BE8a0835412A02127271B3e0F6485, 425000E18);
    _mint(0x5516F15603707EE1e854E149F0f0E33F443cC9C4, 425000E18);
    _mint(0x7723000de847d13856Aa46993e6D1d499D13af1B, 425000E18);
    _mint(0x76a7aa09e047fc0Cd56d206b986A67772ED936FD, 425000E18);
    _mint(0x4d6f7D3EC5ab66D14a494b4650717e7D44E527bD, 425000E18);
    _mint(0xA3839Cb3b18d0d8372cc1ba8ACb3C693329FD92B, 425000E18);
    _mint(0x7729370DA4bfeE1Ee183eEdD35176fCB20F9E8eb, 425000E18);
    _mint(0xa4b949fb6B2979E383b753f7b086ee1a7adB552a, 425000E18);
    _mint(0xc7861b59e2193424AfC83a83bD65c8B5216c7EB0, 425000E18);
    _mint(0x94054865f83f9Df3fAE7D4B8E6B08b7ff420b0e2, 425000E18);
    
    _mint(0x6766c0Ad04d5aA6B53D8E42738dafBA490B0A7a3, 29125000E18);
    
    
    
    
    vesters[_treasuryWallet] = (Vester(now, 25000000E18, 25000000E18));  // Treasury
    vesters[_teamWallet] = (Vester(now, 25000000E18, 25000000E18));  // Team
    
    
    vesters[0x8Ff5Ceb90FAb0e98fDfB3b9eACdF162dFFAaFeb4] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x48FFB1b31D30b59b54FEe7744fFd2Be62ae40E80] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xa626FDF1F62176EFFB78E00d579E421e67ADa485] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x814035FD80140Af0a5b7502c9b1a10f6eC8aD38A] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x3300D317713938007cFeC35268aaC7d54dB3a85b] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x99D34cAf247fCfB23570D1B29468DB1659604c96] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xFEDED73b3b2b74441C8Bf42218e7Ff24030A9705] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x0793F2c24bDc8353951Dcb9b14D30801bb608421] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x4342e82B94b128fcCBe1bDDF454e51336cC5fde2] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xd62a38Bd99376013D485214CC968322C20A6cC40] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xC419528eDA383691e1aA13C381D977343CB9E5D0] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xdF1cb2e9B48C830154CE6030FFc5E2ce7fD6c328] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x88Eb97E5ECbf1c5b4ecA19aCF659d4724392eD86] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x13f0B3e3351ff54bA8daF733167436D46CBa8623] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x0793F2c24bDc8353951Dcb9b14D30801bb608421] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xd7741872efC695be77C9bc8B7E7AFCF928dd4912] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xbcd670eB38fE7937245324F8a9689c49c7A8e91e] = (Vester(now, 875000E18, 875000E18));
    vesters[0x875e5d68cED80a84F1D0bdE9a864CF387690aBC1] = (Vester(now, 425000E18, 425000E18));
    vesters[0xD61545c9f495Da3d556e0474A102DE3937eB8451] = (Vester(now, 425000E18, 425000E18));
    vesters[0x42415d75FD3Bfc6cD44F232109925e04Fc5610d8] = (Vester(now, 425000E18, 425000E18));
    vesters[0xaC6dE509E1B5c1C619afe64e0dfA567bd5b58503] = (Vester(now, 850000E18, 850000E18));
    vesters[0x88B1fAb25703a07cACd2C9Da4797df2379F43A32] = (Vester(now, 850000E18, 850000E18));
    vesters[0xDfBB98446715dCCFcE6Fc231952d2e16884fD0d5] = (Vester(now, 850000E18, 850000E18));
    vesters[0x7947dD50cF73fdd44dBc8f7A4BE28E490B4D5D1B] = (Vester(now, 850000E18, 850000E18));
    
    vesters[0x6F0AB036b74a8d8263823609858C3F7efB9Ab782] = (Vester(now, 500000E18, 500000E18));
    vesters[0xB6f526ef7820BCA52058Be5c75dC05c7C456d22B] = (Vester(now, 500000E18, 500000E18));
    vesters[0xa3ccA0E4B6C70c2fdFbf95bB35BEA1CA604F7207] = (Vester(now, 750000E18, 750000E18));
    vesters[0x7BE8C8FEF3C323bEBd0338D7DB2F9370f896fecD] = (Vester(now, 750000E18, 750000E18));
    vesters[0x9c10FfeF1AeC731b616cc22fEdECA5d81d61859e] = (Vester(now, 750000E18, 750000E18));
    vesters[0x9F22318d7ceE9e22be01bD3bf64fB9257FB7F4B8] = (Vester(now, 750000E18, 750000E18));
    vesters[0xf4EdFf75aD10030DF1412317ea38Ed84e12Ef41C] = (Vester(now, 750000E18, 750000E18));
    vesters[0xbaFf5f62BF40cbBFC0Be450F11126Fc4e094aAc3] = (Vester(now, 500000E18, 500000E18));
    vesters[0x1C96aFc64A706695A9558E76679f8Bc72e354854] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x0d0D3321bBeAFF438D68Ad58a77fdA6309920E86] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xB016539a2d7A0dFa98237C93AC4AF0f46Ba74BAD] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x66d4bdF37AA4c04c7C66a743396caE3FA2425f79] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x00893fAc04C1F1B6e30847Dcc1F24761271c81c7] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x20d256Ae504F7459532f3711035133624F83C15B] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x082faa352c52365c0B6e0D8F52523Acf8eA511f4] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x0Bbc35b239209C7819bC8e0008FF476DD637DFca] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xb2103ACE0eca26D55dfC827cD59d51DD87Bd0e03] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x80DFbf3cF73f6bbA8B5175976ae8338D4Ced26A7] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xE1aF2f6ba1B34656e72005d1cFc25a80a6248211] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x9E667b5277A38fE2d0f9297447fa7C62d3d6aE69] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x1BAf30992f4F37e0c5909276bA0e1a3F96Eaf9Cb] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xbDfBFd5B4123566D358f69882A5909492049be8A] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x19e61Dbc204BA4A5E3Ef57721c7ab139399df7c6] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x87f84EEc3adAC507372018DA187661726867f316] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x0Cbd15145285B9cd05e95c19cB1E2d1Fdc71Cf90] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x174818EB82C976083591d0eaa720B70498616561] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0x643a7B5Cb05486626594b17280dcb051D2725155] = (Vester(now, 1000000E18, 1000000E18));
    vesters[0xf422c173264dCd512E3CEE0DB4AcB568707C0b8D] = (Vester(now, 850000E18, 850000E18));
    vesters[0xf916D5D0310BFCD0D9B8c43D0a29070670D825f9] = (Vester(now, 850000E18, 850000E18));
    vesters[0xE58Ea0ceD4417f0551Fb82ddF4F6477072DFb430] = (Vester(now, 850000E18, 850000E18));
  }
  
  
  
  function release() public {
      
    if(msg.sender == _treasuryWallet) {
        releaseTreasury();
        return;
    } else if (msg.sender == _teamWallet) {
        releaseTeam();
        return;
    }
    
    Vester storage vester = vesters[msg.sender];
    require(vester.balanceInit > 0 && vester.balanceRemaining > 0, "Timelock: no tokens to release");
    
    if(vester.lastRelease == startTimestamp) {
        uint tokens = mulDiv(vester.balanceInit, 25, 100);
        vester.lastRelease = block.timestamp;
        vester.balanceRemaining = vester.balanceRemaining.sub(tokens);
        _mint(msg.sender, tokens);
        return;
    }
    
    uint daysSinceLast = block.timestamp.sub(vester.lastRelease) / 86400;
    
    require(daysSinceLast >= 30);
    
    uint tokens = mulDiv(vester.balanceInit, 25, 100);
    if(tokens > vester.balanceRemaining) {
        tokens = vester.balanceRemaining;
    }
    vester.lastRelease = block.timestamp;
    vester.balanceRemaining = vester.balanceRemaining.sub(tokens);
    _mint(msg.sender, tokens);
}

    function releaseTreasury() internal {
        Vester storage vester = vesters[_treasuryWallet];
        if(vester.lastRelease == startTimestamp) {
            uint tokens = mulDiv(vester.balanceInit, 25, 100);
            vester.lastRelease = block.timestamp;
            vester.balanceRemaining = vester.balanceRemaining.sub(tokens);
            _mint(_treasuryWallet, tokens);
            return;
        }
        uint daysSinceLast = block.timestamp.sub(vester.lastRelease) / 86400;
        require(daysSinceLast >= 90);
        uint tokens = mulDiv(vester.balanceInit, 25, 100);
        if(tokens > vester.balanceRemaining) {
            tokens = vester.balanceRemaining;
        }
        vester.lastRelease = block.timestamp;
        vester.balanceRemaining = vester.balanceRemaining.sub(tokens);
        _mint(_treasuryWallet, tokens);
    }
    
    function releaseTeam() internal {
        Vester storage vester = vesters[_teamWallet];
        uint daysSinceLast = block.timestamp.sub(vester.lastRelease) / 86400;
        require(daysSinceLast >= 90);
        uint tokens = mulDiv(vester.balanceInit, 25, 100);
        if(tokens > vester.balanceRemaining) {
            tokens = vester.balanceRemaining;
        }
        vester.lastRelease = block.timestamp;
        vester.balanceRemaining = vester.balanceRemaining.sub(tokens);
        _mint(_teamWallet, tokens);
    }


  function updateMyStakes() public {
    require(_stakingEnabled, "Staking is disabled");
    try _stakingContract.updateMyStakes(msg.sender, _balances[msg.sender], _totalSupply) returns (uint256 numTokens) {
      _mint(msg.sender, numTokens);
    } catch Error (string memory error) {
      emit ErrorMessage(error);
    }
  }

  function updateTreasuryWallet(address treasuryWallet) external onlyOwner {
    _treasuryWallet = treasuryWallet;
  }

  function updateIntervalWatcher(address treasuryWatcher) external onlyOwner {
    _intervalWatcher = treasuryWatcher;
  }

  function updateTreasuryStakes() external onlyWatcher {
    require(_stakingEnabled, "Staking is disabled");
    try _stakingContract.updateMyStakes(_treasuryWallet, balanceOf(_treasuryWallet), _totalSupply) returns (uint256 numTokens) {
      _mint(_treasuryWallet, numTokens);
    } catch Error (string memory error) {
      emit ErrorMessage(error);
    }
  }

  function updateTeamStakes() external onlyWatcher {
    require(_stakingEnabled, "Staking is disabled");
    try _stakingContract.updateMyStakes(_teamWallet, balanceOf(_teamWallet), _totalSupply) returns (uint256 numTokens) {
      _mint(_teamWallet, numTokens);
    } catch Error (string memory error) {
      emit ErrorMessage(error);
    }
  }

  function updateStakingContract(StakeBLVToken stakingContract) external onlyOwner {
    _stakingContract = stakingContract;
    _stakingEnabled = true;
  }


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

  /**
   * @dev Returns the symbol of the token, usually a shorter version of the
   * name.
   */
  function symbol() public view returns (string memory) {
    return _symbol;
  }

  /**
   * @dev Returns the number of decimals used to get its user representation.
   * For example, if `decimals` equals `2`, a balance of `505` tokens should
   * be displayed to a user as `5,05` (`505 / 10 ** 2`).
   *
   * Tokens usually opt for a value of 18, imitating the relationship between
   * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is
   * called.
   *
   * NOTE: This information is only used for _display_ purposes: it in
   * no way affects any of the arithmetic of the contract, including
   * {IERC20-balanceOf} and {IERC20-transfer}.
   */
  function decimals() public view returns (uint8) {
    return _decimals;
  }

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

  /**
   * @dev See {IERC20-balanceOf}.
   */
  function balanceOf(address account) public view override returns (uint256) {
    return _balances[account].add(vesters[account].balanceRemaining);
  }
  
  function balanceOfNoVesting(address account) public view returns (uint256) {
    return _balances[account];
  }

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

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

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

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

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

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

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

    if(_stakingEnabled) {
      (uint256 senderBalance, uint256 recipientBalance, uint256 burnAmount) = _stakingContract.transferHook(sender, recipient, amount, _balances[sender], _balances[recipient]);
      _balances[sender] = senderBalance;
      _balances[recipient] = recipientBalance;
      _totalSupply = _totalSupply.sub(burnAmount);
      if (burnAmount > 0) {
        emit Transfer(sender, recipient, amount.sub(burnAmount));
        emit Transfer(sender, address(0), burnAmount);
      } else {
        emit Transfer(sender, recipient, amount);
      }
    } else {
      _balances[sender] = _balances[sender].sub(amount);
      _balances[recipient] = _balances[recipient].add(amount);
      emit Transfer(sender, recipient, amount);
    }
  }


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

    _totalSupply = _totalSupply.add(amount);
    _balances[account] = _balances[account].add(amount);
    emit Transfer(address(0), account, amount);
  }


  function mint(address account, uint256 amount) public onlyStakingContract {
    require(account != address(0), "ERC20: mint to the zero address");

    _totalSupply = _totalSupply.add(amount);
    _balances[account] = _balances[account].add(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) external onlyStakingContract {
    require(account != address(0), "ERC20: burn from the zero address");
    _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
    _totalSupply = _totalSupply.sub(amount);
    emit Transfer(account, address(0), amount);
  }

  function burn(uint256 amount) external {
    _balances[_msgSender()] = _balances[_msgSender()].sub(amount, "ERC20: burn amount exceeds balance");
    _totalSupply = _totalSupply.sub(amount);
    emit Transfer(_msgSender(), address(0), amount);
  }

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

    _allowances[owner][spender] = amount;
    emit Approval(owner, spender, amount);
  }
  
  function updateFreeze(bool _freeze) external onlyOwner {
      freeze = _freeze;
  }
  
      function mulDiv (uint x, uint y, uint z) public pure returns (uint) {
          (uint l, uint h) = fullMul (x, y);
          assert (h < z);
          uint mm = mulmod (x, y, z);
          if (mm > l) h -= 1;
          l -= mm;
          uint pow2 = z & -z;
          z /= pow2;
          l /= pow2;
          l += h * ((-pow2) / pow2 + 1);
          uint r = 1;
          r *= 2 - z * r;
          r *= 2 - z * r;
          r *= 2 - z * r;
          r *= 2 - z * r;
          r *= 2 - z * r;
          r *= 2 - z * r;
          r *= 2 - z * r;
          r *= 2 - z * r;
          return l * r;
    }
    
    function fullMul (uint x, uint y) private pure returns (uint l, uint h) {
          uint mm = mulmod (x, y, uint (-1));
          l = x * y;
          h = mm - l;
          if (mm < l) h -= 1;
    }
}

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":false,"internalType":"string","name":"errorMessage","type":"string"}],"name":"ErrorMessage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"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":[],"name":"_intervalWatcher","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_stakingContract","outputs":[{"internalType":"contract StakeBLVToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"account","type":"address"}],"name":"balanceOfNoVesting","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":"freeze","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"},{"internalType":"uint256","name":"z","type":"uint256"}],"name":"mulDiv","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_freeze","type":"bool"}],"name":"updateFreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasuryWatcher","type":"address"}],"name":"updateIntervalWatcher","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateMyStakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract StakeBLVToken","name":"stakingContract","type":"address"}],"name":"updateStakingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateTeamStakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateTreasuryStakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasuryWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vesters","outputs":[{"internalType":"uint256","name":"lastRelease","type":"uint256"},{"internalType":"uint256","name":"balanceRemaining","type":"uint256"},{"internalType":"uint256","name":"balanceInit","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060006200001e62002a12565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602062004d1d833981519152908290a3504260085560098054600780546001600160a01b031990811673f40b0918d6b78fd705f30d92c9626ad218f1aece17909155600680548216732bfa783d7f38aaaa997650ae0efdbdf632288a7f179055600580549091163317905561ffff19169055620000d7736f3bdb71c8d42b5a5dee58b1a66f8a299ec4d21662002a16565b6200010173b1412dffbb7db18f8686ea4787c30ca40bc6d1a869d3c21bcecceda100000062002b14565b6200012b73d1d784920983cdb17ee125887c875548d149e85669d3c21bcecceda100000062002b14565b62000155732366ff0577e53984bc0e103c803658da1ef7d19a6959ff4bd17d7e97a0000062002b14565b6200017f73380d463383201f1758a7c59ae569d79ba84d72636959ff4bd17d7e97a0000062002b14565b620001a973f8880975805fc659c756abfe879002fda14707686959ff4bd17d7e97a0000062002b14565b620001d373e20cf34fd6b38689eb68968e90f25cc6b80b16fb6959ff4bd17d7e97a0000062002b14565b620001fd73a2b9a5f796ef1f68b2aef0c984f961bed10855006959ff4bd17d7e97a0000062002b14565b620002277315dd94c2f7a78be9b7d8711c09083f4f6efc10296959ff4bd17d7e97a0000062002b14565b6200025173d388bd277f390cb36a90def9771c47869b266bae6959ff4bd17d7e97a0000062002b14565b6200027b7393f5af632ce523286e033f0510e9b3c9710f44896959ff4bd17d7e97a0000062002b14565b620002a57385d72d2d43c7bf149abf2132bda2992087a9527e6959ff4bd17d7e97a0000062002b14565b620002cf734f5304e7cc2efd8a12d92703ff4964a79276a6386959ff4bd17d7e97a0000062002b14565b620002f973d733801c2512ce294a34b3a8878365dd30c7d7916959ff4bd17d7e97a0000062002b14565b62000323737af6701ef2456f25e22a6e4bfd70bcdfa0aeeb976959ff4bd17d7e97a0000062002b14565b6200034d7341a9a2bb121fe08592678fc2c6fd0498b914a3c76959ff4bd17d7e97a0000062002b14565b62000377734530b100bf6400268e22fe64d7548ffaafa8dc396959ff4bd17d7e97a0000062002b14565b620003a173bb257625458a12374daf2ad0c91d5a215732f2066959ff4bd17d7e97a0000062002b14565b620003cb7384998f375355ae7ae7f60e8ecf1d24ad59948e9a6959ff4bd17d7e97a0000062002b14565b620003f57325054f27c9972b341aee6c0d373a6525660754316959ff4bd17d7e97a0000062002b14565b6200041f737da3c02716676f81790726c91bf4d05f14e986776959ff4bd17d7e97a0000062002b14565b6200044973bbdbd6bb3c05a7c966c203502e0a5a373e01e1036959ff4bd17d7e97a0000062002b14565b62000473732604afb5a64992e5abbf25865c9d3387ade92bad6959ff4bd17d7e97a0000062002b14565b6200049d734f6eb296ccac2668640934208538ee8e3d3c846c6959ff4bd17d7e97a0000062002b14565b620004c7732f7b7afbcac8a70a1e0fe712a644e4621edbb8326959ff4bd17d7e97a0000062002b14565b620004f1730c780749e6d0be3c64c130450b20c40b843fbec46959ff4bd17d7e97a0000062002b14565b6200051b73a4e74ae45f53045e07e3189933bb5b1286baed546959ff4bd17d7e97a0000062002b14565b62000545736766c0ad04d5aa6b53d8e42738dafba490b0a7a36959ff4bd17d7e97a0000062002b14565b6200056f73c419528eda383691e1aa13c381d977343cb9e5d06959ff4bd17d7e97a0000062002b14565b6200059973515e4940850c217b8f4f2e3d2be0ac6a52f176246959ff4bd17d7e97a0000062002b14565b620005c373946c2a67373e64d5b318f9a669fe5664256491d66959ff4bd17d7e97a0000062002b14565b620005ed736cdb0a4902c81e9c63de8c486f31e8d5ddc0a9f76959ff4bd17d7e97a0000062002b14565b6200061773907b4128ff43ed92b14b8145a01e8f9bc6890e3e6959ff4bd17d7e97a0000062002b14565b62000641733481fba85c1b227cd401d4ef2e2390f505738b086959ff4bd17d7e97a0000062002b14565b6200066b7306c8940cfec1e9596123a2b0fa965f9e3758422f6959ff4bd17d7e97a0000062002b14565b62000695735aaaef91f93be4de932b8e7324abbf9f26daa7066959ff4bd17d7e97a0000062002b14565b620006bf73ef572fbbdb552a00bdc2a3e3bc9306df9e9e169d6959ff4bd17d7e97a0000062002b14565b620006e973e8609d2608fb5555cb84e5d03c5b837a116fa8ad6959ff4bd17d7e97a0000062002b14565b620007137305bad2724b1415a8b6b3000a30e37d9c637d73406959ff4bd17d7e97a0000062002b14565b6200073d732b82feac8778ce69ebbae549dcfb558c6024714a6959ff4bd17d7e97a0000062002b14565b6200076773dbe24a37f06cab8c8a786ddf0439ea5cb28e53286959ff4bd17d7e97a0000062002b14565b6200079173318f1cfd866be8a0835412a02127271b3e0f64856959ff4bd17d7e97a0000062002b14565b620007bb735516f15603707ee1e854e149f0f0e33f443cc9c46959ff4bd17d7e97a0000062002b14565b620007e5737723000de847d13856aa46993e6d1d499d13af1b6959ff4bd17d7e97a0000062002b14565b6200080f7376a7aa09e047fc0cd56d206b986a67772ed936fd6959ff4bd17d7e97a0000062002b14565b62000839734d6f7d3ec5ab66d14a494b4650717e7d44e527bd6959ff4bd17d7e97a0000062002b14565b6200086373a3839cb3b18d0d8372cc1ba8acb3c693329fd92b6959ff4bd17d7e97a0000062002b14565b6200088d737729370da4bfee1ee183eedd35176fcb20f9e8eb6959ff4bd17d7e97a0000062002b14565b620008b773a4b949fb6b2979e383b753f7b086ee1a7adb552a6959ff4bd17d7e97a0000062002b14565b620008e173c7861b59e2193424afc83a83bd65c8b5216c7eb06959ff4bd17d7e97a0000062002b14565b6200090b7394054865f83f9df3fae7d4b8e6b08b7ff420b0e26959ff4bd17d7e97a0000062002b14565b62000936736766c0ad04d5aa6b53d8e42738dafba490b0a7a36a18177569e71088f120000062002b14565b6040805160608082018352428083526a14adf4b7320334b900000060208085018281528587018381526007546001600160a01b039081166000908152600a8086528a822099518a55935160018a81019190915592516002998a015589518089018b52878152808601878152818c0197885260065490931682528486528a822090518155915192820192909255935193909601929092558551808501875283815269d3c21bcecceda1000000818301818152828901828152738ff5ceb90fab0e98fdfb3b9eacdf162dffaafeb4895285855292517f2f9df6faf38260e721095b52133008955536815d2a320b00684f18bc99b72d8f55517f2f9df6faf38260e721095b52133008955536815d2a320b00684f18bc99b72d905590517f2f9df6faf38260e721095b52133008955536815d2a320b00684f18bc99b72d9155865180860188528481528083018281528189018381527348ffb1b31d30b59b54fee7744ffd2be62ae40e80895285855291517ff6efe8cf9d8328bc4d93bd999e5a0e8bb063e1f34f2235e3153884b582d83bc155517ff6efe8cf9d8328bc4d93bd999e5a0e8bb063e1f34f2235e3153884b582d83bc255517ff6efe8cf9d8328bc4d93bd999e5a0e8bb063e1f34f2235e3153884b582d83bc3558651808601885284815280830182815281890183815273a626fdf1f62176effb78e00d579e421e67ada485895285855291517fa6b399001e7e9994a539633ba144d6468622274d14311b3082bd1a4964e1b10355517fa6b399001e7e9994a539633ba144d6468622274d14311b3082bd1a4964e1b10455517fa6b399001e7e9994a539633ba144d6468622274d14311b3082bd1a4964e1b105558651808601885284815280830182815281890183815273814035fd80140af0a5b7502c9b1a10f6ec8ad38a895285855291517faff4cc4178a422385b3aeb64115af5da9eb0afc6c833313c0b76da22507d66f055517faff4cc4178a422385b3aeb64115af5da9eb0afc6c833313c0b76da22507d66f155517faff4cc4178a422385b3aeb64115af5da9eb0afc6c833313c0b76da22507d66f25586518086018852848152808301828152818901838152733300d317713938007cfec35268aac7d54db3a85b895285855291517f3fd3e98508e460dcfca2d0cb08f51b5bdef16fbb0e5ab6fdf37ea3f76950a5c755517f3fd3e98508e460dcfca2d0cb08f51b5bdef16fbb0e5ab6fdf37ea3f76950a5c855517f3fd3e98508e460dcfca2d0cb08f51b5bdef16fbb0e5ab6fdf37ea3f76950a5c955865180860188528481528083018281528189018381527399d34caf247fcfb23570d1b29468db1659604c96895285855291517f05f8053fe2d3ff9319ede5face9a2edcb57c41009f5066194835d24d9dc28b3f55517f05f8053fe2d3ff9319ede5face9a2edcb57c41009f5066194835d24d9dc28b4055517f05f8053fe2d3ff9319ede5face9a2edcb57c41009f5066194835d24d9dc28b41558651808601885284815280830182815281890183815273feded73b3b2b74441c8bf42218e7ff24030a9705895285855291517f06ff3a47ae9e0a6de3f2101898f20540bc6b6c529a393713f1a979086f5dd7c555517f06ff3a47ae9e0a6de3f2101898f20540bc6b6c529a393713f1a979086f5dd7c655517f06ff3a47ae9e0a6de3f2101898f20540bc6b6c529a393713f1a979086f5dd7c75586518086018852848152808301829052870181905286518086018852848152808301828152818901838152734342e82b94b128fccbe1bddf454e51336cc5fde2895285855291517f6e86d05976cf7775ef1525d6b5a76a2fe4140576d7e460e500e2f45fb528a1b955517f6e86d05976cf7775ef1525d6b5a76a2fe4140576d7e460e500e2f45fb528a1ba55517f6e86d05976cf7775ef1525d6b5a76a2fe4140576d7e460e500e2f45fb528a1bb558651808601885284815280830182815281890183815273d62a38bd99376013d485214cc968322c20a6cc40895285855291517fca62c1591704387b35e56b7b705745a75753c9e75b6f588237aed2e3c76ff3e555517fca62c1591704387b35e56b7b705745a75753c9e75b6f588237aed2e3c76ff3e655517fca62c1591704387b35e56b7b705745a75753c9e75b6f588237aed2e3c76ff3e7558651808601885284815280830182815281890183815273c419528eda383691e1aa13c381d977343cb9e5d0895285855291517f3b2df453ad2dd6c6016468fbb133d1dcdf1152a339842d8d27aaaf00a9faf1f755517f3b2df453ad2dd6c6016468fbb133d1dcdf1152a339842d8d27aaaf00a9faf1f855517f3b2df453ad2dd6c6016468fbb133d1dcdf1152a339842d8d27aaaf00a9faf1f9558651808601885284815280830182815281890183815273df1cb2e9b48c830154ce6030ffc5e2ce7fd6c328895285855291517fadccde0c3f19bee94ad098bd336dcac362f24be9a314a1f8eab809186a9beb0855517fadccde0c3f19bee94ad098bd336dcac362f24be9a314a1f8eab809186a9beb0955517fadccde0c3f19bee94ad098bd336dcac362f24be9a314a1f8eab809186a9beb0a55865180860188528481528083018281528189018381527388eb97e5ecbf1c5b4eca19acf659d4724392ed86895285855291517f2115a5227ca65259ff8f8277af5ad554844b1b2a916ab43acc56e6630310d2ea55517f2115a5227ca65259ff8f8277af5ad554844b1b2a916ab43acc56e6630310d2eb55517f2115a5227ca65259ff8f8277af5ad554844b1b2a916ab43acc56e6630310d2ec55865180860188528481528083018281528189018381527313f0b3e3351ff54ba8daf733167436d46cba8623895285855291517ffc63bfcbc9abd5996ab28225e484bb14cc25a4603f6ccb7824cf6aaf6b4a98d755517ffc63bfcbc9abd5996ab28225e484bb14cc25a4603f6ccb7824cf6aaf6b4a98d855517ffc63bfcbc9abd5996ab28225e484bb14cc25a4603f6ccb7824cf6aaf6b4a98d95586518086018852848152808301828152818901838152730793f2c24bdc8353951dcb9b14d30801bb608421895285855291517f0ddc0b348123a131c911fcc47a23c1e782ae7a8f061d7fef157b71d52914757755517f0ddc0b348123a131c911fcc47a23c1e782ae7a8f061d7fef157b71d52914757855517f0ddc0b348123a131c911fcc47a23c1e782ae7a8f061d7fef157b71d529147579558651808601885284815280830182815281890183815273d7741872efc695be77c9bc8b7e7afcf928dd4912895285855291517f7f3fd4d4e13635c2d6e49546b59fa9a22a418fe7f5379b9b6963e1ae6e4f0a4955517f7f3fd4d4e13635c2d6e49546b59fa9a22a418fe7f5379b9b6963e1ae6e4f0a4a55517f7f3fd4d4e13635c2d6e49546b59fa9a22a418fe7f5379b9b6963e1ae6e4f0a4b558651808601885284815269b949d854f34fece00000818401818152828a0191825273bcd670eb38fe7937245324f8a9689c49c7a8e91e895285855291517f6b1b04596ae70e0ec8fb2cdf7d79418d95e1d351cb59b73304f522821a724bea5590517f6b1b04596ae70e0ec8fb2cdf7d79418d95e1d351cb59b73304f522821a724beb55517f6b1b04596ae70e0ec8fb2cdf7d79418d95e1d351cb59b73304f522821a724bec55865180860188528481526959ff4bd17d7e97a00000818401818152828a0182815273875e5d68ced80a84f1d0bde9a864cf387690abc18a5286865292517f71755ba73bbf3a84e1f13a89e3c2abef792a8499058f75ecc8d14ba4c1c3688755517f71755ba73bbf3a84e1f13a89e3c2abef792a8499058f75ecc8d14ba4c1c368885590517f71755ba73bbf3a84e1f13a89e3c2abef792a8499058f75ecc8d14ba4c1c368895587518087018952858152808401828152818a0183815273d61545c9f495da3d556e0474a102de3937eb84518a5286865291517f5594f508f4bb7afdd1f26901dddad4638ddf171d0422a0e3b8941dd749aeeb9355517f5594f508f4bb7afdd1f26901dddad4638ddf171d0422a0e3b8941dd749aeeb9455517f5594f508f4bb7afdd1f26901dddad4638ddf171d0422a0e3b8941dd749aeeb955587518087018952858152808401828152818a019283527342415d75fd3bfc6cd44f232109925e04fc5610d8895285855290517fe282805b1da1fa689145a593549c3ca8a5aec451cc820c5c17b972ceb462003b55517fe282805b1da1fa689145a593549c3ca8a5aec451cc820c5c17b972ceb462003c55517fe282805b1da1fa689145a593549c3ca8a5aec451cc820c5c17b972ceb462003d558651808601885284815269b3fe97a2fafd2f400000818401818152828a0182815273ac6de509e1b5c1c619afe64e0dfa567bd5b585038a5286865292517ff7ee2b0c549177b195927156eaaf97681d0381221141a27f9f261d9b1fae207e55517ff7ee2b0c549177b195927156eaaf97681d0381221141a27f9f261d9b1fae207f5590517ff7ee2b0c549177b195927156eaaf97681d0381221141a27f9f261d9b1fae20805587518087018952858152808401828152818a018381527388b1fab25703a07cacd2c9da4797df2379f43a328a5286865291517f7c52d2036b4ba16891589d5b5906c6f8161599cf03e0356d34ed8ed806aa4c9b55517f7c52d2036b4ba16891589d5b5906c6f8161599cf03e0356d34ed8ed806aa4c9c55517f7c52d2036b4ba16891589d5b5906c6f8161599cf03e0356d34ed8ed806aa4c9d5587518087018952858152808401828152818a0183815273dfbb98446715dccfce6fc231952d2e16884fd0d58a5286865291517f2950060f88ad012ea7b348170a6ded7536b5d386f60b38ebc951193e7c7ea26255517f2950060f88ad012ea7b348170a6ded7536b5d386f60b38ebc951193e7c7ea26355517f2950060f88ad012ea7b348170a6ded7536b5d386f60b38ebc951193e7c7ea2645587518087018952858152808401828152818a01838152737947dd50cf73fdd44dbc8f7a4be28e490b4d5d1b8a5286865291517f89b275390c095574482359aef83f6b1c4a1299e473df9aa55acaf697cb1b6e6955517f89b275390c095574482359aef83f6b1c4a1299e473df9aa55acaf697cb1b6e6a55517f89b275390c095574482359aef83f6b1c4a1299e473df9aa55acaf697cb1b6e6b55875180870189528581526969e10de76676d0800000818501818152828b01828152736f0ab036b74a8d8263823609858c3f7efb9ab7828b5287875292517fb5836931230de9d6f8daef3797d574ff7da87f197e3e2072506dd6d23517eede55517fb5836931230de9d6f8daef3797d574ff7da87f197e3e2072506dd6d23517eedf5590517fb5836931230de9d6f8daef3797d574ff7da87f197e3e2072506dd6d23517eee05588518088018a52868152808501828152818b0183815273b6f526ef7820bca52058be5c75dc05c7c456d22b8b5287875291517fe751ac66bbbff379bd331bd17aa12e3fe2d17f258c3cab44928e29dcb5cf66f755517fe751ac66bbbff379bd331bd17aa12e3fe2d17f258c3cab44928e29dcb5cf66f855517fe751ac66bbbff379bd331bd17aa12e3fe2d17f258c3cab44928e29dcb5cf66f95588518088018a52868152699ed194db19b238c00000818601818152828c0182815273a3cca0e4b6c70c2fdfbf95bb35bea1ca604f72078c5288885292517faa1ad602f66fe59092951865e5ee46fb42e2c0a012f3ef27b6ee407283bf291255517faa1ad602f66fe59092951865e5ee46fb42e2c0a012f3ef27b6ee407283bf29135590517faa1ad602f66fe59092951865e5ee46fb42e2c0a012f3ef27b6ee407283bf29145589518089018b52878152808601828152818c01838152737be8c8fef3c323bebd0338d7db2f9370f896fecd8c5288885291517f199a3ceb4e9dc8be1d32cf19755a61620bb38d3fab607d5df2da9bf34fbf79b155517f199a3ceb4e9dc8be1d32cf19755a61620bb38d3fab607d5df2da9bf34fbf79b255517f199a3ceb4e9dc8be1d32cf19755a61620bb38d3fab607d5df2da9bf34fbf79b35589518089018b52878152808601828152818c01838152739c10ffef1aec731b616cc22fedeca5d81d61859e8c5288885291517fec147dfa669a445a1a9f7f556529cb369c3c2ca51c1d134ba59f93da86b4360855517fec147dfa669a445a1a9f7f556529cb369c3c2ca51c1d134ba59f93da86b4360955517fec147dfa669a445a1a9f7f556529cb369c3c2ca51c1d134ba59f93da86b4360a5589518089018b52878152808601828152818c01838152739f22318d7cee9e22be01bd3bf64fb9257fb7f4b88c5288885291517fdb1f3e3f3dcbae6563e1ecc9e4808f8bdbe51fd9a0b0ab3679f0dda79717c07655517fdb1f3e3f3dcbae6563e1ecc9e4808f8bdbe51fd9a0b0ab3679f0dda79717c07755517fdb1f3e3f3dcbae6563e1ecc9e4808f8bdbe51fd9a0b0ab3679f0dda79717c0785589518089018b52878152808601828152818c0192835273f4edff75ad10030df1412317ea38ed84e12ef41c8b5287875290517ff07b0d7043004ad35cb952f99bb7e183ec6276b5db4ee9dd15ae32aad2a6473f55517ff07b0d7043004ad35cb952f99bb7e183ec6276b5db4ee9dd15ae32aad2a6474055517ff07b0d7043004ad35cb952f99bb7e183ec6276b5db4ee9dd15ae32aad2a647415588518088018a52868152808501828152818b0192835273baff5f62bf40cbbfc0be450f11126fc4e094aac38a5286865290517f78d0124d27da5c30df2c130132149438a2ff00bae03d641c7a4aa00624bcc2b455517f78d0124d27da5c30df2c130132149438a2ff00bae03d641c7a4aa00624bcc2b555517f78d0124d27da5c30df2c130132149438a2ff00bae03d641c7a4aa00624bcc2b65587518087018952858152808401838152818a01848152731c96afc64a706695a9558e76679f8bc72e3548548a5286865291517feaf38e21d7f78057c4f5547367ca15a5b069c0b60b7e38478493e097f29e37e655517feaf38e21d7f78057c4f5547367ca15a5b069c0b60b7e38478493e097f29e37e755517feaf38e21d7f78057c4f5547367ca15a5b069c0b60b7e38478493e097f29e37e85587518087018952858152808401838152818a01848152730d0d3321bbeaff438d68ad58a77fda6309920e868a5286865291517f3b4c44111bfedc001da0bfc552a8e57aea67c4f84668adc8aa8e471efcecee5755517f3b4c44111bfedc001da0bfc552a8e57aea67c4f84668adc8aa8e471efcecee5855517f3b4c44111bfedc001da0bfc552a8e57aea67c4f84668adc8aa8e471efcecee595587518087018952858152808401838152818a0184815273b016539a2d7a0dfa98237c93ac4af0f46ba74bad8a5286865291517f245c0c88149ee048d3b8bc0e19a3cb01aca18f61420087d18d7d580458f7189f55517f245c0c88149ee048d3b8bc0e19a3cb01aca18f61420087d18d7d580458f718a055517f245c0c88149ee048d3b8bc0e19a3cb01aca18f61420087d18d7d580458f718a15587518087018952858152808401838152818a018481527366d4bdf37aa4c04c7c66a743396cae3fa2425f798a5286865291517fe3b21f49f273384f61919fd15b3e62e13b6a78c508241ad9edd12b1d0e46bc5355517fe3b21f49f273384f61919fd15b3e62e13b6a78c508241ad9edd12b1d0e46bc5455517fe3b21f49f273384f61919fd15b3e62e13b6a78c508241ad9edd12b1d0e46bc555587518087018952858152808401838152818a0184815272893fac04c1f1b6e30847dcc1f24761271c81c78a5286865291517fc55b593af7e03d0244f8996f538e620c520767ccc41aea011c8c08f918ee62c755517fc55b593af7e03d0244f8996f538e620c520767ccc41aea011c8c08f918ee62c855517fc55b593af7e03d0244f8996f538e620c520767ccc41aea011c8c08f918ee62c95587518087018952858152808401838152818a018481527320d256ae504f7459532f3711035133624f83c15b8a5286865291517f13415571e75f63eeff4e8e0de81ed1f63e36f3bef45e162c20fcc6aef13c5c8255517f13415571e75f63eeff4e8e0de81ed1f63e36f3bef45e162c20fcc6aef13c5c8355517f13415571e75f63eeff4e8e0de81ed1f63e36f3bef45e162c20fcc6aef13c5c845587518087018952858152808401838152818a0184815273082faa352c52365c0b6e0d8f52523acf8ea511f48a5286865291517f135fcffd4585e92fa8f508a71fed308d1c357a07e77e94b9d06c47667e733ffc55517f135fcffd4585e92fa8f508a71fed308d1c357a07e77e94b9d06c47667e733ffd55517f135fcffd4585e92fa8f508a71fed308d1c357a07e77e94b9d06c47667e733ffe5587518087018952858152808401838152818a01848152730bbc35b239209c7819bc8e0008ff476dd637dfca8a5286865291517fcb176569e58554c9234f1642c5f2264e837535755b4120c598fc10b96e06dfda55517fcb176569e58554c9234f1642c5f2264e837535755b4120c598fc10b96e06dfdb55517fcb176569e58554c9234f1642c5f2264e837535755b4120c598fc10b96e06dfdc5587518087018952858152808401838152818a0184815273b2103ace0eca26d55dfc827cd59d51dd87bd0e038a5286865291517fa0b23af205afeed0c68e67eb07a0a84e6cdcdd4e5c1d0767454443c2150efe5655517fa0b23af205afeed0c68e67eb07a0a84e6cdcdd4e5c1d0767454443c2150efe5755517fa0b23af205afeed0c68e67eb07a0a84e6cdcdd4e5c1d0767454443c2150efe585587518087018952858152808401838152818a018481527380dfbf3cf73f6bba8b5175976ae8338d4ced26a78a5286865291517ff08dd5eeb782155cd235d387e7fc5439a2a8ed0c8da4f0f63f5587a1d9f1630e55517ff08dd5eeb782155cd235d387e7fc5439a2a8ed0c8da4f0f63f5587a1d9f1630f55517ff08dd5eeb782155cd235d387e7fc5439a2a8ed0c8da4f0f63f5587a1d9f163105587518087018952858152808401838152818a0184815273e1af2f6ba1b34656e72005d1cfc25a80a62482118a5286865291517ff517013d02d9d1c3be62457f819c37a8c994e2fd8c6bffbd2831c3cdd22ab44855517ff517013d02d9d1c3be62457f819c37a8c994e2fd8c6bffbd2831c3cdd22ab44955517ff517013d02d9d1c3be62457f819c37a8c994e2fd8c6bffbd2831c3cdd22ab44a5587518087018952858152808401838152818a01848152739e667b5277a38fe2d0f9297447fa7c62d3d6ae698a5286865291517fecd7014417dc5fb871c686d60e0ff9415b98c04c642b34758582f3c6f04ff3df55517fecd7014417dc5fb871c686d60e0ff9415b98c04c642b34758582f3c6f04ff3e055517fecd7014417dc5fb871c686d60e0ff9415b98c04c642b34758582f3c6f04ff3e15587518087018952858152808401838152818a01848152731baf30992f4f37e0c5909276ba0e1a3f96eaf9cb8a5286865291517fcccb66a00f74be15a06f67bf70cded840e71a90bc2422fbb36f7dea9a204f05855517fcccb66a00f74be15a06f67bf70cded840e71a90bc2422fbb36f7dea9a204f05955517fcccb66a00f74be15a06f67bf70cded840e71a90bc2422fbb36f7dea9a204f05a5587518087018952858152808401838152818a0184815273bdfbfd5b4123566d358f69882a5909492049be8a8a5286865291517fe5394d14ed7e4e736464a3b37773466cbbeaa97c702b41c7fa036a4c1e059dad55517fe5394d14ed7e4e736464a3b37773466cbbeaa97c702b41c7fa036a4c1e059dae55517fe5394d14ed7e4e736464a3b37773466cbbeaa97c702b41c7fa036a4c1e059daf5587518087018952858152808401838152818a018481527319e61dbc204ba4a5e3ef57721c7ab139399df7c68a5286865291517fa6c42bc4c04f5f4e53eb043e862207bbfe01b0c0baafaa63e2909f30d7830ac155517fa6c42bc4c04f5f4e53eb043e862207bbfe01b0c0baafaa63e2909f30d7830ac255517fa6c42bc4c04f5f4e53eb043e862207bbfe01b0c0baafaa63e2909f30d7830ac35587518087018952858152808401838152818a018481527387f84eec3adac507372018da187661726867f3168a5286865291517f49f49c2fe2a319f606c51f97d2d45a69020b55bae7d79a7b5a9671f61fa9825655517f49f49c2fe2a319f606c51f97d2d45a69020b55bae7d79a7b5a9671f61fa9825755517f49f49c2fe2a319f606c51f97d2d45a69020b55bae7d79a7b5a9671f61fa982585587518087018952858152808401838152818a01848152730cbd15145285b9cd05e95c19cb1e2d1fdc71cf908a5286865291517f32041e45cfcbfcb9f5b4fbbd91c0517a72627bddfae3710dd99cfb9f82cff54e55517f32041e45cfcbfcb9f5b4fbbd91c0517a72627bddfae3710dd99cfb9f82cff54f55517f32041e45cfcbfcb9f5b4fbbd91c0517a72627bddfae3710dd99cfb9f82cff5505587518087018952858152808401838152818a0184815273174818eb82c976083591d0eaa720b704986165618a5286865291517f22e7ff0eab3e44bcae09d2aff398291e857e3a4a82a864d7a4a75913b298faec55517f22e7ff0eab3e44bcae09d2aff398291e857e3a4a82a864d7a4a75913b298faed55517f22e7ff0eab3e44bcae09d2aff398291e857e3a4a82a864d7a4a75913b298faee5587518087018952858152808401838152818a0193845273643a7b5cb05486626594b17280dcb051d2725155895285855290517f097fbb0e073c501878c82d589ee3d50db7387292e4bc9ec1596b255c30d55bd955517f097fbb0e073c501878c82d589ee3d50db7387292e4bc9ec1596b255c30d55bda5590517f097fbb0e073c501878c82d589ee3d50db7387292e4bc9ec1596b255c30d55bdb558651808601885284815280830182815281890183815273f422c173264dcd512e3cee0db4acb568707c0b8d895285855291517ff3a9f8406c9168edcc443650b506004b19057c21865efd391caf5108e04f265f55517ff3a9f8406c9168edcc443650b506004b19057c21865efd391caf5108e04f266055517ff3a9f8406c9168edcc443650b506004b19057c21865efd391caf5108e04f2661558651808601885284815280830182815281890183815273f916d5d0310bfcd0d9b8c43d0a29070670d825f9895285855291517f6b2d8594c77d4a213d68dc86cebbf0900d2da2b89be4599e71e692861978356755517f6b2d8594c77d4a213d68dc86cebbf0900d2da2b89be4599e71e692861978356855517f6b2d8594c77d4a213d68dc86cebbf0900d2da2b89be4599e71e6928619783569558651948501875292845283810183815295840192835273e58ea0ced4417f0551fb82ddf4f6477072dfb430909452909252517fcf7765806c2ba92f78568a6e25734afe91b0488da8890ab17464f87b04ee39685590517fcf7765806c2ba92f78568a6e25734afe91b0488da8890ab17464f87b04ee396955517fcf7765806c2ba92f78568a6e25734afe91b0488da8890ab17464f87b04ee396a5562002c7b565b3390565b62002a2062002a12565b6000546001600160a01b0390811691161462002a83576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03811662002aca5760405162461bcd60e51b815260040180806020018281038252602681526020018062004cf76026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602062004d1d83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03821662002b70576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b62002b8c8160035462002c1960201b6200162e1790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462002bc19183906200162e62002c19821b17901c565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008282018381101562002c74576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b61206c8062002c8b6000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c806370a0823111610130578063aa9a0912116100b8578063dd62ed3e1161007c578063dd62ed3e14610620578063e6fd48bc1461064e578063e7b9179414610656578063f2fde38b1461065e578063f7dd74811461068457610227565b8063aa9a0912146105b9578063b09f1266146105e2578063b0de5e29146105ea578063d28d8852146105f2578063d357a38b146105fa57610227565b806386d1a69f116100ff57806386d1a69f146105495780638da5cb5b1461055157806395d89b4114610559578063a457c2d714610561578063a9059cbb1461058d57610227565b806370a08231146104d6578063715018a6146104fc578063809d458d1461050457806382e0cf6b1461052a57610227565b80633347e4d6116101b357806342966c681161018257806342966c6814610475578063534462361461049257806359351e171461049a5780636161eb18146104a257806362a5af3b146104ce57610227565b80633347e4d6146103ef57806337e294d514610415578063395093511461041d57806340c10f191461044957610227565b806318160ddd116101fa57806318160ddd1461035557806323b872dd1461036f578063269d1faa146103a5578063313ce567146103c957806332424aa3146103e757610227565b8063048fcfc51461022c57806306fdde0314610254578063095ea7b3146102d15780631501ea1c14610311575b600080fd5b6102526004803603602081101561024257600080fd5b50356001600160a01b031661068c565b005b61025c610706565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029657818101518382015260200161027e565b50505050905090810190601f1680156102c35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102fd600480360360408110156102e757600080fd5b506001600160a01b038135169060200135610731565b604080519115158252519081900360200190f35b6103376004803603602081101561032757600080fd5b50356001600160a01b031661074e565b60408051938452602084019290925282820152519081900360600190f35b61035d61076f565b60408051918252519081900360200190f35b6102fd6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610775565b6103ad6107fc565b604080516001600160a01b039092168252519081900360200190f35b6103d161080b565b6040805160ff9092168252519081900360200190f35b6103d1610810565b6102526004803603602081101561040557600080fd5b50356001600160a01b0316610815565b6103ad61089f565b6102fd6004803603604081101561043357600080fd5b506001600160a01b0381351690602001356108ae565b6102526004803603604081101561045f57600080fd5b506001600160a01b0381351690602001356108fc565b6102526004803603602081101561048b57600080fd5b5035610a19565b610252610ab3565b610252610c9f565b610252600480360360408110156104b857600080fd5b506001600160a01b038135169060200135610d99565b6102fd610ec0565b61035d600480360360208110156104ec57600080fd5b50356001600160a01b0316610ec9565b610252610efe565b6102526004803603602081101561051a57600080fd5b50356001600160a01b0316610fa0565b6102526004803603602081101561054057600080fd5b5035151561101a565b610252611085565b6103ad6111f6565b61025c611205565b6102fd6004803603604081101561057757600080fd5b506001600160a01b038135169060200135611222565b6102fd600480360360408110156105a357600080fd5b506001600160a01b03813516906020013561128a565b61035d600480360360608110156105cf57600080fd5b508035906020810135906040013561129e565b61025c611352565b6103ad611371565b61025c611380565b61035d6004803603602081101561061057600080fd5b50356001600160a01b03166113ac565b61035d6004803603604081101561063657600080fd5b506001600160a01b03813581169160200135166113c7565b61035d6113f2565b6103ad6113f8565b6102526004803603602081101561067457600080fd5b50356001600160a01b0316611407565b6102526114ff565b61069461168f565b6000546001600160a01b039081169116146106e4576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152601081526f42656c6c65767565204e6574776f726b60801b60208201525b90565b600061074561073e61168f565b8484611693565b50600192915050565b600a6020526000908152604090208054600182015460029092015490919083565b60035490565b600061078284848461177f565b6107f28461078e61168f565b6107ed85604051806060016040528060288152602001611f40602891396001600160a01b038a166000908152600260205260408120906107cc61168f565b6001600160a01b031681526020810191909152604001600020549190611b2a565b611693565b5060019392505050565b6007546001600160a01b031681565b601290565b601281565b61081d61168f565b6000546001600160a01b0390811691161461086d576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b600480546001600160a01b039092166001600160a01b03199092169190911790556009805461ff001916610100179055565b6006546001600160a01b031681565b60006107456108bb61168f565b846107ed85600260006108cc61168f565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061162e565b6004546001600160a01b031633146109455760405162461bcd60e51b815260040180806020018281038252602b815260200180611ea7602b913960400191505060405180910390fd5b6001600160a01b0382166109a0576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6003546109ad908261162e565b6003556001600160a01b0382166000908152600160205260409020546109d3908261162e565b6001600160a01b0383166000818152600160209081526040808320949094558351858152935192939192600080516020611f888339815191529281900390910190a35050565b610a4281604051806060016040528060228152602001611e8560229139600160006107cc61168f565b60016000610a4e61168f565b6001600160a01b03168152602081019190915260400160002055600354610a759082611bc1565b6003556000610a8261168f565b6001600160a01b0316600080516020611f88833981519152836040518082815260200191505060405180910390a350565b6005546001600160a01b0316610ac761168f565b6001600160a01b031614610ad757fe5b600954610100900460ff16610b29576040805162461bcd60e51b815260206004820152601360248201527214dd185ada5b99c81a5cc8191a5cd8589b1959606a1b604482015290519081900360640190fd5b6004546007546001600160a01b039182169163b1fba3ed9116610b4b81610ec9565b6003546040518463ffffffff1660e01b815260040180846001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015610b9b57600080fd5b505af1925050508015610bc057506040513d6020811015610bbb57600080fd5b505160015b610c8557610bcc611dbc565b80610bd75750610c76565b7fa183e9a5f6222d4c98fb5b98e0442aaabd70de89b6ec74508bce501a2441f5f9816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c36578181015183820152602001610c1e565b50505050905090810190601f168015610c635780820380516001836020036101000a031916815260200191505b509250505060405180910390a150610c80565b3d6000803e3d6000fd5b610c9d565b600754610c9b906001600160a01b031682610945565b505b565b600954610100900460ff16610cf1576040805162461bcd60e51b815260206004820152601360248201527214dd185ada5b99c81a5cc8191a5cd8589b1959606a1b604482015290519081900360640190fd5b6004805433600081815260016020908152604080832054600354825163b1fba3ed60e01b8152978801959095526024870152604486019390935291516001600160a01b039093169363b1fba3ed936064808301949391928390030190829087803b158015610d5e57600080fd5b505af1925050508015610d8357506040513d6020811015610d7e57600080fd5b505160015b610d8f57610bcc611dbc565b610c9b3382610945565b6004546001600160a01b03163314610de25760405162461bcd60e51b815260040180806020018281038252602b815260200180611ea7602b913960400191505060405180910390fd5b6001600160a01b038216610e275760405162461bcd60e51b8152600401808060200182810382526021815260200180611fa86021913960400191505060405180910390fd5b610e6481604051806060016040528060228152602001611e85602291396001600160a01b0385166000908152600160205260409020549190611b2a565b6001600160a01b038316600090815260016020526040902055600354610e8a9082611bc1565b6003556040805182815290516000916001600160a01b03851691600080516020611f888339815191529181900360200190a35050565b60095460ff1681565b6001600160a01b0381166000908152600a602090815260408083206001908101549252822054610ef89161162e565b92915050565b610f0661168f565b6000546001600160a01b03908116911614610f56576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610fa861168f565b6000546001600160a01b03908116911614610ff8576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b61102261168f565b6000546001600160a01b03908116911614611072576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b6009805460ff1916911515919091179055565b6007546001600160a01b03163314156110a057610c80611c03565b6006546001600160a01b03163314156110bb57610c80611ced565b336000908152600a602052604090206002810154158015906110e1575060008160010154115b611132576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a206e6f20746f6b656e7320746f2072656c656173650000604482015290519081900360640190fd5b6008548154141561117b57600061115082600201546019606461129e565b42835560018301549091506111659082611bc1565b60018301556111743382610945565b5050610c9d565b80546000906201518090611190904290611bc1565b8161119757fe5b049050601e8110156111a857600080fd5b60006111bb83600201546019606461129e565b905082600101548111156111d0575060018201545b42835560018301546111e29082611bc1565b60018401556111f13382610945565b505050565b6000546001600160a01b031690565b60408051808201909152600381526221262b60e91b602082015290565b600061074561122f61168f565b846107ed85604051806060016040528060258152602001612012602591396002600061125961168f565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611b2a565b600061074561129761168f565b848461177f565b60008060006112ad8686611d89565b915091508381106112ba57fe5b600084806112c457fe5b8688099050828111156112d8576001820391505b9182900391600085900385168086816112ed57fe5b0495508084816112f957fe5b04935080816000038161130857fe5b046001019290920292909201600285810380870282030280870282030280870282030280870282030280870282030280870282030295860290039094029390930295945050505050565b6040518060400160405280600381526020016221262b60e91b81525081565b6004546001600160a01b031681565b6040518060400160405280601081526020016f42656c6c65767565204e6574776f726b60801b81525081565b6001600160a01b031660009081526001602052604090205490565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b60085481565b6005546001600160a01b031681565b61140f61168f565b6000546001600160a01b0390811691161461145f576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b6001600160a01b0381166114a45760405162461bcd60e51b8152600401808060200182810382526026815260200180611ed26026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031661151361168f565b6001600160a01b03161461152357fe5b600954610100900460ff16611575576040805162461bcd60e51b815260206004820152601360248201527214dd185ada5b99c81a5cc8191a5cd8589b1959606a1b604482015290519081900360640190fd5b6004546006546001600160a01b039182169163b1fba3ed911661159781610ec9565b6003546040518463ffffffff1660e01b815260040180846001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156115e757600080fd5b505af192505050801561160c57506040513d602081101561160757600080fd5b505160015b61161857610bcc611dbc565b600654610c9b906001600160a01b031682610945565b600082820183811015611688576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166116d85760405162461bcd60e51b8152600401808060200182810382526024815260200180611fee6024913960400191505060405180910390fd5b6001600160a01b03821661171d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611ef86022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166117c45760405162461bcd60e51b8152600401808060200182810382526025815260200180611fc96025913960400191505060405180910390fd5b6001600160a01b0382166118095760405162461bcd60e51b8152600401808060200182810382526023815260200180611e626023913960400191505060405180910390fd5b6001600160a01b0383166000908152600160205260409020548111156118605760405162461bcd60e51b8152600401808060200182810382526026815260200180611f1a6026913960400191505060405180910390fd5b6118686111f6565b6001600160a01b0316836001600160a01b0316146118cd5760095460ff16156118cd576040805162461bcd60e51b815260206004820152601260248201527121b7b73a3930b1ba1034b990333937bd32b760711b604482015290519081900360640190fd5b600954610100900460ff1615611a8e57600480546001600160a01b03858116600081815260016020526040808220548885168084528284205483516338aa7e6f60e11b8152988901959095526024880152604487018890526064870152608486019290925290519093849384931691637154fcde9160a48082019260609290919082900301818787803b15801561196357600080fd5b505af1158015611977573d6000803e3d6000fd5b505050506040513d606081101561198d57600080fd5b5080516020808301516040938401516001600160a01b03808c16600090815260019094528584208590558a1683529390912081905560035491955093509091506119d79082611bc1565b6003558015611a4c576001600160a01b03808616908716600080516020611f88833981519152611a078785611bc1565b60408051918252519081900360200190a36040805182815290516000916001600160a01b03891691600080516020611f888339815191529181900360200190a3611a86565b846001600160a01b0316866001600160a01b0316600080516020611f88833981519152866040518082815260200191505060405180910390a35b5050506111f1565b6001600160a01b038316600090815260016020526040902054611ab19082611bc1565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611ae0908261162e565b6001600160a01b038084166000818152600160209081526040918290209490945580518581529051919392871692600080516020611f8883398151915292918290030190a3505050565b60008184841115611bb95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611b7e578181015183820152602001611b66565b50505050905090810190601f168015611bab5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061168883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b2a565b6007546001600160a01b03166000908152600a6020526040902060085481541415611c6b576000611c3b82600201546019606461129e565b4283556001830154909150611c509082611bc1565b6001830155600754611174906001600160a01b031682610945565b80546000906201518090611c80904290611bc1565b81611c8757fe5b049050605a811015611c9857600080fd5b6000611cab83600201546019606461129e565b90508260010154811115611cc0575060018201545b4283556001830154611cd29082611bc1565b60018401556007546111f1906001600160a01b031682610945565b6006546001600160a01b03166000908152600a6020526040812080549091906201518090611d1c904290611bc1565b81611d2357fe5b049050605a811015611d3457600080fd5b6000611d4783600201546019606461129e565b90508260010154811115611d5c575060018201545b4283556001830154611d6e9082611bc1565b60018401556006546111f1906001600160a01b031682610945565b6000808060001984860990508385029250828103915082811015611dae576001820391505b509250929050565b60e01c90565b600060443d1015611dcc5761072e565b600481823e6308c379a0611de08251611db6565b14611dea5761072e565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715611e1a575050505061072e565b82840192508251915080821115611e34575050505061072e565b503d83016020828401011115611e4c5750505061072e565b601f01601f191681016020016040529150509056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865207374616b696e6720636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202d444b667fa125b85b0d1586686274bf4ecfe1ab012b8ffb0e3dcfe66e49930864736f6c634300060c00334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102275760003560e01c806370a0823111610130578063aa9a0912116100b8578063dd62ed3e1161007c578063dd62ed3e14610620578063e6fd48bc1461064e578063e7b9179414610656578063f2fde38b1461065e578063f7dd74811461068457610227565b8063aa9a0912146105b9578063b09f1266146105e2578063b0de5e29146105ea578063d28d8852146105f2578063d357a38b146105fa57610227565b806386d1a69f116100ff57806386d1a69f146105495780638da5cb5b1461055157806395d89b4114610559578063a457c2d714610561578063a9059cbb1461058d57610227565b806370a08231146104d6578063715018a6146104fc578063809d458d1461050457806382e0cf6b1461052a57610227565b80633347e4d6116101b357806342966c681161018257806342966c6814610475578063534462361461049257806359351e171461049a5780636161eb18146104a257806362a5af3b146104ce57610227565b80633347e4d6146103ef57806337e294d514610415578063395093511461041d57806340c10f191461044957610227565b806318160ddd116101fa57806318160ddd1461035557806323b872dd1461036f578063269d1faa146103a5578063313ce567146103c957806332424aa3146103e757610227565b8063048fcfc51461022c57806306fdde0314610254578063095ea7b3146102d15780631501ea1c14610311575b600080fd5b6102526004803603602081101561024257600080fd5b50356001600160a01b031661068c565b005b61025c610706565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029657818101518382015260200161027e565b50505050905090810190601f1680156102c35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102fd600480360360408110156102e757600080fd5b506001600160a01b038135169060200135610731565b604080519115158252519081900360200190f35b6103376004803603602081101561032757600080fd5b50356001600160a01b031661074e565b60408051938452602084019290925282820152519081900360600190f35b61035d61076f565b60408051918252519081900360200190f35b6102fd6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610775565b6103ad6107fc565b604080516001600160a01b039092168252519081900360200190f35b6103d161080b565b6040805160ff9092168252519081900360200190f35b6103d1610810565b6102526004803603602081101561040557600080fd5b50356001600160a01b0316610815565b6103ad61089f565b6102fd6004803603604081101561043357600080fd5b506001600160a01b0381351690602001356108ae565b6102526004803603604081101561045f57600080fd5b506001600160a01b0381351690602001356108fc565b6102526004803603602081101561048b57600080fd5b5035610a19565b610252610ab3565b610252610c9f565b610252600480360360408110156104b857600080fd5b506001600160a01b038135169060200135610d99565b6102fd610ec0565b61035d600480360360208110156104ec57600080fd5b50356001600160a01b0316610ec9565b610252610efe565b6102526004803603602081101561051a57600080fd5b50356001600160a01b0316610fa0565b6102526004803603602081101561054057600080fd5b5035151561101a565b610252611085565b6103ad6111f6565b61025c611205565b6102fd6004803603604081101561057757600080fd5b506001600160a01b038135169060200135611222565b6102fd600480360360408110156105a357600080fd5b506001600160a01b03813516906020013561128a565b61035d600480360360608110156105cf57600080fd5b508035906020810135906040013561129e565b61025c611352565b6103ad611371565b61025c611380565b61035d6004803603602081101561061057600080fd5b50356001600160a01b03166113ac565b61035d6004803603604081101561063657600080fd5b506001600160a01b03813581169160200135166113c7565b61035d6113f2565b6103ad6113f8565b6102526004803603602081101561067457600080fd5b50356001600160a01b0316611407565b6102526114ff565b61069461168f565b6000546001600160a01b039081169116146106e4576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60408051808201909152601081526f42656c6c65767565204e6574776f726b60801b60208201525b90565b600061074561073e61168f565b8484611693565b50600192915050565b600a6020526000908152604090208054600182015460029092015490919083565b60035490565b600061078284848461177f565b6107f28461078e61168f565b6107ed85604051806060016040528060288152602001611f40602891396001600160a01b038a166000908152600260205260408120906107cc61168f565b6001600160a01b031681526020810191909152604001600020549190611b2a565b611693565b5060019392505050565b6007546001600160a01b031681565b601290565b601281565b61081d61168f565b6000546001600160a01b0390811691161461086d576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b600480546001600160a01b039092166001600160a01b03199092169190911790556009805461ff001916610100179055565b6006546001600160a01b031681565b60006107456108bb61168f565b846107ed85600260006108cc61168f565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061162e565b6004546001600160a01b031633146109455760405162461bcd60e51b815260040180806020018281038252602b815260200180611ea7602b913960400191505060405180910390fd5b6001600160a01b0382166109a0576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6003546109ad908261162e565b6003556001600160a01b0382166000908152600160205260409020546109d3908261162e565b6001600160a01b0383166000818152600160209081526040808320949094558351858152935192939192600080516020611f888339815191529281900390910190a35050565b610a4281604051806060016040528060228152602001611e8560229139600160006107cc61168f565b60016000610a4e61168f565b6001600160a01b03168152602081019190915260400160002055600354610a759082611bc1565b6003556000610a8261168f565b6001600160a01b0316600080516020611f88833981519152836040518082815260200191505060405180910390a350565b6005546001600160a01b0316610ac761168f565b6001600160a01b031614610ad757fe5b600954610100900460ff16610b29576040805162461bcd60e51b815260206004820152601360248201527214dd185ada5b99c81a5cc8191a5cd8589b1959606a1b604482015290519081900360640190fd5b6004546007546001600160a01b039182169163b1fba3ed9116610b4b81610ec9565b6003546040518463ffffffff1660e01b815260040180846001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b158015610b9b57600080fd5b505af1925050508015610bc057506040513d6020811015610bbb57600080fd5b505160015b610c8557610bcc611dbc565b80610bd75750610c76565b7fa183e9a5f6222d4c98fb5b98e0442aaabd70de89b6ec74508bce501a2441f5f9816040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c36578181015183820152602001610c1e565b50505050905090810190601f168015610c635780820380516001836020036101000a031916815260200191505b509250505060405180910390a150610c80565b3d6000803e3d6000fd5b610c9d565b600754610c9b906001600160a01b031682610945565b505b565b600954610100900460ff16610cf1576040805162461bcd60e51b815260206004820152601360248201527214dd185ada5b99c81a5cc8191a5cd8589b1959606a1b604482015290519081900360640190fd5b6004805433600081815260016020908152604080832054600354825163b1fba3ed60e01b8152978801959095526024870152604486019390935291516001600160a01b039093169363b1fba3ed936064808301949391928390030190829087803b158015610d5e57600080fd5b505af1925050508015610d8357506040513d6020811015610d7e57600080fd5b505160015b610d8f57610bcc611dbc565b610c9b3382610945565b6004546001600160a01b03163314610de25760405162461bcd60e51b815260040180806020018281038252602b815260200180611ea7602b913960400191505060405180910390fd5b6001600160a01b038216610e275760405162461bcd60e51b8152600401808060200182810382526021815260200180611fa86021913960400191505060405180910390fd5b610e6481604051806060016040528060228152602001611e85602291396001600160a01b0385166000908152600160205260409020549190611b2a565b6001600160a01b038316600090815260016020526040902055600354610e8a9082611bc1565b6003556040805182815290516000916001600160a01b03851691600080516020611f888339815191529181900360200190a35050565b60095460ff1681565b6001600160a01b0381166000908152600a602090815260408083206001908101549252822054610ef89161162e565b92915050565b610f0661168f565b6000546001600160a01b03908116911614610f56576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b610fa861168f565b6000546001600160a01b03908116911614610ff8576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b61102261168f565b6000546001600160a01b03908116911614611072576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b6009805460ff1916911515919091179055565b6007546001600160a01b03163314156110a057610c80611c03565b6006546001600160a01b03163314156110bb57610c80611ced565b336000908152600a602052604090206002810154158015906110e1575060008160010154115b611132576040805162461bcd60e51b815260206004820152601e60248201527f54696d656c6f636b3a206e6f20746f6b656e7320746f2072656c656173650000604482015290519081900360640190fd5b6008548154141561117b57600061115082600201546019606461129e565b42835560018301549091506111659082611bc1565b60018301556111743382610945565b5050610c9d565b80546000906201518090611190904290611bc1565b8161119757fe5b049050601e8110156111a857600080fd5b60006111bb83600201546019606461129e565b905082600101548111156111d0575060018201545b42835560018301546111e29082611bc1565b60018401556111f13382610945565b505050565b6000546001600160a01b031690565b60408051808201909152600381526221262b60e91b602082015290565b600061074561122f61168f565b846107ed85604051806060016040528060258152602001612012602591396002600061125961168f565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611b2a565b600061074561129761168f565b848461177f565b60008060006112ad8686611d89565b915091508381106112ba57fe5b600084806112c457fe5b8688099050828111156112d8576001820391505b9182900391600085900385168086816112ed57fe5b0495508084816112f957fe5b04935080816000038161130857fe5b046001019290920292909201600285810380870282030280870282030280870282030280870282030280870282030280870282030295860290039094029390930295945050505050565b6040518060400160405280600381526020016221262b60e91b81525081565b6004546001600160a01b031681565b6040518060400160405280601081526020016f42656c6c65767565204e6574776f726b60801b81525081565b6001600160a01b031660009081526001602052604090205490565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b60085481565b6005546001600160a01b031681565b61140f61168f565b6000546001600160a01b0390811691161461145f576040805162461bcd60e51b81526020600482018190526024820152600080516020611f68833981519152604482015290519081900360640190fd5b6001600160a01b0381166114a45760405162461bcd60e51b8152600401808060200182810382526026815260200180611ed26026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031661151361168f565b6001600160a01b03161461152357fe5b600954610100900460ff16611575576040805162461bcd60e51b815260206004820152601360248201527214dd185ada5b99c81a5cc8191a5cd8589b1959606a1b604482015290519081900360640190fd5b6004546006546001600160a01b039182169163b1fba3ed911661159781610ec9565b6003546040518463ffffffff1660e01b815260040180846001600160a01b031681526020018381526020018281526020019350505050602060405180830381600087803b1580156115e757600080fd5b505af192505050801561160c57506040513d602081101561160757600080fd5b505160015b61161857610bcc611dbc565b600654610c9b906001600160a01b031682610945565b600082820183811015611688576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0383166116d85760405162461bcd60e51b8152600401808060200182810382526024815260200180611fee6024913960400191505060405180910390fd5b6001600160a01b03821661171d5760405162461bcd60e51b8152600401808060200182810382526022815260200180611ef86022913960400191505060405180910390fd5b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166117c45760405162461bcd60e51b8152600401808060200182810382526025815260200180611fc96025913960400191505060405180910390fd5b6001600160a01b0382166118095760405162461bcd60e51b8152600401808060200182810382526023815260200180611e626023913960400191505060405180910390fd5b6001600160a01b0383166000908152600160205260409020548111156118605760405162461bcd60e51b8152600401808060200182810382526026815260200180611f1a6026913960400191505060405180910390fd5b6118686111f6565b6001600160a01b0316836001600160a01b0316146118cd5760095460ff16156118cd576040805162461bcd60e51b815260206004820152601260248201527121b7b73a3930b1ba1034b990333937bd32b760711b604482015290519081900360640190fd5b600954610100900460ff1615611a8e57600480546001600160a01b03858116600081815260016020526040808220548885168084528284205483516338aa7e6f60e11b8152988901959095526024880152604487018890526064870152608486019290925290519093849384931691637154fcde9160a48082019260609290919082900301818787803b15801561196357600080fd5b505af1158015611977573d6000803e3d6000fd5b505050506040513d606081101561198d57600080fd5b5080516020808301516040938401516001600160a01b03808c16600090815260019094528584208590558a1683529390912081905560035491955093509091506119d79082611bc1565b6003558015611a4c576001600160a01b03808616908716600080516020611f88833981519152611a078785611bc1565b60408051918252519081900360200190a36040805182815290516000916001600160a01b03891691600080516020611f888339815191529181900360200190a3611a86565b846001600160a01b0316866001600160a01b0316600080516020611f88833981519152866040518082815260200191505060405180910390a35b5050506111f1565b6001600160a01b038316600090815260016020526040902054611ab19082611bc1565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611ae0908261162e565b6001600160a01b038084166000818152600160209081526040918290209490945580518581529051919392871692600080516020611f8883398151915292918290030190a3505050565b60008184841115611bb95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611b7e578181015183820152602001611b66565b50505050905090810190601f168015611bab5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600061168883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b2a565b6007546001600160a01b03166000908152600a6020526040902060085481541415611c6b576000611c3b82600201546019606461129e565b4283556001830154909150611c509082611bc1565b6001830155600754611174906001600160a01b031682610945565b80546000906201518090611c80904290611bc1565b81611c8757fe5b049050605a811015611c9857600080fd5b6000611cab83600201546019606461129e565b90508260010154811115611cc0575060018201545b4283556001830154611cd29082611bc1565b60018401556007546111f1906001600160a01b031682610945565b6006546001600160a01b03166000908152600a6020526040812080549091906201518090611d1c904290611bc1565b81611d2357fe5b049050605a811015611d3457600080fd5b6000611d4783600201546019606461129e565b90508260010154811115611d5c575060018201545b4283556001830154611d6e9082611bc1565b60018401556006546111f1906001600160a01b031682610945565b6000808060001984860990508385029250828103915082811015611dae576001820391505b509250929050565b60e01c90565b600060443d1015611dcc5761072e565b600481823e6308c379a0611de08251611db6565b14611dea5761072e565b6040513d600319016004823e80513d67ffffffffffffffff8160248401118184111715611e1a575050505061072e565b82840192508251915080821115611e34575050505061072e565b503d83016020828401011115611e4c5750505061072e565b601f01601f191681016020016040529150509056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865207374616b696e6720636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202d444b667fa125b85b0d1586686274bf4ecfe1ab012b8ffb0e3dcfe66e49930864736f6c634300060c0033

Deployed Bytecode Sourcemap

16113:24004:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29535:122;;;;;;;;;;;;;;;;-1:-1:-1;29535:122:0;-1:-1:-1;;;;;29535:122:0;;:::i;:::-;;30616:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32740:159;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32740:159:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;16882:42;;;;;;;;;;;;;;;;-1:-1:-1;16882:42:0;-1:-1:-1;;;;;16882:42:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;31627:94;;;:::i;:::-;;;;;;;;;;;;;;;;33347:307;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;33347:307:0;;;;;;;;;;;;;;;;;:::i;16632:30::-;;;:::i;:::-;;;;-1:-1:-1;;;;;16632:30:0;;;;;;;;;;;;;;31493:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16476:36;;;:::i;30395:157::-;;;;;;;;;;;;;;;;-1:-1:-1;30395:157:0;-1:-1:-1;;;;;30395:157:0;;:::i;16601:26::-;;;:::i;34037:208::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34037:208:0;;;;;;;;:::i;37213:307::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37213:307:0;;;;;;;;:::i;38182:251::-;;;;;;;;;;;;;;;;-1:-1:-1;38182:251:0;;:::i;29663:368::-;;;:::i;29072:333::-;;;:::i;37828:348::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37828:348:0;;;;;;;;:::i;16708:18::-;;;:::i;31776:152::-;;;;;;;;;;;;;;;;-1:-1:-1;31776:152:0;-1:-1:-1;;;;;31776:152:0;;:::i;14647:138::-;;;:::i;29411:118::-;;;;;;;;;;;;;;;;-1:-1:-1;29411:118:0;-1:-1:-1;;;;;29411:118:0;;:::i;39181:86::-;;;;;;;;;;;;;;;;-1:-1:-1;39181:86:0;;;;:::i;26552:1090::-;;;:::i;14045:73::-;;;:::i;30802:81::-;;;:::i;34718:259::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34718:259:0;;;;;;;;:::i;32244:165::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32244:165:0;;;;;;;;:::i;39279:620::-;;;;;;;;;;;;;;;;-1:-1:-1;39279:620:0;;;;;;;;;;;;:::i;16433:38::-;;;:::i;16519:37::-;;;:::i;16379:49::-;;;:::i;31936:113::-;;;;;;;;;;;;;;;;-1:-1:-1;31936:113:0;-1:-1:-1;;;;;31936:113:0;;:::i;32464:145::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32464:145:0;;;;;;;;;;:::i;16673:26::-;;;:::i;16563:31::-;;;:::i;14930:230::-;;;;;;;;;;;;;;;;-1:-1:-1;14930:230:0;-1:-1:-1;;;;;14930:230:0;;:::i;30037:352::-;;;:::i;29535:122::-;14249:12;:10;:12::i;:::-;14239:6;;-1:-1:-1;;;;;14239:6:0;;;:22;;;14231:67;;;;;-1:-1:-1;;;14231:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14231:67:0;;;;;;;;;;;;;;;29617:16:::1;:34:::0;;-1:-1:-1;;;;;;29617:34:0::1;-1:-1:-1::0;;;;;29617:34:0;;;::::1;::::0;;;::::1;::::0;;29535:122::o;30616:77::-;30682:5;;;;;;;;;;;;-1:-1:-1;;;30682:5:0;;;;30616:77;;:::o;32740:159::-;32823:4;32836:39;32845:12;:10;:12::i;:::-;32859:7;32868:6;32836:8;:39::i;:::-;-1:-1:-1;32889:4:0;32740:159;;;;:::o;16882:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31627:94::-;31703:12;;31627:94;:::o;33347:307::-;33453:4;33466:36;33476:6;33484:9;33495:6;33466:9;:36::i;:::-;33509:121;33518:6;33526:12;:10;:12::i;:::-;33540:89;33578:6;33540:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33540:19:0;;;;;;:11;:19;;;;;;33560:12;:10;:12::i;:::-;-1:-1:-1;;;;;33540:33:0;;;;;;;;;;;;-1:-1:-1;33540:33:0;;;:89;:37;:89::i;:::-;33509:8;:121::i;:::-;-1:-1:-1;33644:4:0;33347:307;;;;;:::o;16632:30::-;;;-1:-1:-1;;;;;16632:30:0;;:::o;31493:77::-;16510:2;31493:77;:::o;16476:36::-;16510:2;16476:36;:::o;30395:157::-;14249:12;:10;:12::i;:::-;14239:6;;-1:-1:-1;;;;;14239:6:0;;;:22;;;14231:67;;;;;-1:-1:-1;;;14231:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14231:67:0;;;;;;;;;;;;;;;30483:16:::1;:34:::0;;-1:-1:-1;;;;;30483:34:0;;::::1;-1:-1:-1::0;;;;;;30483:34:0;;::::1;::::0;;;::::1;::::0;;30524:15:::1;:22:::0;;-1:-1:-1;;30524:22:0::1;30483:34;30524:22;::::0;;30395:157::o;16601:26::-;;;-1:-1:-1;;;;;16601:26:0;;:::o;34037:208::-;34125:4;34138:83;34147:12;:10;:12::i;:::-;34161:7;34170:50;34209:10;34170:11;:25;34182:12;:10;:12::i;:::-;-1:-1:-1;;;;;34170:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;34170:25:0;;;:34;;;;;;;;;;;:38;:50::i;37213:307::-;17122:16;;-1:-1:-1;;;;;17122:16:0;17100:10;:39;17092:95;;;;-1:-1:-1;;;17092:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37302:21:0;::::1;37294:65;;;::::0;;-1:-1:-1;;;37294:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;37383:12;::::0;:24:::1;::::0;37400:6;37383:16:::1;:24::i;:::-;37368:12;:39:::0;-1:-1:-1;;;;;37435:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;:30:::1;::::0;37458:6;37435:22:::1;:30::i;:::-;-1:-1:-1::0;;;;;37414:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;:51;;;;37477:37;;;;;;;37414:18;;;;-1:-1:-1;;;;;;;;;;;37477:37:0;;;;;;;;::::1;37213:307:::0;;:::o;38182:251::-;38254:73;38282:6;38254:73;;;;;;;;;;;;;;;;;:9;:23;38264:12;:10;:12::i;38254:73::-;38228:9;:23;38238:12;:10;:12::i;:::-;-1:-1:-1;;;;;38228:23:0;;;;;;;;;;;;-1:-1:-1;38228:23:0;:99;38349:12;;:24;;38366:6;38349:16;:24::i;:::-;38334:12;:39;38416:1;38394:12;:10;:12::i;:::-;-1:-1:-1;;;;;38385:42:0;-1:-1:-1;;;;;;;;;;;38420:6:0;38385:42;;;;;;;;;;;;;;;;;;38182:251;:::o;29663:368::-;16986:16;;-1:-1:-1;;;;;16986:16:0;16970:12;:10;:12::i;:::-;-1:-1:-1;;;;;16970:32:0;;16963:71;;;;29731:15:::1;::::0;::::1;::::0;::::1;;;29723:47;;;::::0;;-1:-1:-1;;;29723:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29723:47:0;;;;;;;;;;;;;::::1;;29781:16;::::0;29813:15:::1;::::0;-1:-1:-1;;;;;29781:16:0;;::::1;::::0;:31:::1;::::0;29813:15:::1;29830:26;29813:15:::0;29830:9:::1;:26::i;:::-;29858:12;;29781:90;;;;;;;;;;;;;-1:-1:-1::0;;;;;29781:90:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;29781:90:0;::::1;;29777:249;;;;:::i;:::-;;;;;;;;29999:19;30012:5;29999:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29951:75;29777:249;;;;;::::0;::::1;;;;;;;;29915:15;::::0;29909:33:::1;::::0;-1:-1:-1;;;;;29915:15:0::1;29932:9:::0;29909:5:::1;:33::i;:::-;29872:78;29777:249;29663:368::o:0;29072:333::-;29120:15;;;;;;;29112:47;;;;;-1:-1:-1;;;29112:47:0;;;;;;;;;;;;-1:-1:-1;;;29112:47:0;;;;;;;;;;;;;;;29170:16;;;29202:10;29170:16;29214:21;;;29170:16;29214:21;;;;;;;;;29237:12;;29170:80;;-1:-1:-1;;;29170:80:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29170:16:0;;;;:31;;:80;;;;;29214:21;29170:80;;;;;;;;;:16;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29170:80:0;;;29166:234;;;;:::i;:::-;29288:28;29294:10;29306:9;29288:5;:28::i;37828:348::-;17122:16;;-1:-1:-1;;;;;17122:16:0;17100:10;:39;17092:95;;;;-1:-1:-1;;;17092:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37920:21:0;::::1;37912:67;;;;-1:-1:-1::0;;;37912:67:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38007:68;38030:6;38007:68;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;38007:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;:68;:22:::1;:68::i;:::-;-1:-1:-1::0;;;;;37986:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;:89;38097:12:::1;::::0;:24:::1;::::0;38114:6;38097:16:::1;:24::i;:::-;38082:12;:39:::0;38133:37:::1;::::0;;;;;;;38159:1:::1;::::0;-1:-1:-1;;;;;38133:37:0;::::1;::::0;-1:-1:-1;;;;;;;;;;;38133:37:0;;;;::::1;::::0;;::::1;37828:348:::0;;:::o;16708:18::-;;;;;;:::o;31776:152::-;-1:-1:-1;;;;;31888:16:0;;31842:7;31888:16;;;:7;:16;;;;;;;;:33;;;;;31865:18;;;;;:57;;:22;:57::i;:::-;31858:64;31776:152;-1:-1:-1;;31776:152:0:o;14647:138::-;14249:12;:10;:12::i;:::-;14239:6;;-1:-1:-1;;;;;14239:6:0;;;:22;;;14231:67;;;;;-1:-1:-1;;;14231:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14231:67:0;;;;;;;;;;;;;;;14750:1:::1;14734:6:::0;;14713:40:::1;::::0;-1:-1:-1;;;;;14734:6:0;;::::1;::::0;14713:40:::1;::::0;14750:1;;14713:40:::1;14777:1;14760:19:::0;;-1:-1:-1;;;;;;14760:19:0::1;::::0;;14647:138::o;29411:118::-;14249:12;:10;:12::i;:::-;14239:6;;-1:-1:-1;;;;;14239:6:0;;;:22;;;14231:67;;;;;-1:-1:-1;;;14231:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14231:67:0;;;;;;;;;;;;;;;29491:15:::1;:32:::0;;-1:-1:-1;;;;;;29491:32:0::1;-1:-1:-1::0;;;;;29491:32:0;;;::::1;::::0;;;::::1;::::0;;29411:118::o;39181:86::-;14249:12;:10;:12::i;:::-;14239:6;;-1:-1:-1;;;;;14239:6:0;;;:22;;;14231:67;;;;;-1:-1:-1;;;14231:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14231:67:0;;;;;;;;;;;;;;;39245:6:::1;:16:::0;;-1:-1:-1;;39245:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39181:86::o;26552:1090::-;26610:15;;-1:-1:-1;;;;;26610:15:0;26596:10;:29;26593:173;;;26638:17;:15;:17::i;26593:173::-;26704:11;;-1:-1:-1;;;;;26704:11:0;26690:10;:25;26686:80;;;26728:13;:11;:13::i;26686:80::-;26810:10;26778:21;26802:19;;;:7;:19;;;;;26836:18;;;;:22;;;;:53;;;26888:1;26862:6;:23;;;:27;26836:53;26828:96;;;;;-1:-1:-1;;;26828:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26962:14;;26940:18;;:36;26937:281;;;26989:11;27003:35;27010:6;:18;;;27030:2;27034:3;27003:6;:35::i;:::-;27070:15;27049:36;;27122:23;;;;26989:49;;-1:-1:-1;27122:35:0;;26989:49;27122:27;:35::i;:::-;27096:23;;;:61;27168:25;27174:10;27186:6;27168:5;:25::i;:::-;27204:7;;;;26937:281;27271:18;;27230;;27293:5;;27251:39;;:15;;:19;:39::i;:::-;:47;;;;;;27230:68;;27336:2;27319:13;:19;;27311:28;;;;;;27352:11;27366:35;27373:6;:18;;;27393:2;27397:3;27366:6;:35::i;:::-;27352:49;;27420:6;:23;;;27411:6;:32;27408:88;;;-1:-1:-1;27465:23:0;;;;27408:88;27523:15;27502:36;;27571:23;;;;:35;;27599:6;27571:27;:35::i;:::-;27545:23;;;:61;27613:25;27619:10;27631:6;27613:5;:25::i;:::-;26552:1090;;;:::o;14045:73::-;14083:7;14106:6;-1:-1:-1;;;;;14106:6:0;14045:73;:::o;30802:81::-;30870:7;;;;;;;;;;;;-1:-1:-1;;;30870:7:0;;;;30802:81;:::o;34718:259::-;34811:4;34824:129;34833:12;:10;:12::i;:::-;34847:7;34856:96;34895:15;34856:96;;;;;;;;;;;;;;;;;:11;:25;34868:12;:10;:12::i;:::-;-1:-1:-1;;;;;34856:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;34856:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;32244:165::-;32330:4;32343:42;32353:12;:10;:12::i;:::-;32367:9;32378:6;32343:9;:42::i;39279:620::-;39341:4;39361:6;39369;39379:14;39388:1;39391;39379:7;:14::i;:::-;39360:33;;;;39418:1;39414;:5;39406:14;;;;39433:7;39457:1;39443:16;;;;;39454:1;39451;39443:16;39433:26;;39481:1;39476:2;:6;39472:18;;;39489:1;39484:6;;;;39472:18;39503:7;;;;;39523:9;39539:2;;;39535:6;;;39540:1;39535:6;39554:9;;;;;;;39581:4;39576:9;;;;;;;;;39618:4;39610;39609:5;;39608:14;;;;;;39625:1;39608:18;39603:24;;;;39598:29;;;;39668:1;:9;;;39699:5;;;39695:9;;39690:14;39726:5;;;39722:9;;39717:14;39753:5;;;39749:9;;39744:14;39780:5;;;39776:9;;39771:14;39807:5;;;39803:9;;39798:14;39834:5;;;39830:9;;39825:14;39861:5;;;39857:9;;39852:14;;;39886:5;;;;;39279:620;-1:-1:-1;;;;;39279:620:0:o;16433:38::-;;;;;;;;;;;;;;-1:-1:-1;;;16433:38:0;;;;:::o;16519:37::-;;;-1:-1:-1;;;;;16519:37:0;;:::o;16379:49::-;;;;;;;;;;;;;;-1:-1:-1;;;16379:49:0;;;;:::o;31936:113::-;-1:-1:-1;;;;;32025:18:0;32002:7;32025:18;;;:9;:18;;;;;;;31936:113::o;32464:145::-;-1:-1:-1;;;;;32576:18:0;;;32553:7;32576:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;32464:145::o;16673:26::-;;;;:::o;16563:31::-;;;-1:-1:-1;;;;;16563:31:0;;:::o;14930:230::-;14249:12;:10;:12::i;:::-;14239:6;;-1:-1:-1;;;;;14239:6:0;;;:22;;;14231:67;;;;;-1:-1:-1;;;14231:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;14231:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15015:22:0;::::1;15007:73;;;;-1:-1:-1::0;;;15007:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15113:6;::::0;;15092:38:::1;::::0;-1:-1:-1;;;;;15092:38:0;;::::1;::::0;15113:6;::::1;::::0;15092:38:::1;::::0;::::1;15137:6;:17:::0;;-1:-1:-1;;;;;;15137:17:0::1;-1:-1:-1::0;;;;;15137:17:0;;;::::1;::::0;;;::::1;::::0;;14930:230::o;30037:352::-;16986:16;;-1:-1:-1;;;;;16986:16:0;16970:12;:10;:12::i;:::-;-1:-1:-1;;;;;16970:32:0;;16963:71;;;;30101:15:::1;::::0;::::1;::::0;::::1;;;30093:47;;;::::0;;-1:-1:-1;;;30093:47:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;30093:47:0;;;;;;;;;;;;;::::1;;30151:16;::::0;30183:11:::1;::::0;-1:-1:-1;;;;;30151:16:0;;::::1;::::0;:31:::1;::::0;30183:11:::1;30196:22;30183:11:::0;30196:9:::1;:22::i;:::-;30220:12;;30151:82;;;;;;;;;;;;;-1:-1:-1::0;;;;;30151:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30151:82:0;::::1;;30147:237;;;;:::i;:::-;30277:11;::::0;30271:29:::1;::::0;-1:-1:-1;;;;;30277:11:0::1;30290:9:::0;30271:5:::1;:29::i;9444:167::-:0;9502:7;9530:5;;;9550:6;;;;9542:46;;;;;-1:-1:-1;;;9542:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9604:1;9444:167;-1:-1:-1;;;9444:167:0:o;8296:100::-;8380:10;8296:100;:::o;38845:328::-;-1:-1:-1;;;;;38943:19:0;;38935:68;;;;-1:-1:-1;;;38935:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39018:21:0;;39010:68;;;;-1:-1:-1;;;39010:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39087:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;39135:32;;;;;;;;;;;;;;;;;38845:328;;;:::o;35437:1207::-;-1:-1:-1;;;;;35539:20:0;;35531:70;;;;-1:-1:-1;;;35531:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35616:23:0;;35608:71;;;;-1:-1:-1;;;35608:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35694:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;35694:27:0;35686:78;;;;-1:-1:-1;;;35686:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35784:7;:5;:7::i;:::-;-1:-1:-1;;;;;35774:17:0;:6;-1:-1:-1;;;;;35774:17:0;;35771:87;;35812:6;;;;:15;35804:46;;;;;-1:-1:-1;;;35804:46:0;;;;;;;;;;;;-1:-1:-1;;;35804:46:0;;;;;;;;;;;;;;;35881:15;;;;;;;35878:761;;;35979:16;;;-1:-1:-1;;;;;36036:17:0;;;35908:21;36036:17;;;35979:16;36036:17;;;;;;;36055:20;;;;;;;;;;35979:97;;-1:-1:-1;;;35979:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35908:21;;;;;;35979:16;;:29;;:97;;;;;;;;;;;;;;;35908:21;35979:16;:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35979:97:0;;;;;;;;;;;;-1:-1:-1;;;;;36085:17:0;;;;;;;:9;:17;;;;;;:33;;;36127:20;;;;;;;;:39;;;36190:12;;35979:97;;-1:-1:-1;35979:97:0;-1:-1:-1;35979:97:0;;-1:-1:-1;36190:28:0;;35979:97;36190:16;:28::i;:::-;36175:12;:43;36231:14;;36227:220;;-1:-1:-1;;;;;36263:51:0;;;;;;-1:-1:-1;;;;;;;;;;;36291:22:0;:6;36302:10;36291;:22::i;:::-;36263:51;;;;;;;;;;;;;;;36330:40;;;;;;;;36355:1;;-1:-1:-1;;;;;36330:40:0;;;-1:-1:-1;;;;;;;;;;;36330:40:0;;;;;;;;36227:220;;;36419:9;-1:-1:-1;;;;;36402:35:0;36411:6;-1:-1:-1;;;;;36402:35:0;-1:-1:-1;;;;;;;;;;;36430:6:0;36402:35;;;;;;;;;;;;;;;;;;36227:220;35878:761;;;;;;-1:-1:-1;;;;;36489:17:0;;;;;;:9;:17;;;;;;:29;;36511:6;36489:21;:29::i;:::-;-1:-1:-1;;;;;36469:17:0;;;;;;;:9;:17;;;;;;:49;;;;36550:20;;;;;;;:32;;36575:6;36550:24;:32::i;:::-;-1:-1:-1;;;;;36527:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;36596:35;;;;;;;36527:20;;36596:35;;;;-1:-1:-1;;;;;;;;;;;36596:35:0;;;;;;;;35437:1207;;;:::o;10271:178::-;10357:7;10389:12;10381:6;;;;10373:29;;;;-1:-1:-1;;;10373:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10421:5:0;;;10271:178::o;9866:130::-;9924:7;9947:43;9951:1;9954;9947:43;;;;;;;;;;;;;;;;;:3;:43::i;27650:867::-;27729:15;;-1:-1:-1;;;;;27729:15:0;27697:21;27721:24;;;:7;:24;;;;;27781:14;;27759:18;;:36;27756:310;;;27812:11;27826:35;27833:6;:18;;;27853:2;27857:3;27826:6;:35::i;:::-;27897:15;27876:36;;27953:23;;;;27812:49;;-1:-1:-1;27953:35:0;;27812:49;27953:27;:35::i;:::-;27927:23;;;:61;28009:15;;28003:30;;-1:-1:-1;;;;;28009:15:0;28026:6;28003:5;:30::i;27756:310::-;28117:18;;28076;;28139:5;;28097:39;;:15;;:19;:39::i;:::-;:47;;;;;;28076:68;;28180:2;28163:13;:19;;28155:28;;;;;;28194:11;28208:35;28215:6;:18;;;28235:2;28239:3;28208:6;:35::i;:::-;28194:49;;28266:6;:23;;;28257:6;:32;28254:96;;;-1:-1:-1;28315:23:0;;;;28254:96;28381:15;28360:36;;28433:23;;;;:35;;28461:6;28433:27;:35::i;:::-;28407:23;;;:61;28485:15;;28479:30;;-1:-1:-1;;;;;28485:15:0;28502:6;28479:5;:30::i;28529:535::-;28604:11;;-1:-1:-1;;;;;28604:11:0;28572:21;28596:20;;;:7;:20;;;;;28668:18;;28596:20;;28572:21;28690:5;;28648:39;;:15;;:19;:39::i;:::-;:47;;;;;;28627:68;;28731:2;28714:13;:19;;28706:28;;;;;;28745:11;28759:35;28766:6;:18;;;28786:2;28790:3;28759:6;:35::i;:::-;28745:49;;28817:6;:23;;;28808:6;:32;28805:96;;;-1:-1:-1;28866:23:0;;;;28805:96;28932:15;28911:36;;28984:23;;;;:35;;29012:6;28984:27;:35::i;:::-;28958:23;;;:61;29036:11;;29030:26;;-1:-1:-1;;;;;29036:11:0;29049:6;29030:5;:26::i;39911:203::-;39967:6;;;-1:-1:-1;;40017:1:0;40014;40006:24;39996:34;;40051:1;40047;:5;40043:9;;40074:1;40069:2;:6;40065:10;;40097:1;40092:2;:6;40088:18;;;40105:1;40100:6;;;;40088:18;39911:203;;;;;;:::o;110:106:-1:-;195:3;191:15;;163:53::o;224:739::-;;297:4;279:16;276:26;273:2;;;305:5;;273:2;339:1;-1:-1;;318:23;414:10;357:34;-1:-1;382:8;357:34;:::i;:::-;406:19;396:2;;429:5;;396:2;460;454:9;496:16;-1:-1;;492:24;339:1;454:9;468:49;543:4;537:11;624:16;576:18;624:16;617:4;609:6;605:17;602:39;576:18;568:6;565:30;556:91;553:2;;;655:5;;;;;;553:2;693:6;687:4;683:17;672:28;;725:3;719:10;705:24;;576:18;740:6;737:30;734:2;;;770:5;;;;;;734:2;;847:16;841:4;837:27;807:4;814:6;802:3;794:27;;829:36;826:2;;;868:5;;;;;826:2;89:7;73:14;-1:-1;;69:28;892:50;;807:4;892:50;460:2;881:62;900:3;-1:-1;;267:696;:::o

Swarm Source

ipfs://2d444b667fa125b85b0d1586686274bf4ecfe1ab012b8ffb0e3dcfe66e499308
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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