ETH Price: $1,929.58 (-2.85%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Remove Liquidity112824202020-11-18 14:15:041929 days ago1605708904IN
0xAae6ea9b...A8D807008
0 ETH0.0055838790
Add Liquidity112800722020-11-18 5:33:501930 days ago1605677630IN
0xAae6ea9b...A8D807008
3 ETH0.013647194.00000145
Remove Liquidity112800182020-11-18 5:21:101930 days ago1605676870IN
0xAae6ea9b...A8D807008
0 ETH0.0127860390
Remove Liquidity112798522020-11-18 4:44:371930 days ago1605674677IN
0xAae6ea9b...A8D807008
0 ETH0.0119336284
Remove Liquidity112783062020-11-17 23:07:161930 days ago1605654436IN
0xAae6ea9b...A8D807008
0 ETH0.0086386855
Remove Liquidity112774332020-11-17 19:45:591930 days ago1605642359IN
0xAae6ea9b...A8D807008
0 ETH0.0017253874
Remove Liquidity112774322020-11-17 19:45:541930 days ago1605642354IN
0xAae6ea9b...A8D807008
0 ETH0.0017253874
Remove Liquidity112774312020-11-17 19:45:511930 days ago1605642351IN
0xAae6ea9b...A8D807008
0 ETH0.0105129574
Add Liquidity112772372020-11-17 18:58:301930 days ago1605639510IN
0xAae6ea9b...A8D807008
1 ETH0.0072895256
Remove Liquidity112769472020-11-17 17:58:431930 days ago1605635923IN
0xAae6ea9b...A8D807008
0 ETH0.01710328108.9
Add Liquidity112760692020-11-17 14:47:491930 days ago1605624469IN
0xAae6ea9b...A8D807008
4 ETH0.0117554390.3
Add Liquidity112747952020-11-17 10:10:111930 days ago1605607811IN
0xAae6ea9b...A8D807008
1 ETH0.0075494652
Remove Liquidity112742342020-11-17 8:09:441931 days ago1605600584IN
0xAae6ea9b...A8D807008
0 ETH0.0075386448
Add Liquidity112740032020-11-17 7:13:021931 days ago1605597182IN
0xAae6ea9b...A8D807008
4 ETH0.0060976442
Add Liquidity112736562020-11-17 6:02:111931 days ago1605592931IN
0xAae6ea9b...A8D807008
5 ETH0.0069687348
Remove Liquidity112730242020-11-17 3:35:361931 days ago1605584136IN
0xAae6ea9b...A8D807008
0 ETH0.0090915264.00000123
Add Liquidity112720542020-11-17 0:03:451931 days ago1605571425IN
0xAae6ea9b...A8D807008
1 ETH0.0046319931.9047619
Add Liquidity112718572020-11-16 23:20:081931 days ago1605568808IN
0xAae6ea9b...A8D807008
3 ETH0.0042102729
Add Liquidity112713692020-11-16 21:35:521931 days ago1605562552IN
0xAae6ea9b...A8D807008
3.27 ETH0.0049376334.01
Remove Liquidity112709272020-11-16 19:58:051931 days ago1605556685IN
0xAae6ea9b...A8D807008
0 ETH0.001211852
Remove Liquidity112709272020-11-16 19:58:051931 days ago1605556685IN
0xAae6ea9b...A8D807008
0 ETH0.0004917121.1
Remove Liquidity112709212020-11-16 19:56:491931 days ago1605556609IN
0xAae6ea9b...A8D807008
0 ETH0.0049719235
Remove Liquidity112708822020-11-16 19:46:331931 days ago1605555993IN
0xAae6ea9b...A8D807008
0 ETH0.0051139836
Add Liquidity112708212020-11-16 19:34:191931 days ago1605555259IN
0xAae6ea9b...A8D807008
0.25 ETH0.0066783746
Add Liquidity112706052020-11-16 18:47:421931 days ago1605552462IN
0xAae6ea9b...A8D807008
2.025 ETH0.0056620939
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-112824202020-11-18 14:15:041929 days ago1605708904
0xAae6ea9b...A8D807008
541.27888068 ETH
-112800182020-11-18 5:21:101930 days ago1605676870
0xAae6ea9b...A8D807008
45 ETH
-112798522020-11-18 4:44:371930 days ago1605674677
0xAae6ea9b...A8D807008
49 ETH
-112783062020-11-17 23:07:161930 days ago1605654436
0xAae6ea9b...A8D807008
33 ETH
-112774312020-11-17 19:45:511930 days ago1605642351
0xAae6ea9b...A8D807008
2.025 ETH
-112769472020-11-17 17:58:431930 days ago1605635923
0xAae6ea9b...A8D807008
1 ETH
-112742342020-11-17 8:09:441931 days ago1605600584
0xAae6ea9b...A8D807008
5 ETH
-112730242020-11-17 3:35:361931 days ago1605584136
0xAae6ea9b...A8D807008
2 ETH
-112709212020-11-16 19:56:491931 days ago1605556609
0xAae6ea9b...A8D807008
0.25 ETH
-112708822020-11-16 19:46:331931 days ago1605555993
0xAae6ea9b...A8D807008
1 ETH
-112705952020-11-16 18:45:441931 days ago1605552344
0xAae6ea9b...A8D807008
4.00239999 ETH
-112689842020-11-16 12:51:111931 days ago1605531071
0xAae6ea9b...A8D807008
25 ETH
-112683742020-11-16 10:40:211931 days ago1605523221
0xAae6ea9b...A8D807008
1 ETH
-112679242020-11-16 8:48:531931 days ago1605516533
0xAae6ea9b...A8D807008
1 ETH
-112675862020-11-16 7:28:141932 days ago1605511694
0xAae6ea9b...A8D807008
0.01943334 ETH
-112675782020-11-16 7:26:441932 days ago1605511604
0xAae6ea9b...A8D807008
0.1 ETH
-112668452020-11-16 4:47:431932 days ago1605502063
0xAae6ea9b...A8D807008
0.1 ETH
-112606982020-11-15 6:13:281933 days ago1605420808
0xAae6ea9b...A8D807008
65 ETH
-112548442020-11-14 8:48:541933 days ago1605343734
0xAae6ea9b...A8D807008
3.6 ETH
-112326142020-11-10 22:57:451937 days ago1605049065
0xAae6ea9b...A8D807008
2 ETH
-112256182020-11-09 21:03:581938 days ago1604955838
0xAae6ea9b...A8D807008
1 ETH
-112162232020-11-08 10:32:341939 days ago1604831554
0xAae6ea9b...A8D807008
30.0451435 ETH
-112156102020-11-08 8:12:051940 days ago1604823125
0xAae6ea9b...A8D807008
29 ETH
-112123972020-11-07 20:11:531940 days ago1604779913
0xAae6ea9b...A8D807008
1.01 ETH
-112120482020-11-07 18:53:301940 days ago1604775210
0xAae6ea9b...A8D807008
10 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
vault

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 7: vault.sol
//////////////////////////////////////////////////
//SYNLEV VAULT CONTRACT V 1.0.0
//////////////////////////

pragma solidity >= 0.6.6;

import './ownable.sol';
import './SafeMath.sol';
import './IERC20.sol';
import './priceCalculatorInterface.sol';
import './vaultHelperInterface.sol';
import './priceAggregatorInterface.sol';

/*
 * @title SynLev vault contract.
 * @author Icarus
 */
contract vault is Owned {
  using SafeMath for uint256;

  constructor() public {
    priceAggregatorInterface(0x7196545d854D03D9c87B7588F6D9e1e42D876E95).registerVaultAggregator(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);
    priceAggregator = priceAggregatorInterface(0x73f27200093b74B3d21ff4df63E14a9E3fB85cd8);
    priceCalculator = priceCalculatorInterface(0xf4c56485A09388DbdcB01056E76A7B5bf7f5F574);
    vaultHelper = vaultHelperInterface(0xE0d6b68403D32Dd659E452DB880393Df15fA00F2);
    synStakingProxy = 0x0070F3e1147c03a1Bb0caF80035B7c362D312119;
    buyFee = 4 * 10**6;
    sellFee = 4 * 10**6;
  }

  /////////////////////
  //EVENTS/////////////
  /////////////////////
  event PriceUpdate(
    uint256 bullPrice,
    uint256 bearPrice,
    uint256 bullLiqEquity,
    uint256 bearLiqEquity,
    uint256 bullEquity,
    uint256 bearEquity,
    uint256 roundId,
    bool updated
  );
  event TokenBuy(
    address account,
    address token,
    uint256 tokensMinted,
    uint256 ethin,
    uint256 fees,
    uint256 bonus
  );
  event TokenSell(
    address account,
    address token,
    uint256 tokensBurned,
    uint256 ethout,
    uint256 fees,
    uint256 penalty
  );
  event LiquidityAdd(
    address account,
    uint256 eth,
    uint256 shares,
    uint256 shareprice
  );
  event LiquidityRemove(
    address account,
    uint256 eth,
    uint256 shares,
    uint256 shareprice
  );

  modifier isActive() {
    require(active == true);
    if(active == true && !priceAggregator.roundIdCheck(address(this))) {
      updatePrice();
    }
    _;
  }

  modifier updateIfActive() {
    if(active == true && !priceAggregator.roundIdCheck(address(this))) {
      updatePrice();
    }
    _;
  }

  /////////////////////
  //GLOBAL VARIBLES
  /////////////////////

  bool private active;
  uint256 constant private multiplier = 3;
  address private bull;
  address private bear;
  uint256 private latestRoundId;
  mapping(address => uint256) private price;
  mapping(address => uint256) private equity;
  uint256 private buyFee;
  uint256 private sellFee;
  uint256 private totalLiqShares;
  uint256 private liqFees;
  uint256 private balanceEquity;
  mapping(address => uint256) private liqTokens;
  mapping(address => uint256) private liqEquity;
  mapping(address => uint256) private userShares;

  priceAggregatorInterface  public priceAggregator;
  priceCalculatorInterface public priceCalculator;
  vaultHelperInterface public vaultHelper;
  address payable public synStakingProxy;

  //Fallback function
  receive() external payable {}

  ////////////////////////////////////
  //LOW LEVEL BUY AND SELL FUNCTIONS//
  //        NO SAFETY CHECK         //
  //SHOULD ONLY BE CALLED BY OTHER  //
  //          CONTRACTS             //
  ////////////////////////////////////

  /*
   * @notice Buys bull or bear token and updates price before token buy.
   * @param token bull or bear token address
   * @param account Recipient of newly minted tokens
   * @dev Should only be called by a router contract. Checks the excess ETH in
   * contract by calling getDepositEquity(). Can't 0 ETH buy. Calculates
   * resulting tokens and fees. Sends fees and mints tokens.
   *
   */
  function tokenBuy(address token, address account)
  public
  virtual
  isActive()
  {
    uint256 ethin = getDepositEquity();
    require(ethin > 0);
    require(token == bull || token == bear);
    IERC20 itkn = IERC20(token);
    uint256 fees = ethin.mul(buyFee).div(10**9);
    uint256 buyeth = ethin.sub(fees);
    uint256 bonus = vaultHelper.getBonus(address(this), token, buyeth);
    uint256 tokensToMint = buyeth.add(bonus).mul(10**18).div(price[token]);
    equity[token] = equity[token].add(buyeth).add(bonus);
    if(bonus != 0) balanceEquity = balanceEquity.sub(bonus);
    payFees(fees);
    itkn.mint(account, tokensToMint);

    emit TokenBuy(account, token, tokensToMint, ethin, fees, bonus);
  }

  /*
   * @notice Sells bull or bear token and updates price before token sell.
   * @param token bull or bear token address
   * @param account Recipient of resulting eth from burned tokens
   * @dev Should only be called by a router contract that simultaneously sends
   * tokens using transferFrom() and calls this function. Looks at the current
   * balance of the contract of the selected token. Can't 0 token sell.
   * Calculates resulting ETH from burned tokens. Pays fees, burns tokens, and
   * sends ETH.
   */
  function tokenSell(address token, address payable account)
  public
  virtual
  isActive()
  {
    IERC20 itkn = IERC20(token);
    uint256 tokensToBurn = itkn.balanceOf(address(this));
    require(tokensToBurn > 0);
    require(token == bull || token == bear);
    uint256 selleth = tokensToBurn.mul(price[token]).div(10**18);
    uint256 penalty = vaultHelper.getPenalty(address(this), token, selleth);
    uint256 fees = sellFee.mul(selleth.sub(penalty)).div(10**9);
    uint256 ethout = selleth.sub(penalty).sub(fees);
    equity[token] = equity[token].sub(selleth);
    if(penalty != 0) balanceEquity = balanceEquity.add(penalty);
    payFees(fees);
    itkn.burn(tokensToBurn);
    account.transfer(ethout);

    emit TokenSell(account, token, tokensToBurn, ethout, fees, penalty);
  }

  /*
   * @notice Adds liquidty to the contract and gives LP shares. Minimum LP add
   * is 1 wei. Virtually mints bear/bull tokens to be held in the vault.
   * @param account Recipient of LP shares
   * @dev Can be called by router but there is benefit to doing so. All
   * calculations are done with respect to equity and supply. Doing by price
   * creates rounding error. Calls updatePrice() then calls getLiqAddTokens()
   * to determine how many bull/bear to create.
   */
  function addLiquidity(address account)
  public
  payable
  virtual
  updateIfActive()
  {
    uint256 ethin = getDepositEquity();
    (
      uint256 bullEquity,
      uint256 bearEquity,
      uint256 bullTokens,
      uint256 bearTokens
    ) = vaultHelper.getLiqAddTokens(address(this), ethin);
    uint256 sharePrice = vaultHelper.getSharePrice(address(this));
    uint256 resultingShares = ethin.mul(10**18).div(sharePrice);
    liqEquity[bull] = liqEquity[bull].add(bullEquity);
    liqEquity[bear] = liqEquity[bear].add(bearEquity);
    liqTokens[bull] = liqTokens[bull].add(bullTokens);
    liqTokens[bear] = liqTokens[bear].add(bearTokens);
    userShares[account] = userShares[account].add(resultingShares);
    totalLiqShares = totalLiqShares.add(resultingShares);

    emit LiquidityAdd(account, ethin, resultingShares, sharePrice);
  }

  /*
   * @notice Removes liquidty to the contract and gives LP shares. Virtually
   * burns bear/bull tokens to be held in the vault. Cannot be called if user
   * has 0 shares
   * @param _shares How many shares to burn
   * @dev Cannot be called by a router as LP shares are not currently tokenized.
   * Calls updatePrice() then calls getLiqRemoveTokens() to determine how many
   * bull/bear tokens to remove.
   */
  function removeLiquidity(uint256 shares)
  public
  virtual
  updateIfActive()
  {
    require(shares <= userShares[msg.sender]);
    (
      uint256 bullEquity,
      uint256 bearEquity,
      uint256 bullTokens,
      uint256 bearTokens,
      uint256 feesPaid
    ) = vaultHelper.getLiqRemoveTokens(address(this), shares);
    uint256 sharePrice = vaultHelper.getSharePrice(address(this));
    uint256 resultingEth = bullEquity.add(bearEquity).add(feesPaid);
    liqEquity[bull] = liqEquity[bull].sub(bullEquity);
    liqEquity[bear] = liqEquity[bear].sub(bearEquity);
    liqTokens[bull] = liqTokens[bull].sub(bullTokens);
    liqTokens[bear] = liqTokens[bear].sub(bearTokens);
    userShares[msg.sender] = userShares[msg.sender].sub(shares);
    totalLiqShares = totalLiqShares.sub(shares);
    liqFees = liqFees.sub(feesPaid);
    msg.sender.transfer(resultingEth);

    emit LiquidityRemove(msg.sender, resultingEth, shares, sharePrice);
  }

  /*
   * @notice Updates price from chainlink oracles.
   * @param _shares How many shares to burn
   * @dev Calls getUpdatedPrice() function and sets new price, equity, liquidity
   * equity, and latestRoundId; only if there is new price data
   * @return bool if price was updated
   */
  function updatePrice()
  public
  {
    require(active == true);
    (
      uint256[6] memory priceArray,
      uint256 roundId,
      bool updated
    ) = priceCalculator.getUpdatedPrice(address(this), latestRoundId);
    if(updated == true) {
      (
        price[bull],
        price[bear],
        liqEquity[bull],
        liqEquity[bear],
        equity[bull],
        equity[bear],
        latestRoundId
      ) =
      (
        priceArray[0],
        priceArray[1],
        priceArray[2],
        priceArray[3],
        priceArray[4],
        priceArray[5],
        roundId
      );
    }
    emit PriceUpdate(
      price[bull],
      price[bear],
      liqEquity[bull],
      liqEquity[bear],
      equity[bull],
      equity[bear],
      latestRoundId,
      updated
    );
  }

  ///////////////////////
  //INTERNAL FUNCTIONS///
  ///////////////////////

  /*
   * @notice Pays half fees to SYN stakers and half to LP
   * @param _amount Fees to be paid in ETH
   * @dev Only called by tokenBuy() and tokenSell()
   */
  function payFees(uint256 amount) internal {
    synStakingProxy.transfer(amount.div(2));
    liqFees += amount.sub(amount.div(2));
  }

  ///////////////////
  ///VIEW FUNCTIONS//
  ///////////////////
  function getActive() public view returns(bool) {return(active);}
  function getMultiplier() public pure returns(uint256) {return(multiplier);}
  function getBullToken() public view returns(address) {return(bull);}
  function getBearToken() public view returns(address) {return(bear);}
  function getLatestRoundId() public view returns(uint256) {return(latestRoundId);}
  function getPrice(address token) public view returns(uint256) {return(price[token]);}
  function getEquity(address token) public view returns(uint256) {return(equity[token]);}
  function getBuyFee() public view returns(uint256) {return(buyFee);}
  function getSellFee() public view returns(uint256) {return(sellFee);}
  function getTotalLiqShares() public view returns(uint256) {return(totalLiqShares);}
  function getLiqFees() public view returns(uint256) {return(liqFees);}
  function getBalanceEquity() public view returns(uint256) {return(balanceEquity);}
  function getLiqTokens(address token) public view returns(uint256) {return(liqTokens[token]);}
  function getLiqEquity(address token) public view returns(uint256) {return(liqEquity[token]);}
  function getUserShares(address account) public view returns(uint256) {return(userShares[account]);}

  function getTotalEquity() public view returns(uint256) {
    return(getTokenEquity(bear).add(getTokenEquity(bull)));
  }

  function getTokenEquity(address token) public view returns(uint256) {
    return(equity[token].add(liqEquity[token]));
  }
  function getTokenLiqEquity(address token) public view returns(uint256) {
    return(liqTokens[token].mul(price[token]).div(10**18));
  }
  function getDepositEquity() public view returns(uint256) {
    return(address(this).balance.sub(liqFees.add(balanceEquity).add(getTotalEquity())));
  }
  ///////////////////
  //ADMIN FUNCTIONS//
  ///////////////////

  //One time use function to set token addresses. this can never be changed once set.
  //Cannot be included in constructor as vault must be deployed before tokens.
  function setTokens(address bearAddress, address bullAddress) public onlyOwner() {
    require(bear == address(0) || bull == address(0));
    (bull, bear) = (bullAddress, bearAddress);
    //Set initial price to .01 eth
    (price[bull], price[bear]) = (10**16, 10**16);
  }
  function setActive(bool state, uint256 roundId) public onlyOwner() {
    active = state;
    if(roundId == 0) {
      ( , latestRoundId) = priceAggregator.priceRequest(address(this), latestRoundId);
    }
    else {
      latestRoundId == roundId;
    }
  }
  //Fees in the form of 1 / 10^8
  function setBuyFee(uint256 amount) public onlyOwner() {
    require(amount <= 10**9);
    buyFee = amount;
  }
  //Sell fees limited to a maximum of 1%
  function setSellFee(uint256 amount) public onlyOwner() {
    require(amount <= 10**7);
    sellFee = amount;
  }

}

File 2 of 7: IERC20.sol
pragma solidity >= 0.6.4;

interface IERC20 {
  function totalSupply() external view returns (uint256);
  function balanceOf(address account) external view returns (uint256);
  function transfer(address recipient, uint256 amount) external returns (bool);
  function allowance(address owner, address spender) external view returns (uint256);
  function approve(address spender, uint256 amount) external returns (bool);
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  function mint(address account, uint256 amount) external;
  function burn(uint256 amount) external;
  event Transfer(address indexed from, address indexed to, uint256 value);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 3 of 7: ownable.sol
pragma solidity ^0.6.0;

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;
    }
}

contract Owned is Context {
    address private _owner;

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

    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

File 4 of 7: priceAggregatorInterface.sol
pragma solidity >= 0.6.6;

interface priceAggregatorInterface {
  function registerVaultAggregator(address oracle) external;
  function priceRequest(
    address vault,
    uint256 lastUpdated
  )
  external
  view
  returns(int256[] memory, uint256);
  function roundIdCheck(address vault) external view returns(bool);
}

File 5 of 7: priceCalculatorInterface.sol
pragma solidity >= 0.6.6;

interface priceCalculatorInterface {
  function getUpdatedPrice(
    address vault,
    uint256 latestRoundId
  )
    external
    view
    returns(
      uint256[6] memory latestPrice,
      uint256 rRoundId,
      bool updated
  );
  function getKFactor(
    uint256 targetEquity,
    uint256 bullEquity,
    uint256 bearEquity,
    uint256 totalEquity
  )
  external
  view
  returns(uint256 kFactor);
}

File 6 of 7: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

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

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

File 7 of 7: vaultHelperInterface.sol
pragma solidity >= 0.6.6;

interface vaultHelperInterface {
  function getBonus(address vault, address token, uint256 eth)
  external
  view
  returns(uint256 bonus);

  function getPenalty(address vault, address token, uint256 eth)
  external
  view
  returns(uint256 penalty);

  function getSharePrice(address vault)
  external
  view
  returns(uint256 sharePrice);

  function getLiqAddTokens(address vault, uint256 eth)
  external
  view
  returns(
    uint256 bullEquity,
    uint256 bearEquity,
    uint256 bullTokens,
    uint256 bearTokens
  );

  function getLiqRemoveTokens(address vault, uint256 eth)
  external
  view
  returns(
    uint256 bullEquity,
    uint256 bearEquity,
    uint256 bullTokens,
    uint256 bearTokens,
    uint256 feesPaid
  );
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"eth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shareprice","type":"uint256"}],"name":"LiquidityAdd","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"eth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shareprice","type":"uint256"}],"name":"LiquidityRemove","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":false,"internalType":"uint256","name":"bullPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bearPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bullLiqEquity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bearLiqEquity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bullEquity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bearEquity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"updated","type":"bool"}],"name":"PriceUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensMinted","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bonus","type":"uint256"}],"name":"TokenBuy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensBurned","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"}],"name":"TokenSell","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalanceEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBearToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBullToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDepositEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestRoundId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getLiqEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiqFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getLiqTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getTokenEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getTokenLiqEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalEquity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLiqShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUserShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceAggregator","outputs":[{"internalType":"contract priceAggregatorInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceCalculator","outputs":[{"internalType":"contract priceCalculatorInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"removeLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"},{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"setActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bearAddress","type":"address"},{"internalType":"address","name":"bullAddress","type":"address"}],"name":"setTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"synStakingProxy","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"tokenBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address payable","name":"account","type":"address"}],"name":"tokenSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vaultHelper","outputs":[{"internalType":"contract vaultHelperInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801561001057600080fd5b5060006100246001600160e01b0361018016565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506040805163446bc45360e01b8152735f4ec3df9cbd43714fe2740f5e3616155c5b841960048201529051737196545d854d03d9c87b7588f6d9e1e42d876e959163446bc45391602480830192600092919082900301818387803b1580156100d457600080fd5b505af11580156100e8573d6000803e3d6000fd5b5050600e80546001600160a01b03199081167373f27200093b74b3d21ff4df63e14a9e3fb85cd817909155600f8054821673f4c56485a09388dbdcb01056e76a7b5bf7f5f57417905560108054821673e0d6b68403d32dd659e452db880393df15fa00f2179055601180549091167270f3e1147c03a1bb0caf80035b7c362d3121191790555050623d09006006819055600755610184565b3390565b61225980620001946000396000f3fe6080604052600436106102075760003560e01c8063715018a611610118578063b5a71d14116100a0578063cbc7854e1161006f578063cbc7854e1461060c578063d344d49914610647578063daa22f7a1461067a578063e3412e3d146106ac578063f2fde38b146106d25761020e565b8063b5a71d141461055e578063ba0cb22b14610591578063c4056493146105c4578063cad29e9c146105f75761020e565b80638da5cb5b116100e75780638da5cb5b146104c25780638f818b90146104d75780639c8f9f23146104ec578063a4d7a6cc14610516578063ac86ea0c1461052b5761020e565b8063715018a6146104595780638b4cee081461046e5780638b95e335146104985780638c3b990b146104ad5761020e565b80633b252e151161019b57806347f958a71161016a57806347f958a7146103ca57806356aef98c146104055780635db214da1461041a578063673a7e281461042f5780636c4ea929146104445761020e565b80633b252e15146103325780633ba5d96d1461036d57806340490a901461038257806341976e09146103975761020e565b806321172e5d116101d757806321172e5d146102de578063289af0d8146102f35780633078fff514610308578063331637731461031d5761020e565b80629ebb10146102135780630cc835a31461023c57806316eb3814146102685780631ee60337146102ad5761020e565b3661020e57005b600080fd5b34801561021f57600080fd5b50610228610705565b604080519115158252519081900360200190f35b34801561024857600080fd5b506102666004803603602081101561025f57600080fd5b5035610715565b005b34801561027457600080fd5b5061029b6004803603602081101561028b57600080fd5b50356001600160a01b0316610783565b60408051918252519081900360200190f35b3480156102b957600080fd5b506102c261079e565b604080516001600160a01b039092168252519081900360200190f35b3480156102ea57600080fd5b506102c26107ad565b3480156102ff57600080fd5b5061029b6107bc565b34801561031457600080fd5b506102c26107c2565b34801561032957600080fd5b5061029b6107d1565b34801561033e57600080fd5b506102666004803603604081101561035557600080fd5b506001600160a01b03813581169160200135166107d7565b34801561037957600080fd5b506102c2610bd1565b34801561038e57600080fd5b5061029b610be0565b3480156103a357600080fd5b5061029b600480360360208110156103ba57600080fd5b50356001600160a01b0316610be5565b3480156103d657600080fd5b50610266600480360360408110156103ed57600080fd5b506001600160a01b0381358116916020013516610c00565b34801561041157600080fd5b5061029b610f71565b34801561042657600080fd5b506102c2610fa7565b34801561043b57600080fd5b50610266610fb6565b34801561045057600080fd5b5061029b6111c3565b34801561046557600080fd5b506102666111f5565b34801561047a57600080fd5b506102666004803603602081101561049157600080fd5b5035611297565b3480156104a457600080fd5b506102c2611304565b3480156104b957600080fd5b5061029b611313565b3480156104ce57600080fd5b506102c2611319565b3480156104e357600080fd5b5061029b611328565b3480156104f857600080fd5b506102666004803603602081101561050f57600080fd5b503561132e565b34801561052257600080fd5b5061029b611701565b34801561053757600080fd5b5061029b6004803603602081101561054e57600080fd5b50356001600160a01b0316611707565b34801561056a57600080fd5b5061029b6004803603602081101561058157600080fd5b50356001600160a01b0316611740565b34801561059d57600080fd5b5061029b600480360360208110156105b457600080fd5b50356001600160a01b0316611781565b3480156105d057600080fd5b5061029b600480360360208110156105e757600080fd5b50356001600160a01b031661179c565b34801561060357600080fd5b5061029b6117b7565b34801561061857600080fd5b506102666004803603604081101561062f57600080fd5b506001600160a01b03813581169160200135166117bd565b34801561065357600080fd5b5061029b6004803603602081101561066a57600080fd5b50356001600160a01b031661189d565b34801561068657600080fd5b506102666004803603604081101561069d57600080fd5b508035151590602001356118b8565b610266600480360360208110156106c257600080fd5b50356001600160a01b0316611a5d565b3480156106de57600080fd5b50610266600480360360208110156106f557600080fd5b50356001600160a01b0316611df2565b600054600160a01b900460ff1690565b61071d611eea565b6000546001600160a01b0390811691161461076d576040805162461bcd60e51b81526020600482018190526024820152600080516020612204833981519152604482015290519081900360640190fd5b633b9aca0081111561077e57600080fd5b600655565b6001600160a01b03166000908152600b602052604090205490565b6010546001600160a01b031681565b6011546001600160a01b031681565b60075490565b600e546001600160a01b031681565b60085490565b600054600160a01b900460ff1615156001146107f257600080fd5b600054600160a01b900460ff16151560011480156108845750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b15801561085657600080fd5b505afa15801561086a573d6000803e3d6000fd5b505050506040513d602081101561088057600080fd5b5051155b1561089157610891610fb6565b604080516370a0823160e01b8152306004820152905183916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dc57600080fd5b505afa1580156108f0573d6000803e3d6000fd5b505050506040513d602081101561090657600080fd5b505190508061091457600080fd5b6001546001600160a01b038581169116148061093d57506002546001600160a01b038581169116145b61094657600080fd5b6001600160a01b03841660009081526004602052604081205461098a90670de0b6b3a76400009061097e90859063ffffffff611eee16565b9063ffffffff611f4e16565b60105460408051637c83ffd160e01b81523060048201526001600160a01b0389811660248301526044820185905291519394506000939190921691637c83ffd1916064808301926020929190829003018186803b1580156109ea57600080fd5b505afa1580156109fe573d6000803e3d6000fd5b505050506040513d6020811015610a1457600080fd5b505190506000610a44633b9aca0061097e610a35868663ffffffff611f9016565b6007549063ffffffff611eee16565b90506000610a6882610a5c868663ffffffff611f9016565b9063ffffffff611f9016565b6001600160a01b038916600090815260056020526040902054909150610a94908563ffffffff611f9016565b6001600160a01b0389166000908152600560205260409020558215610aca57600a54610ac6908463ffffffff611fd216565b600a555b610ad38261202c565b856001600160a01b03166342966c68866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610b1957600080fd5b505af1158015610b2d573d6000803e3d6000fd5b50506040516001600160a01b038a16925083156108fc02915083906000818181858888f19350505050158015610b67573d6000803e3d6000fd5b50604080516001600160a01b03808a1682528a166020820152808201879052606081018390526080810184905260a0810185905290517fe540b6cc73989eeec2f777710efa155b6cc71a931d80862d5bf911c6109972c39181900360c00190a15050505050505050565b6001546001600160a01b031690565b600390565b6001600160a01b031660009081526004602052604090205490565b600054600160a01b900460ff161515600114610c1b57600080fd5b600054600160a01b900460ff1615156001148015610cad5750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b158015610c7f57600080fd5b505afa158015610c93573d6000803e3d6000fd5b505050506040513d6020811015610ca957600080fd5b5051155b15610cba57610cba610fb6565b6000610cc46111c3565b905060008111610cd357600080fd5b6001546001600160a01b0384811691161480610cfc57506002546001600160a01b038481169116145b610d0557600080fd5b60008390506000610d29633b9aca0061097e60065486611eee90919063ffffffff16565b90506000610d3d848363ffffffff611f9016565b6010546040805163f8956a6760e01b81523060048201526001600160a01b038a81166024830152604482018590529151939450600093919092169163f8956a67916064808301926020929190829003018186803b158015610d9d57600080fd5b505afa158015610db1573d6000803e3d6000fd5b505050506040513d6020811015610dc757600080fd5b50516001600160a01b03881660009081526004602052604081205491925090610e129061097e670de0b6b3a7640000610e06878763ffffffff611fd216565b9063ffffffff611eee16565b6001600160a01b038916600090815260056020526040902054909150610e50908390610e44908663ffffffff611fd216565b9063ffffffff611fd216565b6001600160a01b0389166000908152600560205260409020558115610e8657600a54610e82908363ffffffff611f9016565b600a555b610e8f8461202c565b846001600160a01b03166340c10f1988836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610eef57600080fd5b505af1158015610f03573d6000803e3d6000fd5b5050604080516001600160a01b03808c1682528c166020820152808201859052606081018a90526080810188905260a0810186905290517f73cfafc06c41aefbe585fd047208a7776b2334d2329decfb3d1b1f6ec8c3c41693509081900360c0019150a15050505050505050565b600154600090610fa290610f8d906001600160a01b0316611707565b600254610e44906001600160a01b0316611707565b905090565b6002546001600160a01b031690565b600054600160a01b900460ff161515600114610fd157600080fd5b610fd961219e565b600f546003546040805163416bd10760e11b815230600482015260248101929092525160009283926001600160a01b03909116916382d7a20e9160448082019261010092909190829003018186803b15801561103457600080fd5b505afa158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061010081101561106e57600080fd5b5060c081015160e082015191945092509050600181151514156111055782516020808501516040808701516060880151608089015160a08a01516001546001600160a01b03908116600081815260048a52878120600254909316808252888220838352600c8c528983208284528a84209484526005909c528983209183529890912060038e90559390935592909155919055935555555b6001546001600160a01b0390811660008181526004602090815260408083205460025490951680845281842054858552600c8452828520548286528386205496865260058552838620549286529483902054600354845198895294880191909152868301949094526060860194909452608085019390935260a084019190915260c083015282151560e0830152517fe7d4328bcca588827789f132837dde7289420fb8512d5c0a706059194fe1dfd1918190036101000190a1505050565b6000610fa26111e86111d3610f71565b600a54600954610e449163ffffffff611fd216565b479063ffffffff611f9016565b6111fd611eea565b6000546001600160a01b0390811691161461124d576040805162461bcd60e51b81526020600482018190526024820152600080516020612204833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61129f611eea565b6000546001600160a01b039081169116146112ef576040805162461bcd60e51b81526020600482018190526024820152600080516020612204833981519152604482015290519081900360640190fd5b629896808111156112ff57600080fd5b600755565b600f546001600160a01b031681565b60035490565b6000546001600160a01b031690565b60065490565b600054600160a01b900460ff16151560011480156113c05750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b15801561139257600080fd5b505afa1580156113a6573d6000803e3d6000fd5b505050506040513d60208110156113bc57600080fd5b5051155b156113cd576113cd610fb6565b336000908152600d60205260409020548111156113e957600080fd5b60105460408051639486909f60e01b815230600482015260248101849052905160009283928392839283926001600160a01b0390911691639486909f9160448082019260a092909190829003018186803b15801561144657600080fd5b505afa15801561145a573d6000803e3d6000fd5b505050506040513d60a081101561147057600080fd5b5080516020808301516040808501516060860151608090960151601054835163b9c7840b60e01b81523060048201529351969c50939a509098509496509394506000936001600160a01b039091169263b9c7840b92602480840193919291829003018186803b1580156114e257600080fd5b505afa1580156114f6573d6000803e3d6000fd5b505050506040513d602081101561150c57600080fd5b50519050600061152683610e44898963ffffffff611fd216565b6001546001600160a01b03166000908152600c6020526040902054909150611554908863ffffffff611f9016565b6001546001600160a01b039081166000908152600c6020526040808220939093556002549091168152205461158f908763ffffffff611f9016565b6002546001600160a01b039081166000908152600c60209081526040808320949094556001549092168152600b90915220546115d1908663ffffffff611f9016565b6001546001600160a01b039081166000908152600b6020526040808220939093556002549091168152205461160c908563ffffffff611f9016565b6002546001600160a01b03166000908152600b6020908152604080832093909355338252600d90522054611646908963ffffffff611f9016565b336000908152600d6020526040902055600854611669908963ffffffff611f9016565b60085560095461167f908463ffffffff611f9016565b600955604051339082156108fc029083906000818181858888f193505050501580156116af573d6000803e3d6000fd5b5060408051338152602081018390528082018a90526060810184905290517f11c75623de2058a663854f734fb8083a261970290f564abc9aa2ac01bfcbe81f9181900360800190a15050505050505050565b60095490565b6001600160a01b0381166000908152600c6020908152604080832054600590925282205461173a9163ffffffff611fd216565b92915050565b6001600160a01b038116600090815260046020908152604080832054600b90925282205461173a91670de0b6b3a76400009161097e9163ffffffff611eee16565b6001600160a01b03166000908152600d602052604090205490565b6001600160a01b03166000908152600c602052604090205490565b600a5490565b6117c5611eea565b6000546001600160a01b03908116911614611815576040805162461bcd60e51b81526020600482018190526024820152600080516020612204833981519152604482015290519081900360640190fd5b6002546001600160a01b0316158061183657506001546001600160a01b0316155b61183f57600080fd5b600280546001600160a01b03199081166001600160a01b03948516179182905560018054909116928416929092179182905590821660009081526004602052604080822092909316815291909120662386f26fc10000908190559055565b6001600160a01b031660009081526005602052604090205490565b6118c0611eea565b6000546001600160a01b03908116911614611910576040805162461bcd60e51b81526020600482018190526024820152600080516020612204833981519152604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b8415150217905580611a5957600e5460035460408051631760164960e31b81523060048201526024810192909252516001600160a01b039092169163bb00b24891604480820192600092909190829003018186803b15801561198157600080fd5b505afa158015611995573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156119be57600080fd5b81019080805160405193929190846401000000008211156119de57600080fd5b9083019060208201858111156119f357600080fd5b8251866020820283011164010000000082111715611a1057600080fd5b82525081516020918201928201910280838360005b83811015611a3d578181015183820152602001611a25565b5050505091909101604052506020015160035550611a59915050565b5050565b600054600160a01b900460ff1615156001148015611aef5750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b158015611ac157600080fd5b505afa158015611ad5573d6000803e3d6000fd5b505050506040513d6020811015611aeb57600080fd5b5051155b15611afc57611afc610fb6565b6000611b066111c3565b60105460408051630bdc478960e01b81523060048201526024810184905290519293506000928392839283926001600160a01b0390921691630bdc478991604480820192608092909190829003018186803b158015611b6457600080fd5b505afa158015611b78573d6000803e3d6000fd5b505050506040513d6080811015611b8e57600080fd5b508051602080830151604080850151606090950151601054825163b9c7840b60e01b81523060048201529251959a509298509496509394506000936001600160a01b039091169263b9c7840b92602480840193919291829003018186803b158015611bf857600080fd5b505afa158015611c0c573d6000803e3d6000fd5b505050506040513d6020811015611c2257600080fd5b505190506000611c448261097e89670de0b6b3a764000063ffffffff611eee16565b6001546001600160a01b03166000908152600c6020526040902054909150611c72908763ffffffff611fd216565b6001546001600160a01b039081166000908152600c60205260408082209390935560025490911681522054611cad908663ffffffff611fd216565b6002546001600160a01b039081166000908152600c60209081526040808320949094556001549092168152600b9091522054611cef908563ffffffff611fd216565b6001546001600160a01b039081166000908152600b60205260408082209390935560025490911681522054611d2a908463ffffffff611fd216565b6002546001600160a01b039081166000908152600b6020908152604080832094909455918b168152600d9091522054611d69908263ffffffff611fd216565b6001600160a01b0389166000908152600d6020526040902055600854611d95908263ffffffff611fd216565b600855604080516001600160a01b038a168152602081018990528082018390526060810184905290517fe1d1934c742278e3794231612340f57d39d41877f0106ef92422f2f86ce07bf49181900360800190a15050505050505050565b611dfa611eea565b6000546001600160a01b03908116911614611e4a576040805162461bcd60e51b81526020600482018190526024820152600080516020612204833981519152604482015290519081900360640190fd5b6001600160a01b038116611e8f5760405162461bcd60e51b81526004018080602001828103825260268152602001806121bd6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082611efd5750600061173a565b82820282848281611f0a57fe5b0414611f475760405162461bcd60e51b81526004018080602001828103825260218152602001806121e36021913960400191505060405180910390fd5b9392505050565b6000611f4783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120a2565b6000611f4783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612144565b600082820183811015611f47576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6011546001600160a01b03166108fc61204c83600263ffffffff611f4e16565b6040518115909202916000818181858888f19350505050158015612074573d6000803e3d6000fd5b5061209661208982600263ffffffff611f4e16565b829063ffffffff611f9016565b60098054909101905550565b6000818361212e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120f35781810151838201526020016120db565b50505050905090810190601f1680156121205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161213a57fe5b0495945050505050565b600081848411156121965760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156120f35781810151838201526020016120db565b505050900390565b6040518060c00160405280600690602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220fb60cc37e50db57b971c82f504c47f2b825744041c647692b8ff7f2e5b92b05b64736f6c63430006060033

Deployed Bytecode

0x6080604052600436106102075760003560e01c8063715018a611610118578063b5a71d14116100a0578063cbc7854e1161006f578063cbc7854e1461060c578063d344d49914610647578063daa22f7a1461067a578063e3412e3d146106ac578063f2fde38b146106d25761020e565b8063b5a71d141461055e578063ba0cb22b14610591578063c4056493146105c4578063cad29e9c146105f75761020e565b80638da5cb5b116100e75780638da5cb5b146104c25780638f818b90146104d75780639c8f9f23146104ec578063a4d7a6cc14610516578063ac86ea0c1461052b5761020e565b8063715018a6146104595780638b4cee081461046e5780638b95e335146104985780638c3b990b146104ad5761020e565b80633b252e151161019b57806347f958a71161016a57806347f958a7146103ca57806356aef98c146104055780635db214da1461041a578063673a7e281461042f5780636c4ea929146104445761020e565b80633b252e15146103325780633ba5d96d1461036d57806340490a901461038257806341976e09146103975761020e565b806321172e5d116101d757806321172e5d146102de578063289af0d8146102f35780633078fff514610308578063331637731461031d5761020e565b80629ebb10146102135780630cc835a31461023c57806316eb3814146102685780631ee60337146102ad5761020e565b3661020e57005b600080fd5b34801561021f57600080fd5b50610228610705565b604080519115158252519081900360200190f35b34801561024857600080fd5b506102666004803603602081101561025f57600080fd5b5035610715565b005b34801561027457600080fd5b5061029b6004803603602081101561028b57600080fd5b50356001600160a01b0316610783565b60408051918252519081900360200190f35b3480156102b957600080fd5b506102c261079e565b604080516001600160a01b039092168252519081900360200190f35b3480156102ea57600080fd5b506102c26107ad565b3480156102ff57600080fd5b5061029b6107bc565b34801561031457600080fd5b506102c26107c2565b34801561032957600080fd5b5061029b6107d1565b34801561033e57600080fd5b506102666004803603604081101561035557600080fd5b506001600160a01b03813581169160200135166107d7565b34801561037957600080fd5b506102c2610bd1565b34801561038e57600080fd5b5061029b610be0565b3480156103a357600080fd5b5061029b600480360360208110156103ba57600080fd5b50356001600160a01b0316610be5565b3480156103d657600080fd5b50610266600480360360408110156103ed57600080fd5b506001600160a01b0381358116916020013516610c00565b34801561041157600080fd5b5061029b610f71565b34801561042657600080fd5b506102c2610fa7565b34801561043b57600080fd5b50610266610fb6565b34801561045057600080fd5b5061029b6111c3565b34801561046557600080fd5b506102666111f5565b34801561047a57600080fd5b506102666004803603602081101561049157600080fd5b5035611297565b3480156104a457600080fd5b506102c2611304565b3480156104b957600080fd5b5061029b611313565b3480156104ce57600080fd5b506102c2611319565b3480156104e357600080fd5b5061029b611328565b3480156104f857600080fd5b506102666004803603602081101561050f57600080fd5b503561132e565b34801561052257600080fd5b5061029b611701565b34801561053757600080fd5b5061029b6004803603602081101561054e57600080fd5b50356001600160a01b0316611707565b34801561056a57600080fd5b5061029b6004803603602081101561058157600080fd5b50356001600160a01b0316611740565b34801561059d57600080fd5b5061029b600480360360208110156105b457600080fd5b50356001600160a01b0316611781565b3480156105d057600080fd5b5061029b600480360360208110156105e757600080fd5b50356001600160a01b031661179c565b34801561060357600080fd5b5061029b6117b7565b34801561061857600080fd5b506102666004803603604081101561062f57600080fd5b506001600160a01b03813581169160200135166117bd565b34801561065357600080fd5b5061029b6004803603602081101561066a57600080fd5b50356001600160a01b031661189d565b34801561068657600080fd5b506102666004803603604081101561069d57600080fd5b508035151590602001356118b8565b610266600480360360208110156106c257600080fd5b50356001600160a01b0316611a5d565b3480156106de57600080fd5b50610266600480360360208110156106f557600080fd5b50356001600160a01b0316611df2565b600054600160a01b900460ff1690565b61071d611eea565b6000546001600160a01b0390811691161461076d576040805162461bcd60e51b81526020600482018190526024820152600080516020612204833981519152604482015290519081900360640190fd5b633b9aca0081111561077e57600080fd5b600655565b6001600160a01b03166000908152600b602052604090205490565b6010546001600160a01b031681565b6011546001600160a01b031681565b60075490565b600e546001600160a01b031681565b60085490565b600054600160a01b900460ff1615156001146107f257600080fd5b600054600160a01b900460ff16151560011480156108845750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b15801561085657600080fd5b505afa15801561086a573d6000803e3d6000fd5b505050506040513d602081101561088057600080fd5b5051155b1561089157610891610fb6565b604080516370a0823160e01b8152306004820152905183916000916001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156108dc57600080fd5b505afa1580156108f0573d6000803e3d6000fd5b505050506040513d602081101561090657600080fd5b505190508061091457600080fd5b6001546001600160a01b038581169116148061093d57506002546001600160a01b038581169116145b61094657600080fd5b6001600160a01b03841660009081526004602052604081205461098a90670de0b6b3a76400009061097e90859063ffffffff611eee16565b9063ffffffff611f4e16565b60105460408051637c83ffd160e01b81523060048201526001600160a01b0389811660248301526044820185905291519394506000939190921691637c83ffd1916064808301926020929190829003018186803b1580156109ea57600080fd5b505afa1580156109fe573d6000803e3d6000fd5b505050506040513d6020811015610a1457600080fd5b505190506000610a44633b9aca0061097e610a35868663ffffffff611f9016565b6007549063ffffffff611eee16565b90506000610a6882610a5c868663ffffffff611f9016565b9063ffffffff611f9016565b6001600160a01b038916600090815260056020526040902054909150610a94908563ffffffff611f9016565b6001600160a01b0389166000908152600560205260409020558215610aca57600a54610ac6908463ffffffff611fd216565b600a555b610ad38261202c565b856001600160a01b03166342966c68866040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610b1957600080fd5b505af1158015610b2d573d6000803e3d6000fd5b50506040516001600160a01b038a16925083156108fc02915083906000818181858888f19350505050158015610b67573d6000803e3d6000fd5b50604080516001600160a01b03808a1682528a166020820152808201879052606081018390526080810184905260a0810185905290517fe540b6cc73989eeec2f777710efa155b6cc71a931d80862d5bf911c6109972c39181900360c00190a15050505050505050565b6001546001600160a01b031690565b600390565b6001600160a01b031660009081526004602052604090205490565b600054600160a01b900460ff161515600114610c1b57600080fd5b600054600160a01b900460ff1615156001148015610cad5750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b158015610c7f57600080fd5b505afa158015610c93573d6000803e3d6000fd5b505050506040513d6020811015610ca957600080fd5b5051155b15610cba57610cba610fb6565b6000610cc46111c3565b905060008111610cd357600080fd5b6001546001600160a01b0384811691161480610cfc57506002546001600160a01b038481169116145b610d0557600080fd5b60008390506000610d29633b9aca0061097e60065486611eee90919063ffffffff16565b90506000610d3d848363ffffffff611f9016565b6010546040805163f8956a6760e01b81523060048201526001600160a01b038a81166024830152604482018590529151939450600093919092169163f8956a67916064808301926020929190829003018186803b158015610d9d57600080fd5b505afa158015610db1573d6000803e3d6000fd5b505050506040513d6020811015610dc757600080fd5b50516001600160a01b03881660009081526004602052604081205491925090610e129061097e670de0b6b3a7640000610e06878763ffffffff611fd216565b9063ffffffff611eee16565b6001600160a01b038916600090815260056020526040902054909150610e50908390610e44908663ffffffff611fd216565b9063ffffffff611fd216565b6001600160a01b0389166000908152600560205260409020558115610e8657600a54610e82908363ffffffff611f9016565b600a555b610e8f8461202c565b846001600160a01b03166340c10f1988836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610eef57600080fd5b505af1158015610f03573d6000803e3d6000fd5b5050604080516001600160a01b03808c1682528c166020820152808201859052606081018a90526080810188905260a0810186905290517f73cfafc06c41aefbe585fd047208a7776b2334d2329decfb3d1b1f6ec8c3c41693509081900360c0019150a15050505050505050565b600154600090610fa290610f8d906001600160a01b0316611707565b600254610e44906001600160a01b0316611707565b905090565b6002546001600160a01b031690565b600054600160a01b900460ff161515600114610fd157600080fd5b610fd961219e565b600f546003546040805163416bd10760e11b815230600482015260248101929092525160009283926001600160a01b03909116916382d7a20e9160448082019261010092909190829003018186803b15801561103457600080fd5b505afa158015611048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061010081101561106e57600080fd5b5060c081015160e082015191945092509050600181151514156111055782516020808501516040808701516060880151608089015160a08a01516001546001600160a01b03908116600081815260048a52878120600254909316808252888220838352600c8c528983208284528a84209484526005909c528983209183529890912060038e90559390935592909155919055935555555b6001546001600160a01b0390811660008181526004602090815260408083205460025490951680845281842054858552600c8452828520548286528386205496865260058552838620549286529483902054600354845198895294880191909152868301949094526060860194909452608085019390935260a084019190915260c083015282151560e0830152517fe7d4328bcca588827789f132837dde7289420fb8512d5c0a706059194fe1dfd1918190036101000190a1505050565b6000610fa26111e86111d3610f71565b600a54600954610e449163ffffffff611fd216565b479063ffffffff611f9016565b6111fd611eea565b6000546001600160a01b0390811691161461124d576040805162461bcd60e51b81526020600482018190526024820152600080516020612204833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61129f611eea565b6000546001600160a01b039081169116146112ef576040805162461bcd60e51b81526020600482018190526024820152600080516020612204833981519152604482015290519081900360640190fd5b629896808111156112ff57600080fd5b600755565b600f546001600160a01b031681565b60035490565b6000546001600160a01b031690565b60065490565b600054600160a01b900460ff16151560011480156113c05750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b15801561139257600080fd5b505afa1580156113a6573d6000803e3d6000fd5b505050506040513d60208110156113bc57600080fd5b5051155b156113cd576113cd610fb6565b336000908152600d60205260409020548111156113e957600080fd5b60105460408051639486909f60e01b815230600482015260248101849052905160009283928392839283926001600160a01b0390911691639486909f9160448082019260a092909190829003018186803b15801561144657600080fd5b505afa15801561145a573d6000803e3d6000fd5b505050506040513d60a081101561147057600080fd5b5080516020808301516040808501516060860151608090960151601054835163b9c7840b60e01b81523060048201529351969c50939a509098509496509394506000936001600160a01b039091169263b9c7840b92602480840193919291829003018186803b1580156114e257600080fd5b505afa1580156114f6573d6000803e3d6000fd5b505050506040513d602081101561150c57600080fd5b50519050600061152683610e44898963ffffffff611fd216565b6001546001600160a01b03166000908152600c6020526040902054909150611554908863ffffffff611f9016565b6001546001600160a01b039081166000908152600c6020526040808220939093556002549091168152205461158f908763ffffffff611f9016565b6002546001600160a01b039081166000908152600c60209081526040808320949094556001549092168152600b90915220546115d1908663ffffffff611f9016565b6001546001600160a01b039081166000908152600b6020526040808220939093556002549091168152205461160c908563ffffffff611f9016565b6002546001600160a01b03166000908152600b6020908152604080832093909355338252600d90522054611646908963ffffffff611f9016565b336000908152600d6020526040902055600854611669908963ffffffff611f9016565b60085560095461167f908463ffffffff611f9016565b600955604051339082156108fc029083906000818181858888f193505050501580156116af573d6000803e3d6000fd5b5060408051338152602081018390528082018a90526060810184905290517f11c75623de2058a663854f734fb8083a261970290f564abc9aa2ac01bfcbe81f9181900360800190a15050505050505050565b60095490565b6001600160a01b0381166000908152600c6020908152604080832054600590925282205461173a9163ffffffff611fd216565b92915050565b6001600160a01b038116600090815260046020908152604080832054600b90925282205461173a91670de0b6b3a76400009161097e9163ffffffff611eee16565b6001600160a01b03166000908152600d602052604090205490565b6001600160a01b03166000908152600c602052604090205490565b600a5490565b6117c5611eea565b6000546001600160a01b03908116911614611815576040805162461bcd60e51b81526020600482018190526024820152600080516020612204833981519152604482015290519081900360640190fd5b6002546001600160a01b0316158061183657506001546001600160a01b0316155b61183f57600080fd5b600280546001600160a01b03199081166001600160a01b03948516179182905560018054909116928416929092179182905590821660009081526004602052604080822092909316815291909120662386f26fc10000908190559055565b6001600160a01b031660009081526005602052604090205490565b6118c0611eea565b6000546001600160a01b03908116911614611910576040805162461bcd60e51b81526020600482018190526024820152600080516020612204833981519152604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b8415150217905580611a5957600e5460035460408051631760164960e31b81523060048201526024810192909252516001600160a01b039092169163bb00b24891604480820192600092909190829003018186803b15801561198157600080fd5b505afa158015611995573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160409081528110156119be57600080fd5b81019080805160405193929190846401000000008211156119de57600080fd5b9083019060208201858111156119f357600080fd5b8251866020820283011164010000000082111715611a1057600080fd5b82525081516020918201928201910280838360005b83811015611a3d578181015183820152602001611a25565b5050505091909101604052506020015160035550611a59915050565b5050565b600054600160a01b900460ff1615156001148015611aef5750600e5460408051632c84088960e11b815230600482015290516001600160a01b0390921691635908111291602480820192602092909190829003018186803b158015611ac157600080fd5b505afa158015611ad5573d6000803e3d6000fd5b505050506040513d6020811015611aeb57600080fd5b5051155b15611afc57611afc610fb6565b6000611b066111c3565b60105460408051630bdc478960e01b81523060048201526024810184905290519293506000928392839283926001600160a01b0390921691630bdc478991604480820192608092909190829003018186803b158015611b6457600080fd5b505afa158015611b78573d6000803e3d6000fd5b505050506040513d6080811015611b8e57600080fd5b508051602080830151604080850151606090950151601054825163b9c7840b60e01b81523060048201529251959a509298509496509394506000936001600160a01b039091169263b9c7840b92602480840193919291829003018186803b158015611bf857600080fd5b505afa158015611c0c573d6000803e3d6000fd5b505050506040513d6020811015611c2257600080fd5b505190506000611c448261097e89670de0b6b3a764000063ffffffff611eee16565b6001546001600160a01b03166000908152600c6020526040902054909150611c72908763ffffffff611fd216565b6001546001600160a01b039081166000908152600c60205260408082209390935560025490911681522054611cad908663ffffffff611fd216565b6002546001600160a01b039081166000908152600c60209081526040808320949094556001549092168152600b9091522054611cef908563ffffffff611fd216565b6001546001600160a01b039081166000908152600b60205260408082209390935560025490911681522054611d2a908463ffffffff611fd216565b6002546001600160a01b039081166000908152600b6020908152604080832094909455918b168152600d9091522054611d69908263ffffffff611fd216565b6001600160a01b0389166000908152600d6020526040902055600854611d95908263ffffffff611fd216565b600855604080516001600160a01b038a168152602081018990528082018390526060810184905290517fe1d1934c742278e3794231612340f57d39d41877f0106ef92422f2f86ce07bf49181900360800190a15050505050505050565b611dfa611eea565b6000546001600160a01b03908116911614611e4a576040805162461bcd60e51b81526020600482018190526024820152600080516020612204833981519152604482015290519081900360640190fd5b6001600160a01b038116611e8f5760405162461bcd60e51b81526004018080602001828103825260268152602001806121bd6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b600082611efd5750600061173a565b82820282848281611f0a57fe5b0414611f475760405162461bcd60e51b81526004018080602001828103825260218152602001806121e36021913960400191505060405180910390fd5b9392505050565b6000611f4783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120a2565b6000611f4783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612144565b600082820183811015611f47576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6011546001600160a01b03166108fc61204c83600263ffffffff611f4e16565b6040518115909202916000818181858888f19350505050158015612074573d6000803e3d6000fd5b5061209661208982600263ffffffff611f4e16565b829063ffffffff611f9016565b60098054909101905550565b6000818361212e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120f35781810151838201526020016120db565b50505050905090810190601f1680156121205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161213a57fe5b0495945050505050565b600081848411156121965760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156120f35781810151838201526020016120db565b505050900390565b6040518060c00160405280600690602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220fb60cc37e50db57b971c82f504c47f2b825744041c647692b8ff7f2e5b92b05b64736f6c63430006060033

Deployed Bytecode Sourcemap

388:12310:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;9858:64:5;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9858:64:5;;;:::i;:::-;;;;;;;;;;;;;;;;;;12429:110;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12429:110:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12429:110:5;;:::i;:::-;;10791:93;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10791:93:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10791:93:5;-1:-1:-1;;;;;10791:93:5;;:::i;:::-;;;;;;;;;;;;;;;;2811:39;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2811:39:5;;;:::i;:::-;;;;-1:-1:-1;;;;;2811:39:5;;;;;;;;;;;;;;2854:38;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2854:38:5;;;:::i;10477:69::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10477:69:5;;;:::i;2708:48::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2708:48:5;;;:::i;10549:83::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10549:83:5;;;:::i;4825:791::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;4825:791:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;4825:791:5;;;;;;;;;;:::i;10003:68::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10003:68:5;;;:::i;9925:75::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9925:75:5;;;:::i;10229:85::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10229:85:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10229:85:5;-1:-1:-1;;;;;10229:85:5;;:::i;3587:712::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3587:712:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;3587:712:5;;;;;;;;;;:::i;11086:120::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11086:120:5;;;:::i;10074:68::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10074:68:5;;;:::i;8617:790::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;8617:790:5;;;:::i;11474:151::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11474:151:5;;;:::i;922:145:2:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;922:145:2;;;:::i;12583:112:5:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12583:112:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12583:112:5;;:::i;2760:47::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2760:47:5;;;:::i;10145:81::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10145:81:5;;;:::i;717:77:2:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;717:77:2;;;:::i;10407:67:5:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10407:67:5;;;:::i;7375:948::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7375:948:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7375:948:5;;:::i;10635:69::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10635:69:5;;;:::i;11210:122::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11210:122:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11210:122:5;-1:-1:-1;;;;;11210:122:5;;:::i;11335:136::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11335:136:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11335:136:5;-1:-1:-1;;;;;11335:136:5;;:::i;10983:99::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10983:99:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10983:99:5;-1:-1:-1;;;;;10983:99:5;;:::i;10887:93::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10887:93:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10887:93:5;-1:-1:-1;;;;;10887:93:5;;:::i;10707:81::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10707:81:5;;;:::i;11860:273::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11860:273:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;11860:273:5;;;;;;;;;;:::i;10317:87::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10317:87:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10317:87:5;-1:-1:-1;;;;;10317:87:5;;:::i;12136:257::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12136:257:5;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12136:257:5;;;;;;;;;:::i;6101:849::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6101:849:5;-1:-1:-1;;;;;6101:849:5;;:::i;1073:240:2:-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;1073:240:2;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1073:240:2;-1:-1:-1;;;;;1073:240:2;;:::i;9858:64:5:-;9899:4;9913:6;-1:-1:-1;;;9913:6:5;;;;;9858:64::o;12429:110::-;849:12:2;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:2;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:2;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:2;;;;;;;;;;;;;;;12507:5:5::1;12497:6;:15;;12489:24;;12:1:-1;9::::0;2:12:::1;12489:24:5;12519:6;:15:::0;12429:110::o;10791:93::-;-1:-1:-1;;;;;10865:16:5;10848:7;10865:16;;;:9;:16;;;;;;;10791:93::o;2811:39::-;;;-1:-1:-1;;;;;2811:39:5;;:::o;2854:38::-;;;-1:-1:-1;;;;;2854:38:5;;:::o;10477:69::-;10536:7;;10477:69;:::o;2708:48::-;;;-1:-1:-1;;;;;2708:48:5;;:::o;10549:83::-;10615:14;;10549:83;:::o;4825:791::-;1832:6;;-1:-1:-1;;;1832:6:5;;;;:14;;1842:4;1832:14;1824:23;;12:1:-1;9;2:12;1824:23:5;1856:6;;-1:-1:-1;;;1856:6:5;;;;:14;;1866:4;1856:14;:62;;;;-1:-1:-1;1875:15:5;;:43;;;-1:-1:-1;;;1875:43:5;;1912:4;1875:43;;;;;;-1:-1:-1;;;;;1875:15:5;;;;:28;;:43;;;;;;;;;;;;;;;:15;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;1875:43:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1875:43:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1875:43:5;1874:44;1856:62;1853:95;;;1928:13;:11;:13::i;:::-;4980:29:::1;::::0;;-1:-1:-1;;;4980:29:5;;5003:4:::1;4980:29;::::0;::::1;::::0;;;4945:5;;4924:11:::1;::::0;-1:-1:-1;;;;;4980:14:5;::::1;::::0;::::1;::::0;:29;;;;;::::1;::::0;;;;;;;;:14;:29;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;4980:29:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;4980:29:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;4980:29:5;;-1:-1:-1;5023:16:5;5015:25:::1;;12:1:-1;9::::0;2:12:::1;5015:25:5;5063:4;::::0;-1:-1:-1;;;;;5054:13:5;;::::1;5063:4:::0;::::1;5054:13;::::0;:30:::1;;-1:-1:-1::0;5080:4:5::1;::::0;-1:-1:-1;;;;;5071:13:5;;::::1;5080:4:::0;::::1;5071:13;5054:30;5046:39;;12:1:-1;9::::0;2:12:::1;5046:39:5;-1:-1:-1::0;;;;;5126:12:5;::::1;5091:15;5126:12:::0;;;:5:::1;:12;::::0;;;;;5109:42:::1;::::0;5144:6:::1;::::0;5109:30:::1;::::0;:12;;:30:::1;:16;:30;:::i;:::-;:34:::0;:42:::1;:34;:42;:::i;:::-;5175:11;::::0;:53:::1;::::0;;-1:-1:-1;;;5175:53:5;;5206:4:::1;5175:53;::::0;::::1;::::0;-1:-1:-1;;;;;5175:53:5;;::::1;::::0;;;;;;;;;;;;5091:60;;-1:-1:-1;5157:15:5::1;::::0;5175:11;;;::::1;::::0;:22:::1;::::0;:53;;;;;::::1;::::0;;;;;;;;:11;:53;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;5175:53:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;5175:53:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;5175:53:5;;-1:-1:-1;5234:12:5::1;5249:44;5287:5;5249:33;5261:20;:7:::0;5175:53;5261:20:::1;:11;:20;:::i;:::-;5249:7;::::0;;:33:::1;:11;:33;:::i;:44::-;5234:59:::0;-1:-1:-1;5299:14:5::1;5316:30;5234:59:::0;5316:20:::1;:7:::0;5328;5316:20:::1;:11;:20;:::i;:::-;:24:::0;:30:::1;:24;:30;:::i;:::-;-1:-1:-1::0;;;;;5368:13:5;::::1;;::::0;;;:6:::1;:13;::::0;;;;;5299:47;;-1:-1:-1;5368:26:5::1;::::0;5386:7;5368:26:::1;:17;:26;:::i;:::-;-1:-1:-1::0;;;;;5352:13:5;::::1;;::::0;;;:6:::1;:13;::::0;;;;:42;5403:12;;5400:59:::1;;5433:13;::::0;:26:::1;::::0;5451:7;5433:26:::1;:17;:26;:::i;:::-;5417:13;:42:::0;5400:59:::1;5465:13;5473:4;5465:7;:13::i;:::-;5484:4;-1:-1:-1::0;;;;;5484:9:5::1;;5494:12;5484:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;5484:23:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;5513:24:5::1;::::0;-1:-1:-1;;;;;5513:16:5;::::1;::::0;-1:-1:-1;5513:24:5;::::1;;;::::0;-1:-1:-1;5530:6:5;;5513:24:::1;::::0;;;5530:6;5513:16;:24;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;5549:62:5::1;::::0;;-1:-1:-1;;;;;5549:62:5;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;1953:1;;;;;;4825:791:::0;;:::o;10003:68::-;10064:4;;-1:-1:-1;;;;;10064:4:5;10003:68;:::o;9925:75::-;2235:1;9925:75;:::o;10229:85::-;-1:-1:-1;;;;;10299:12:5;10282:7;10299:12;;;:5;:12;;;;;;;10229:85::o;3587:712::-;1832:6;;-1:-1:-1;;;1832:6:5;;;;:14;;1842:4;1832:14;1824:23;;12:1:-1;9;2:12;1824:23:5;1856:6;;-1:-1:-1;;;1856:6:5;;;;:14;;1866:4;1856:14;:62;;;;-1:-1:-1;1875:15:5;;:43;;;-1:-1:-1;;;1875:43:5;;1912:4;1875:43;;;;;;-1:-1:-1;;;;;1875:15:5;;;;:28;;:43;;;;;;;;;;;;;;;:15;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;1875:43:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1875:43:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1875:43:5;1874:44;1856:62;1853:95;;;1928:13;:11;:13::i;:::-;3677::::1;3693:18;:16;:18::i;:::-;3677:34;;3733:1;3725:5;:9;3717:18;;12:1:-1;9::::0;2:12:::1;3717:18:5;3758:4;::::0;-1:-1:-1;;;;;3749:13:5;;::::1;3758:4:::0;::::1;3749:13;::::0;:30:::1;;-1:-1:-1::0;3775:4:5::1;::::0;-1:-1:-1;;;;;3766:13:5;;::::1;3775:4:::0;::::1;3766:13;3749:30;3741:39;;12:1:-1;9::::0;2:12:::1;3741:39:5;3786:11;3807:5;3786:27;;3819:12;3834:28;3856:5;3834:17;3844:6;;3834:5;:9;;:17;;;;:::i;:28::-;3819:43:::0;-1:-1:-1;3868:14:5::1;3885:15;:5:::0;3819:43;3885:15:::1;:9;:15;:::i;:::-;3922:11;::::0;:50:::1;::::0;;-1:-1:-1;;;3922:50:5;;3951:4:::1;3922:50;::::0;::::1;::::0;-1:-1:-1;;;;;3922:50:5;;::::1;::::0;;;;;;;;;;;;3868:32;;-1:-1:-1;3906:13:5::1;::::0;3922:11;;;::::1;::::0;:20:::1;::::0;:50;;;;;::::1;::::0;;;;;;;;:11;:50;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;3922:50:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;3922:50:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;3922:50:5;-1:-1:-1;;;;;4035:12:5;::::1;3978:20;4035:12:::0;;;:5:::1;3922:50;4035:12:::0;;;;;3922:50;;-1:-1:-1;3978:20:5;4001:47:::1;::::0;:29:::1;4023:6;4001:17;:6:::0;3922:50;4001:17:::1;:10;:17;:::i;:::-;:21:::0;:29:::1;:21;:29;:::i;:47::-;-1:-1:-1::0;;;;;4070:13:5;::::1;;::::0;;;:6:::1;:13;::::0;;;;;3978:70;;-1:-1:-1;4070:36:5::1;::::0;4100:5;;4070:25:::1;::::0;4088:6;4070:25:::1;:17;:25;:::i;:::-;:29:::0;:36:::1;:29;:36;:::i;:::-;-1:-1:-1::0;;;;;4054:13:5;::::1;;::::0;;;:6:::1;:13;::::0;;;;:52;4115:10;;4112:55:::1;;4143:13;::::0;:24:::1;::::0;4161:5;4143:24:::1;:17;:24;:::i;:::-;4127:13;:40:::0;4112:55:::1;4173:13;4181:4;4173:7;:13::i;:::-;4192:4;-1:-1:-1::0;;;;;4192:9:5::1;;4202:7;4211:12;4192:32;;;;;;;;;;;;;-1:-1:-1::0;;;;;4192:32:5::1;-1:-1:-1::0;;;;;4192:32:5::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;4192:32:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;;4236:58:5::1;::::0;;-1:-1:-1;;;;;4236:58:5;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;-1:-1:-1;4236:58:5;;;;;;;-1:-1:-1;4236:58:5::1;1953:1;;;;;;3587:712:::0;;:::o;11086:120::-;11194:4;;11132:7;;11154:46;;11179:20;;-1:-1:-1;;;;;11194:4:5;11179:14;:20::i;:::-;11169:4;;11154:20;;-1:-1:-1;;;;;11169:4:5;11154:14;:20::i;:46::-;11147:54;;11086:120;:::o;10074:68::-;10135:4;;-1:-1:-1;;;;;10135:4:5;10074:68;:::o;8617:790::-;8665:6;;-1:-1:-1;;;8665:6:5;;;;:14;;8675:4;8665:14;8657:23;;12:1:-1;9;2:12;8657:23:5;8694:28;;:::i;:::-;8774:15;;8821:13;;8774:61;;;-1:-1:-1;;;8774:61:5;;8814:4;8774:61;;;;;;;;;;;;8730:15;;;;-1:-1:-1;;;;;8774:15:5;;;;:31;;:61;;;;;:15;;:61;;;;;;;;:15;:61;;;2:2:-1;;;;27:1;24;17:12;2:2;8774:61:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8774:61:5;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15:3;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;8774:61:5;;;;;;;;;;-1:-1:-1;8774:61:5;-1:-1:-1;8774:61:5;-1:-1:-1;8855:4:5;8844:15;;;;8841:374;;;9055:13;;;9078;;;;9101;;;;;9124;;;;9147;;;;9170;;;;9089:1;8885:4;-1:-1:-1;;;;;8885:4:5;;;9066:1;8879:11;;;9158:1;8879:11;;;;;9112:1;8906:4;;;;8900:11;;;;;;8921:15;;;:9;:15;;;;;8946;;;;;;8971:12;;;9181:1;8971:12;;;;;;8993;;;;;;;9135:1;8869:339;;;;;;;;;;;;;;;;;;8841:374;9250:4;;-1:-1:-1;;;;;9250:4:5;;;9244:11;;;;:5;:11;;;;;;;;;9269:4;;;;;9263:11;;;;;;;9282:15;;;:9;:15;;;;;;9305;;;;;;;9328:12;;;:6;:12;;;;;;9348;;;;;;;;9368:13;;9225:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9250:4;9225:177;;;8617:790;;;:::o;11474:151::-;11522:7;11544:75;11570:48;11601:16;:14;:16::i;:::-;11582:13;;11570:7;;:26;;;:11;:26;:::i;:48::-;11544:21;;:75;:25;:75;:::i;922:145:2:-;849:12;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:2;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:2;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:2;;;;;;;;;;;;;;;1028:1:::1;1012:6:::0;;991:40:::1;::::0;-1:-1:-1;;;;;1012:6:2;;::::1;::::0;991:40:::1;::::0;1028:1;;991:40:::1;1058:1;1041:19:::0;;-1:-1:-1;;;;;;1041:19:2::1;::::0;;922:145::o;12583:112:5:-;849:12:2;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:2;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:2;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:2;;;;;;;;;;;;;;;12662:5:5::1;12652:6;:15;;12644:24;;12:1:-1;9::::0;2:12:::1;12644:24:5;12674:7;:16:::0;12583:112::o;2760:47::-;;;-1:-1:-1;;;;;2760:47:5;;:::o;10145:81::-;10210:13;;10145:81;:::o;717:77:2:-;755:7;781:6;-1:-1:-1;;;;;781:6:2;717:77;:::o;10407:67:5:-;10465:6;;10407:67;:::o;7375:948::-;1998:6;;-1:-1:-1;;;1998:6:5;;;;:14;;2008:4;1998:14;:62;;;;-1:-1:-1;2017:15:5;;:43;;;-1:-1:-1;;;2017:43:5;;2054:4;2017:43;;;;;;-1:-1:-1;;;;;2017:15:5;;;;:28;;:43;;;;;;;;;;;;;;;:15;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;2017:43:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2017:43:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2017:43:5;2016:44;1998:62;1995:95;;;2070:13;:11;:13::i;:::-;7491:10:::1;7480:22;::::0;;;:10:::1;:22;::::0;;;;;7470:32;::::1;;7462:41;;12:1:-1;9::::0;2:12:::1;7462:41:5;7646:11;::::0;:53:::1;::::0;;-1:-1:-1;;;7646:53:5;;7685:4:::1;7646:53;::::0;::::1;::::0;;;;;;;;;7517:18:::1;::::0;;;;;;;;;-1:-1:-1;;;;;7646:11:5;;::::1;::::0;:30:::1;::::0;:53;;;;;::::1;::::0;;;;;;;;;:11;:53;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;7646:53:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;7646:53:5;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29::::0;22:12:::1;4:2;-1:-1:::0;7646:53:5;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;7726:11:::1;::::0;:40;;-1:-1:-1;;;7726:40:5;;7760:4:::1;7726:40;::::0;::::1;::::0;;;7646:53;;-1:-1:-1;7646:53:5;;-1:-1:-1;7646:53:5;;-1:-1:-1;7646:53:5;;-1:-1:-1;7646:53:5;;-1:-1:-1;7705:18:5::1;::::0;-1:-1:-1;;;;;7726:11:5;;::::1;::::0;:25:::1;::::0;:40;;;;;7646:53;;7726:40;;;;;;:11;:40;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;7726:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;7726:40:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;7726:40:5;;-1:-1:-1;7772:20:5::1;7795:40;7826:8:::0;7795:26:::1;:10:::0;7810;7795:26:::1;:14;:26;:::i;:40::-;7869:4;::::0;-1:-1:-1;;;;;7869:4:5::1;7859:15;::::0;;;:9:::1;:15;::::0;;;;;7772:63;;-1:-1:-1;7859:31:5::1;::::0;7879:10;7859:31:::1;:19;:31;:::i;:::-;7851:4;::::0;-1:-1:-1;;;;;7851:4:5;;::::1;7841:15;::::0;;;:9:::1;:15;::::0;;;;;:49;;;;7924:4:::1;::::0;;;::::1;7914:15:::0;;;;:31:::1;::::0;7934:10;7914:31:::1;:19;:31;:::i;:::-;7906:4;::::0;-1:-1:-1;;;;;7906:4:5;;::::1;7896:15;::::0;;;:9:::1;:15;::::0;;;;;;;:49;;;;7906:4;7979;;;::::1;7969:15:::0;;:9:::1;:15:::0;;;;;:31:::1;::::0;7989:10;7969:31:::1;:19;:31;:::i;:::-;7961:4;::::0;-1:-1:-1;;;;;7961:4:5;;::::1;7951:15;::::0;;;:9:::1;:15;::::0;;;;;:49;;;;8034:4:::1;::::0;;;::::1;8024:15:::0;;;;:31:::1;::::0;8044:10;8024:31:::1;:19;:31;:::i;:::-;8016:4;::::0;-1:-1:-1;;;;;8016:4:5::1;8006:15;::::0;;;:9:::1;:15;::::0;;;;;;;:49;;;;8097:10:::1;8086:22:::0;;:10:::1;:22:::0;;;;:34:::1;::::0;8113:6;8086:34:::1;:26;:34;:::i;:::-;8072:10;8061:22;::::0;;;:10:::1;:22;::::0;;;;:59;8143:14:::1;::::0;:26:::1;::::0;8162:6;8143:26:::1;:18;:26;:::i;:::-;8126:14;:43:::0;8185:7:::1;::::0;:21:::1;::::0;8197:8;8185:21:::1;:11;:21;:::i;:::-;8175:7;:31:::0;8212:33:::1;::::0;:10:::1;::::0;:33;::::1;;;::::0;8232:12;;8212:33:::1;::::0;;;8232:12;8212:10;:33;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;-1:-1:::0;8257:61:5::1;::::0;;8273:10:::1;8257:61:::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;2095:1;;;;;;;7375:948:::0;:::o;10635:69::-;10694:7;;10635:69;:::o;11210:122::-;-1:-1:-1;;;;;11309:16:5;;11269:7;11309:16;;;:9;:16;;;;;;;;;11291:6;:13;;;;;;:35;;;:17;:35;:::i;:::-;11284:43;11210:122;-1:-1:-1;;11210:122:5:o;11335:136::-;-1:-1:-1;;;;;11440:12:5;;11397:7;11440:12;;;:5;:12;;;;;;;;;11419:9;:16;;;;;;:46;;11458:6;;11419:34;;;:20;:34;:::i;10983:99::-;-1:-1:-1;;;;;11060:19:5;11043:7;11060:19;;;:10;:19;;;;;;;10983:99::o;10887:93::-;-1:-1:-1;;;;;10961:16:5;10944:7;10961:16;;;:9;:16;;;;;;;10887:93::o;10707:81::-;10772:13;;10707:81;:::o;11860:273::-;849:12:2;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:2;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:2;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:2;;;;;;;;;;;;;;;11954:4:5::1;::::0;-1:-1:-1;;;;;11954:4:5::1;:18:::0;;:40:::1;;-1:-1:-1::0;11976:4:5::1;::::0;-1:-1:-1;;;;;11976:4:5::1;:18:::0;11954:40:::1;11946:49;;12:1:-1;9::::0;2:12:::1;11946:49:5;12008:4;12001:41:::0;;-1:-1:-1;;;;;;12001:41:5;;::::1;-1:-1:-1::0;;;;;12001:41:5;;::::1;;::::0;;;;-1:-1:-1;12001:41:5;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;12090:4;;::::1;-1:-1:-1::0;12084:11:5;;;:5:::1;:11;::::0;;;;;12103:4;;;::::1;12097:11:::0;;;;;;12113:6:::1;12083:45:::0;;;;;;11860:273::o;10317:87::-;-1:-1:-1;;;;;10388:13:5;10371:7;10388:13;;;:6;:13;;;;;;;10317:87::o;12136:257::-;849:12:2;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:2;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:2;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:2;;;;;;;;;;;;;;;12209:6:5::1;:14:::0;;-1:-1:-1;;;;12209:14:5::1;-1:-1:-1::0;;;12209:14:5;::::1;;;;::::0;;12232:12;12229:160:::1;;12275:15;::::0;12319:13:::1;::::0;12275:58:::1;::::0;;-1:-1:-1;;;12275:58:5;;12312:4:::1;12275:58;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;12275:15:5;;::::1;::::0;:28:::1;::::0;:58;;;;;:15:::1;::::0;:58;;;;;;;;:15;:58;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;12275:58:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;12275:58:5;;;;;;39:16:-1;36:1;17:17;2:54;101:4;12275:58:5;80:15:-1::0;;::::1;-1:-1:::0;;76:31:::1;65:43:::0;::::1;120:4;113:20:::0;;;7:11;::::1;4:2;;;31:1;28::::0;21:12:::1;4:2;12275:58:5;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41::::0;34:12:::1;8:2;62:21:::0;;::::1;::::0;123:4:::1;114:14:::0;::::1;138:31:::0;;::::1;135:2;;;182:1;179::::0;172:12:::1;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359::::0;352:12:::1;230:2;373:25:::0;;-1:-1;12275:58:5;;421:4:-1::1;412:14:::0;;::::1;::::0;12275:58:5;::::1;::::0;::::1;::::0;412:14:-1;12275:58:5;23:1:-1::1;8:100;33:3;30:1;27:10;8:100;;;90:11:::0;;::::1;84:18:::0;71:11;;::::1;64:39:::0;52:2:::1;45:10;8:100;;;-1:-1:::0;;;;12275:58:5;;;::::1;;::::0;-1:-1:-1;12275:58:5::1;;::::0;12258:13:::1;12254:79:::0;-1:-1:-1;12229:160:5::1;::::0;-1:-1:-1;;12229:160:5::1;;12136:257:::0;;:::o;6101:849::-;1998:6;;-1:-1:-1;;;1998:6:5;;;;:14;;2008:4;1998:14;:62;;;;-1:-1:-1;2017:15:5;;:43;;;-1:-1:-1;;;2017:43:5;;2054:4;2017:43;;;;;;-1:-1:-1;;;;;2017:15:5;;;;:28;;:43;;;;;;;;;;;;;;;:15;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;2017:43:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2017:43:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2017:43:5;2016:44;1998:62;1995:95;;;2070:13;:11;:13::i;:::-;6196::::1;6212:18;:16;:18::i;:::-;6349:11;::::0;:49:::1;::::0;;-1:-1:-1;;;6349:49:5;;6385:4:::1;6349:49;::::0;::::1;::::0;;;;;;;;;6196:34;;-1:-1:-1;6244:18:5::1;::::0;;;;;;;-1:-1:-1;;;;;6349:11:5;;::::1;::::0;:27:::1;::::0;:49;;;;;::::1;::::0;;;;;;;;;:11;:49;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;6349:49:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6349:49:5;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29::::0;22:12:::1;4:2;-1:-1:::0;6349:49:5;;::::1;::::0;;::::1;::::0;;;;;;;;;;;6425:11:::1;::::0;:40;;-1:-1:-1;;;6425:40:5;;6459:4:::1;6425:40;::::0;::::1;::::0;;;6349:49;;-1:-1:-1;6349:49:5;;-1:-1:-1;6349:49:5;;-1:-1:-1;6349:49:5;;-1:-1:-1;6404:18:5::1;::::0;-1:-1:-1;;;;;6425:11:5;;::::1;::::0;:25:::1;::::0;:40;;;;;6349:49;;6425:40;;;;;;:11;:40;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;6425:40:5;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;6425:40:5;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;6425:40:5;;-1:-1:-1;6471:23:5::1;6497:33;6425:40:::0;6497:17:::1;:5:::0;6507:6:::1;6497:17;:9;:17;:::i;:33::-;6564:4;::::0;-1:-1:-1;;;;;6564:4:5::1;6554:15;::::0;;;:9:::1;:15;::::0;;;;;6471:59;;-1:-1:-1;6554:31:5::1;::::0;6574:10;6554:31:::1;:19;:31;:::i;:::-;6546:4;::::0;-1:-1:-1;;;;;6546:4:5;;::::1;6536:15;::::0;;;:9:::1;:15;::::0;;;;;:49;;;;6619:4:::1;::::0;;;::::1;6609:15:::0;;;;:31:::1;::::0;6629:10;6609:31:::1;:19;:31;:::i;:::-;6601:4;::::0;-1:-1:-1;;;;;6601:4:5;;::::1;6591:15;::::0;;;:9:::1;:15;::::0;;;;;;;:49;;;;6601:4;6674;;;::::1;6664:15:::0;;:9:::1;:15:::0;;;;;:31:::1;::::0;6684:10;6664:31:::1;:19;:31;:::i;:::-;6656:4;::::0;-1:-1:-1;;;;;6656:4:5;;::::1;6646:15;::::0;;;:9:::1;:15;::::0;;;;;:49;;;;6729:4:::1;::::0;;;::::1;6719:15:::0;;;;:31:::1;::::0;6739:10;6719:31:::1;:19;:31;:::i;:::-;6711:4;::::0;-1:-1:-1;;;;;6711:4:5;;::::1;6701:15;::::0;;;:9:::1;:15;::::0;;;;;;;:49;;;;6778:19;;::::1;::::0;;:10:::1;:19:::0;;;;;:40:::1;::::0;6802:15;6778:40:::1;:23;:40;:::i;:::-;-1:-1:-1::0;;;;;6756:19:5;::::1;;::::0;;;:10:::1;:19;::::0;;;;:62;6841:14:::1;::::0;:35:::1;::::0;6860:15;6841:35:::1;:18;:35;:::i;:::-;6824:14;:52:::0;6888:57:::1;::::0;;-1:-1:-1;;;;;6888:57:5;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;2095:1;;;;;;;6101:849:::0;:::o;1073:240:2:-;849:12;:10;:12::i;:::-;839:6;;-1:-1:-1;;;;;839:6:2;;;:22;;;831:67;;;;;-1:-1:-1;;;831:67:2;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;831:67:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;1161:22:2;::::1;1153:73;;;;-1:-1:-1::0;;;1153:73:2::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1262:6;::::0;;1241:38:::1;::::0;-1:-1:-1;;;;;1241:38:2;;::::1;::::0;1262:6;::::1;::::0;1241:38:::1;::::0;::::1;1289:6;:17:::0;;-1:-1:-1;;;;;;1289:17:2::1;-1:-1:-1::0;;;;;1289:17:2;;;::::1;::::0;;;::::1;::::0;;1073:240::o;57:104::-;144:10;57:104;:::o;2180:459:1:-;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:1;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:1;2180:459;-1:-1:-1;;;2180:459:1:o;3101:130::-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;1321:134::-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;874:176::-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;9654:134:5;9702:15;;-1:-1:-1;;;;;9702:15:5;:39;9727:13;:6;9738:1;9727:13;:10;:13;:::i;:::-;9702:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;9758:25:5;9769:13;:6;9780:1;9769:13;:10;:13;:::i;:::-;9758:6;;:25;:10;:25;:::i;:::-;9747:7;:36;;;;;;;-1:-1:-1;9654:134:5:o;3713:272:1:-;3799:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;3818:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;;3713:272;-1:-1:-1;;;;;3713:272:1:o;1746:187::-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1851:29:1;-1:-1:-1;;;1902:5:1;;;1746:187::o;388:12310:5:-;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;-1:-1;388:12310:5;;;-1:-1:-1;;388:12310:5:o

Swarm Source

ipfs://fb60cc37e50db57b971c82f504c47f2b825744041c647692b8ff7f2e5b92b05b

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.