ETH Price: $3,571.46 (+7.05%)

Contract

0xd84a0d9a788Df9cF95469107ECdE92F4DDC579AC
 

Overview

ETH Balance

0.000097578118463909 ETH

Eth Value

$0.35 (@ $3,571.46/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unlock Eth190530742024-01-21 5:13:23311 days ago1705814003IN
0xd84a0d9a...4DDC579AC
0 ETH0.0006131710.64834318
Unlock Eth188831922023-12-28 9:23:11335 days ago1703755391IN
0xd84a0d9a...4DDC579AC
0 ETH0.0016458928.58249623
Unlock Eth187358932023-12-07 17:26:47355 days ago1701970007IN
0xd84a0d9a...4DDC579AC
0 ETH0.0047140181.84616892
Lock Eth187358722023-12-07 17:22:35355 days ago1701969755IN
0xd84a0d9a...4DDC579AC
15.2 ETH0.0059557188.0606572
Approve183841182023-10-19 11:36:23405 days ago1697715383IN
0xd84a0d9a...4DDC579AC
0 ETH0.00032066.93317706
Unlock Eth180222662023-08-29 19:10:35455 days ago1693336235IN
0xd84a0d9a...4DDC579AC
0 ETH0.0024588442.69120378
Approve180221312023-08-29 18:43:23455 days ago1693334603IN
0xd84a0d9a...4DDC579AC
0 ETH0.0021089745.60740061
Transfer180221192023-08-29 18:40:59455 days ago1693334459IN
0xd84a0d9a...4DDC579AC
0 ETH0.00317867.81760904
Unlock Eth178607432023-08-07 4:41:59478 days ago1691383319IN
0xd84a0d9a...4DDC579AC
0 ETH0.0006736511.69869444
Flash Unlock Liq...178607202023-08-07 4:37:23478 days ago1691383043IN
0xd84a0d9a...4DDC579AC
0 ETH0.0010280211.32263243
Lock Liq158618082022-10-30 15:35:11759 days ago1667144111IN
0xd84a0d9a...4DDC579AC
0 ETH0.000698819.08730189
Flash Unlock Liq...158615902022-10-30 14:51:11759 days ago1667141471IN
0xd84a0d9a...4DDC579AC
0.01 ETH0.000804839.10277351
Flash Buy Liq An...158605322022-10-30 11:19:11759 days ago1667128751IN
0xd84a0d9a...4DDC579AC
0.0006 ETH0.000685916.74554352
Lock Eth158603142022-10-30 10:35:11759 days ago1667126111IN
0xd84a0d9a...4DDC579AC
0.01 ETH0.000469346.93962146
Unlock Eth157429162022-10-14 0:57:47775 days ago1665709067IN
0xd84a0d9a...4DDC579AC
0 ETH0.000908315.77683601
Unlock Eth153843952022-08-21 14:08:16829 days ago1661090896IN
0xd84a0d9a...4DDC579AC
0 ETH0.0008387814.56333144
Lock Eth153841002022-08-21 12:58:16829 days ago1661086696IN
0xd84a0d9a...4DDC579AC
0.3 ETH0.000367187.26647639
Unlock Eth153834992022-08-21 10:35:59829 days ago1661078159IN
0xd84a0d9a...4DDC579AC
0 ETH0.000225993.9253528
Unlock Liq153832082022-08-21 9:35:31829 days ago1661074531IN
0xd84a0d9a...4DDC579AC
1.27934919 ETH0.000336815.3475171
Unlock Eth134016412021-10-12 4:49:271142 days ago1634014167IN
0xd84a0d9a...4DDC579AC
0 ETH0.0040647370.60258317
Unlock Eth132176042021-09-13 13:24:401171 days ago1631539480IN
0xd84a0d9a...4DDC579AC
0 ETH0.0037726771.45753007
Lock Eth132175972021-09-13 13:23:001171 days ago1631539380IN
0xd84a0d9a...4DDC579AC
0.65 ETH0.0043767964.71485042
Unlock Eth124291252021-05-13 23:45:201293 days ago1620949520IN
0xd84a0d9a...4DDC579AC
0 ETH0.00800417139
Unlock Eth123779852021-05-06 2:14:351301 days ago1620267275IN
0xd84a0d9a...4DDC579AC
0 ETH0.0017033640
Unlock Liq123769092021-05-05 22:18:401301 days ago1620253120IN
0xd84a0d9a...4DDC579AC
0.103 ETH0.0036949570
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
190530742024-01-21 5:13:23311 days ago1705814003
0xd84a0d9a...4DDC579AC
0.00189955 ETH
188831922023-12-28 9:23:11335 days ago1703755391
0xd84a0d9a...4DDC579AC
0.0131751 ETH
187358932023-12-07 17:26:47355 days ago1701970007
0xd84a0d9a...4DDC579AC
15.18637145 ETH
180222662023-08-29 19:10:35455 days ago1693336235
0xd84a0d9a...4DDC579AC
0.00080878 ETH
178607432023-08-07 4:41:59478 days ago1691383319
0xd84a0d9a...4DDC579AC
0.01000152 ETH
178607202023-08-07 4:37:23478 days ago1691383043
0xd84a0d9a...4DDC579AC
0.00113412 ETH
178607202023-08-07 4:37:23478 days ago1691383043
0xd84a0d9a...4DDC579AC
0.01341832 ETH
158618082022-10-30 15:35:11759 days ago1667144111
0xd84a0d9a...4DDC579AC
0.01227008 ETH
158615902022-10-30 14:51:11759 days ago1667141471
0xd84a0d9a...4DDC579AC
0.01048572 ETH
158615902022-10-30 14:51:11759 days ago1667141471
0xd84a0d9a...4DDC579AC
0.0055664 ETH
158605322022-10-30 11:19:11759 days ago1667128751
0xd84a0d9a...4DDC579AC
0.00007567 ETH
158605322022-10-30 11:19:11759 days ago1667128751
0xd84a0d9a...4DDC579AC
0.0056 ETH
157429162022-10-14 0:57:47775 days ago1665709067
0xd84a0d9a...4DDC579AC
0.06077404 ETH
153843952022-08-21 14:08:16829 days ago1661090896
0xd84a0d9a...4DDC579AC
0.24177153 ETH
153834992022-08-21 10:35:59829 days ago1661078159
0xd84a0d9a...4DDC579AC
1.27625488 ETH
153832082022-08-21 9:35:31829 days ago1661074531
0xd84a0d9a...4DDC579AC
0.00001048 ETH
134016412021-10-12 4:49:271142 days ago1634014167
0xd84a0d9a...4DDC579AC
0.02020351 ETH
132176042021-09-13 13:24:401171 days ago1631539480
0xd84a0d9a...4DDC579AC
0.6291711 ETH
124291252021-05-13 23:45:201293 days ago1620949520
0xd84a0d9a...4DDC579AC
0.06349718 ETH
123779852021-05-06 2:14:351301 days ago1620267275
0xd84a0d9a...4DDC579AC
0.09069232 ETH
123769092021-05-05 22:18:401301 days ago1620253120
0xd84a0d9a...4DDC579AC
0.02339484 ETH
123768322021-05-05 22:03:051301 days ago1620252185
0xd84a0d9a...4DDC579AC
0.0900959 ETH
123723882021-05-05 5:38:251302 days ago1620193105
0xd84a0d9a...4DDC579AC
0.63042795 ETH
123699462021-05-04 20:33:061302 days ago1620160386
0xd84a0d9a...4DDC579AC
0.19822464 ETH
123669862021-05-04 9:34:581303 days ago1620120898
0xd84a0d9a...4DDC579AC
0.33686222 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
KittenETHv0

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: UNLICENSED
//   _    _ _   _                __ _                            
//  | |  (_) | | |              / _(_)                           
//  | | ___| |_| |_ ___ _ __   | |_ _ _ __   __ _ _ __   ___ ___ 
//  | |/ / | __| __/ _ \ '_ \  |  _| | '_ \ / _` | '_ \ / __/ _ \
//  |   <| | |_| ||  __/ | | |_| | | | | | | (_| | | | | (_|  __/
//  |_|\_\_|\__|\__\___|_| |_(_)_| |_|_| |_|\__,_|_| |_|\___\___|
//
//  KittenSwap Lending v0
//
//  https://www.KittenSwap.org/
//
pragma solidity ^0.6.12;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require (c >= a, "!!add");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require (b <= a, "!!sub");
        uint256 c = a - b;
        return c;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require (b <= a, errorMessage);
        uint c = a - b;
        return c;
    }    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require (c / a == b, "!!mul");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require (b > 0, "!!div");
        uint256 c = a / b;
        return c;
    }
}

contract ERC20Detailed {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }
    function name() public view returns (string memory) {
        return _name;
    }
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

////////////////////////////////////////////////////////////////////////////////

interface LIQUID_TOKEN {
    function totalSupply (  ) external view returns ( uint256 );
    function getTokenReserve (  ) external view returns ( uint256 );
    function getEthReserve (  ) external view returns ( uint256 );
    
    function balanceOf ( address account ) external view returns ( uint256 );
    function transfer ( address recipient, uint256 amount ) external returns ( bool );
    function transferFrom ( address sender, address recipient, uint256 amount ) external returns ( bool );    
    
    function buyToken ( uint256 minTokenAmt, uint256 expireTimestamp ) external payable;    
    function sellToken ( uint256 tokenAmt, uint256 minEthAmt, uint256 expireTimestamp ) external;
}

////////////////////////////////////////////////////////////////////////////////

contract KittenETHv0 is ERC20Detailed
{
    using SafeMath for uint;
    
    address public constant LIQUID_ADDR = 0xC618D56b6D606E59c6B87Af724AB5a91eb40D1cb;
    uint public MIGRATION_TIMESTAMP = 0;               // for migration
    uint public MIGRATION_LIQUIDATION_WAIT = 14 days;  // gov can liquidate forgotten loans some days after migration starts
    uint public FLASH_LOAN_BP = 10;                    // in terms of basis points
    
    ////////////////////////////////////////////////////////////////////////////////
    
    LIQUID_TOKEN private constant LIQUID = LIQUID_TOKEN(LIQUID_ADDR);
    address public govAddr;
        
    constructor () public ERC20Detailed("KittenETHv0", "KittenETHv0", 18) {
        govAddr = msg.sender;
    }
    
    modifier govOnly() {
    	require (msg.sender == govAddr, "!gov");
    	_;
    }
    
    function govTransferAddr(address newAddr) external govOnly {
    	require (newAddr != address(0), "!addr");
    	govAddr = newAddr;
    }
    
    function govSetMIGRATION_TIMESTAMP(uint $MIGRATION_TIMESTAMP) external govOnly {
        require ($MIGRATION_TIMESTAMP > block.timestamp);
    	MIGRATION_TIMESTAMP = $MIGRATION_TIMESTAMP;
    }
    
    function govSetFLASH_LOAN_BP(uint $FLASH_LOAN_BP) external govOnly {
        require (FLASH_LOAN_BP <= 60);
    	FLASH_LOAN_BP = $FLASH_LOAN_BP;
    }    
    
    ////////////////////////////////////////////////////////////////////////////////
    
    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }
    
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
    
    mapping (address => uint) private _balances;
    mapping (address => mapping (address => uint)) private _allowances;

    uint private _totalSupply;
    function totalSupply() public view returns (uint) {
        return _totalSupply;
    }
    function balanceOf(address account) public view returns (uint) {
        return _balances[account];
    }
    function transfer(address recipient, uint amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function _transfer(address sender, address recipient, uint amount) internal {
        require (sender != address(0), "ERC20: transfer from the zero address");
        require (recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    
    //------------------------------------------------------------------------------
    
    function allowance(address owner, address spender) public view returns (uint) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint amount) internal {
        require (owner != address(0), "ERC20: approve from the zero address");
        require (spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    //------------------------------------------------------------------------------
    
    function _mint(address account, uint amount) internal {
        require (account != address(0), "ERC20: mint to the zero address");

        _balances[account] = _balances[account].add(amount);
        _totalSupply = _totalSupply.add(amount);

        emit Transfer(address(0), account, amount);
    }
    function _burn(address account, uint amount) internal {
        require (account != address(0), "ERC20: burn from the zero address");
        
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);

        emit Transfer(account, address(0), amount);
    }
    
    ////////////////////////////////////////////////////////////////////////////////

    uint constant PRICE_SCALE = 10 ** 10;
    function getLiqEthFloorPriceScaled() internal view returns (uint)
    {
        uint AMM_PRODUCT = (LIQUID.getTokenReserve()).mul(LIQUID.getEthReserve());
        uint TOTAL_SUPPLY = LIQUID.totalSupply();

        return PRICE_SCALE.mul(AMM_PRODUCT).div(TOTAL_SUPPLY).div(TOTAL_SUPPLY);
    }
    
    ////////////////////////////////////////////////////////////////////////////////

    event LOCK_ETH(address indexed user, uint ethAmt, uint kethAmt);
    event UNLOCK_ETH(address indexed user, uint ethAmt, uint kethAmt);
    
    function getContractValueInEth() public view returns (uint)
    {
        uint ethValue = (address(this).balance);
        
        uint liqValue = (LIQUID.balanceOf(address(this))).mul(getLiqEthFloorPriceScaled()) / (PRICE_SCALE);
        
        return ethValue.add(liqValue);
    }

    function lockEth() external payable // lock ETH for lending, and mint KittenEth
    {
        //-------- receive ETH from user --------
        address user = msg.sender;
        uint ethInAmt = msg.value;
        require (ethInAmt > 0, '!ethInAmt');
        
        //-------- compute KittenETH mint amt --------
        uint kethMintAmt = 0;
        if (_totalSupply == 0) { 
            kethMintAmt = ethInAmt; // initial price: 1 kETH = 1 ETH
        }
        else {                
            kethMintAmt = ethInAmt.mul(_totalSupply).div(getContractValueInEth().sub(ethInAmt));
        }
        
        //-------- mint KittenETH to user --------
        _mint(user, kethMintAmt);
        emit LOCK_ETH(user, ethInAmt, kethMintAmt);
    }
    
    function unlockEth(uint kethBurnAmt) external // unlock ETH, and burn KittenEth
    {
        require (kethBurnAmt > 0, '!kethBurnAmt');
        address payable user = msg.sender;

        //-------- compute ETH out amt --------
        uint ethOutAmt = kethBurnAmt.mul(getContractValueInEth()).div(_totalSupply);
        require (address(this).balance >= ethOutAmt, '!ethInContract');

        //-------- burn KittenETH from user --------
        _burn(user, kethBurnAmt);
        
        //-------- send ETH to user --------
        user.transfer(ethOutAmt);
        emit UNLOCK_ETH(user, ethOutAmt, kethBurnAmt);
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    
    mapping (address => uint) public liqLocked;
    
    event LOCK_LIQ(address indexed user, uint liqAmt, uint ethAmt);
    event UNLOCK_LIQ(address indexed user, uint liqAmt, uint ethAmt);    
    
    function lockLiq(uint liqInAmt) external // lock LIQUID to borrow ETH
    {
        require (liqInAmt > 0, '!liqInAmt');
        require (block.timestamp < MIGRATION_TIMESTAMP, '!migration'); // can't lock after migration starts
        address payable user = msg.sender;

        //-------- compute ETH out amt --------
        uint ethOutAmt = liqInAmt.mul(getLiqEthFloorPriceScaled()) / (PRICE_SCALE);
        require (address(this).balance >= ethOutAmt, '!ethInContract');

        //--------  send LIQUID to contract --------
        LIQUID.transferFrom(user, address(this), liqInAmt); 
        liqLocked[user] = liqLocked[user].add(liqInAmt);
        
        //-------- send ETH to user --------
        user.transfer(ethOutAmt);
        emit LOCK_LIQ(user, liqInAmt, ethOutAmt);
    }
    
    function unlockLiq() external payable // payback ETH to unlock LIQUID
    {
        //-------- receive ETH from user --------
        uint ethInAmt = msg.value;
        require (ethInAmt > 0, '!ethInAmt');
        uint ethReturnAmt = 0;
        address payable user = msg.sender;

        //-------- compute LIQUID out amt --------
        uint LiqEthFloorPriceScaled = getLiqEthFloorPriceScaled();

        uint liqOutAmt = ethInAmt.mul(PRICE_SCALE).div(LiqEthFloorPriceScaled);
        if (liqOutAmt > liqLocked[user])
        {
            liqOutAmt = liqLocked[user];
            ethReturnAmt = ethInAmt.sub(
                    liqOutAmt.mul(LiqEthFloorPriceScaled) / (PRICE_SCALE)
                );
        }
        
        //--------  send LIQUID to user --------
        liqLocked[user] = liqLocked[user].sub(liqOutAmt);
        LIQUID.transfer(user, liqOutAmt);
        
        //-------- return extra ETH to user --------
        if (ethReturnAmt > 10 ** 8) { // ignore dust
            user.transfer(ethReturnAmt);
        }
        emit UNLOCK_LIQ(user, liqOutAmt, ethInAmt.sub(ethReturnAmt));
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    
    receive() external payable { // receive ETH (from selling LIQUID)
        require(msg.sender == LIQUID_ADDR, '!sender');
    }

    function flashUnlockLiqAndSell(address payable user, uint liqUnlockAmt, uint liqSellAmt, uint liqSellMinEthAmt, uint liqSellExpireTimestamp) external payable
    {
        require (
            (user == msg.sender) 
            || // gov can liquidate forgotten loans some days after migration starts
            ((block.timestamp.sub(MIGRATION_LIQUIDATION_WAIT) > MIGRATION_TIMESTAMP) && (govAddr == msg.sender))
        , '!user');
        
        if (liqUnlockAmt > liqLocked[user])
            liqUnlockAmt = liqLocked[user];
        if (liqSellAmt > liqUnlockAmt)
            liqSellAmt = liqUnlockAmt;

        //-------- receive ETH from user --------
        uint ethInAmt = msg.value;
        
        //-------- compute ETH required for unlocking LIQUID --------
        uint ethBorrowAmt = 0;
        uint ethOutAmt = 0;
        
        uint ethRequiredForUnlock = liqUnlockAmt.mul(getLiqEthFloorPriceScaled()) / (PRICE_SCALE);
        if (ethRequiredForUnlock > ethInAmt) {
            ethBorrowAmt = (ethRequiredForUnlock - ethInAmt).mul(10000 + FLASH_LOAN_BP) / 10000; // add FLASH_LOAN_BP fee
        } else {
            ethOutAmt = ethInAmt - ethRequiredForUnlock;
        }

        //-------- sell LIQUID --------
        uint liqLoss = 0;
        uint ethGain = 0;
        if (liqSellAmt > 0)
        {
            uint liqBefore = LIQUID.balanceOf(address(this));
            uint ethBefore = address(this).balance;
            
            LIQUID.sellToken(liqSellAmt, liqSellMinEthAmt, liqSellExpireTimestamp); // sell LIQUID
    
            liqLoss = liqBefore.sub(LIQUID.balanceOf(address(this)), '!liqLoss'); // now contract has less LIQUID
            ethGain = (address(this).balance).sub(ethBefore, '!ethGain'); // now contract has more ETH            
        }
        
        //-------- payback flash-loan (if occured) --------
        if (ethBorrowAmt > 0) { // ethOutAmt = 0
            ethOutAmt = ethGain.sub(ethBorrowAmt, '!ethBorrowAmt'); // will throw if not enough
        } else { // ethBorrowAmt = 0
            ethOutAmt = ethOutAmt.add(ethGain);
        }

        //-------- unlock LIQUID --------
        liqLocked[user] = liqLocked[user].sub(liqUnlockAmt, '!liqUnlockAmt');
        
        //-------- send LIQUID to user --------
        if (liqUnlockAmt > liqLoss) {
            LIQUID.transfer(user, liqUnlockAmt - liqLoss);
        }
        //-------- send ETH to user --------
        if (ethOutAmt > 10 ** 8) { // ignore dust
            user.transfer(ethOutAmt);
        }
        
        emit UNLOCK_LIQ(user, liqUnlockAmt, ethRequiredForUnlock);
    }
    
    function flashBuyLiqAndLock(uint ethBorrowAmt, uint liqLockAmt, uint liqBuyMinAmt, uint liqBuyExpireTimestamp) external payable
    {
        require (block.timestamp < MIGRATION_TIMESTAMP, '!migration'); // can't lock after migration starts        
        address payable user = msg.sender;
        
        //-------- receive ETH from user --------
        uint ethInAmt = msg.value;
        
        //-------- buy LIQUID --------
        uint liqGain = 0;
        uint ethLoss = 0;
        {
            uint liqBefore = LIQUID.balanceOf(address(this));
            uint ethBefore = address(this).balance;
            
            //-------- borrow flash-loan --------
            uint ethTotalInAmt = ethInAmt.add(ethBorrowAmt);
            
            require (ethBefore >= ethTotalInAmt, '!ethInContract');
            LIQUID.buyToken {value: ethTotalInAmt} (liqBuyMinAmt, liqBuyExpireTimestamp); // buy LIQUID
    
            liqGain = (LIQUID.balanceOf(address(this))).sub(liqBefore, '!liqGain'); // now contract has more LIQUID
            ethLoss = ethBefore.sub(address(this).balance, '!ethLoss'); // now contract has less ETH            
        }
        
        //-------- compute ETH gain from locking LIQUID --------
        if (liqLockAmt > liqGain) {
            liqLockAmt = liqGain;
        }
        uint ethLockOutAmt = liqLockAmt.mul(getLiqEthFloorPriceScaled()) / (PRICE_SCALE);
        
        //-------- payback flash-loan --------
        uint ethOutAmt = ethInAmt.add(ethLockOutAmt).sub(ethLoss, '!ethLockOutAmt'); // will throw if not enough
        ethOutAmt = ethOutAmt.sub(ethBorrowAmt.mul(FLASH_LOAN_BP) / 10000, '!ethBorrowAmt');

        //-------- lock LIQUID --------
        liqLocked[user] = liqLocked[user].add(liqLockAmt);
        
        //-------- send LIQUID to user --------
        if (liqGain > liqLockAmt) {
            LIQUID.transfer(user, liqGain - liqLockAmt);
        }
        //-------- send ETH to user --------
        if (ethOutAmt > 10 ** 8) { // ignore dust
            require (address(this).balance >= ethOutAmt, '!ethOutAmt');
            user.transfer(ethOutAmt);
        }
        
        emit LOCK_LIQ(user, liqLockAmt, ethLockOutAmt);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"kethAmt","type":"uint256"}],"name":"LOCK_ETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"liqAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmt","type":"uint256"}],"name":"LOCK_LIQ","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"kethAmt","type":"uint256"}],"name":"UNLOCK_ETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"liqAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmt","type":"uint256"}],"name":"UNLOCK_LIQ","type":"event"},{"inputs":[],"name":"FLASH_LOAN_BP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUID_ADDR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIGRATION_LIQUIDATION_WAIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIGRATION_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethBorrowAmt","type":"uint256"},{"internalType":"uint256","name":"liqLockAmt","type":"uint256"},{"internalType":"uint256","name":"liqBuyMinAmt","type":"uint256"},{"internalType":"uint256","name":"liqBuyExpireTimestamp","type":"uint256"}],"name":"flashBuyLiqAndLock","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"user","type":"address"},{"internalType":"uint256","name":"liqUnlockAmt","type":"uint256"},{"internalType":"uint256","name":"liqSellAmt","type":"uint256"},{"internalType":"uint256","name":"liqSellMinEthAmt","type":"uint256"},{"internalType":"uint256","name":"liqSellExpireTimestamp","type":"uint256"}],"name":"flashUnlockLiqAndSell","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getContractValueInEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"govAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"$FLASH_LOAN_BP","type":"uint256"}],"name":"govSetFLASH_LOAN_BP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"$MIGRATION_TIMESTAMP","type":"uint256"}],"name":"govSetMIGRATION_TIMESTAMP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddr","type":"address"}],"name":"govTransferAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"liqLocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liqInAmt","type":"uint256"}],"name":"lockLiq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"kethBurnAmt","type":"uint256"}],"name":"unlockEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockLiq","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600060035562127500600455600a6005553480156200002257600080fd5b50604080518082018252600b8082526a04b697474656e45544876360ac1b6020808401828152855180870190965292855284015281519192916012916200006d9160009190620000b3565b50815162000083906001906020850190620000b3565b506002805460ff90921660ff199092169190911790555050600680546001600160a01b031916331790556200014f565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000f657805160ff191683800117855562000126565b8280016001018555821562000126579182015b828111156200012657825182559160200191906001019062000109565b506200013492915062000138565b5090565b5b8082111562000134576000815560010162000139565b61254c806200015f6000396000f3fe60806040526004361061019a5760003560e01c80637e0eeadc116100e1578063b7397ade1161008a578063d594cdb811610064578063d594cdb8146105d9578063d7611cc1146105ee578063dcb6aa6b146105f6578063dd62ed3e1461062057610209565b8063b7397ade1461057c578063cb85ce67146105af578063cde9d09e146105c457610209565b8063a779f2fe116100bb578063a779f2fe146104ff578063a9059cbb1461052e578063aa09cc571461056757610209565b80637e0eeadc146104825780638e07eb94146104ac57806395d89b41146104ea57610209565b8063377a1ed61161014357806348f965061161011d57806348f965061461041d57806370a0823114610447578063778f652d1461047a57610209565b8063377a1ed61461038f57806342edd8e0146103c057806345e26ef9146103f357610209565b80631f05cbea116101745780631f05cbea1461030c57806323b872dd14610321578063313ce5671461036457610209565b806306fdde031461020e578063095ea7b31461029857806318160ddd146102e557610209565b36610209573373c618d56b6d606e59c6b87af724ab5a91eb40d1cb14610207576040805162461bcd60e51b815260206004820152600760248201527f2173656e64657200000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561021a57600080fd5b5061022361065b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025d578181015183820152602001610245565b50505050905090810190601f16801561028a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102a457600080fd5b506102d1600480360360408110156102bb57600080fd5b506001600160a01b0381351690602001356106f1565b604080519115158252519081900360200190f35b3480156102f157600080fd5b506102fa61070f565b60408051918252519081900360200190f35b34801561031857600080fd5b506102fa610715565b34801561032d57600080fd5b506102d16004803603606081101561034457600080fd5b506001600160a01b0381358116916020810135909116906040013561071b565b34801561037057600080fd5b506103796107a2565b6040805160ff9092168252519081900360200190f35b34801561039b57600080fd5b506103a46107ab565b604080516001600160a01b039092168252519081900360200190f35b3480156103cc57600080fd5b50610207600480360360208110156103e357600080fd5b50356001600160a01b03166107c3565b3480156103ff57600080fd5b506102076004803603602081101561041657600080fd5b50356108a0565b34801561042957600080fd5b506102076004803603602081101561044057600080fd5b50356108fd565b34801561045357600080fd5b506102fa6004803603602081101561046a57600080fd5b50356001600160a01b0316610956565b610207610971565b34801561048e57600080fd5b50610207600480360360208110156104a557600080fd5b5035610b9c565b610207600480360360a08110156104c257600080fd5b506001600160a01b038135169060208101359060408101359060608101359060800135610ce1565b3480156104f657600080fd5b50610223611232565b6102076004803603608081101561051557600080fd5b5080359060208101359060408101359060600135611292565b34801561053a57600080fd5b506102d16004803603604081101561055157600080fd5b506001600160a01b0381351690602001356117e9565b34801561057357600080fd5b506102fa6117fd565b34801561058857600080fd5b506102fa6004803603602081101561059f57600080fd5b50356001600160a01b03166118b0565b3480156105bb57600080fd5b506103a46118c2565b3480156105d057600080fd5b506102fa6118d1565b3480156105e557600080fd5b506102fa6118d7565b6102076118dd565b34801561060257600080fd5b506102076004803603602081101561061957600080fd5b50356119a9565b34801561062c57600080fd5b506102fa6004803603604081101561064357600080fd5b506001600160a01b0381358116916020013516611c0d565b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e75780601f106106bc576101008083540402835291602001916106e7565b820191906000526020600020905b8154815290600101906020018083116106ca57829003601f168201915b5050505050905090565b60006107056106fe611c38565b8484611c3c565b5060015b92915050565b60095490565b60045481565b6000610728848484611d28565b61079884610734611c38565b61079385604051806060016040528060288152602001612485602891396001600160a01b038a16600090815260086020526040812090610772611c38565b6001600160a01b031681526020810191909152604001600020549190611e7a565b611c3c565b5060019392505050565b60025460ff1690565b73c618d56b6d606e59c6b87af724ab5a91eb40d1cb81565b6006546001600160a01b0316331461080b576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6001600160a01b038116610866576040805162461bcd60e51b815260206004820152600560248201527f2161646472000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6006546001600160a01b031633146108e8576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b603c60055411156108f857600080fd5b600555565b6006546001600160a01b03163314610945576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b42811161095157600080fd5b600355565b6001600160a01b031660009081526007602052604090205490565b34806109b0576040805162461bcd60e51b815260206004820152600960248201526808595d1a125b905b5d60ba1b604482015290519081900360640190fd5b600033816109bc611f11565b905060006109d9826109d3876402540be400612084565b906120fa565b6001600160a01b0384166000908152600a6020526040902054909150811115610a3c57506001600160a01b0382166000908152600a6020526040902054610a396402540be400610a298385612084565b81610a3057fe5b87919004612164565b93505b6001600160a01b0383166000908152600a6020526040902054610a5f9082612164565b6001600160a01b0384166000818152600a6020908152604080832094909455835163a9059cbb60e01b8152600481019390935260248301859052925173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9363a9059cbb93604480820194929392918390030190829087803b158015610ad757600080fd5b505af1158015610aeb573d6000803e3d6000fd5b505050506040513d6020811015610b0157600080fd5b50506305f5e100841115610b47576040516001600160a01b0384169085156108fc029086906000818181858888f19350505050158015610b45573d6000803e3d6000fd5b505b6001600160a01b0383167f998b2cc3508ff742355b91fd07dd44bdc9011ec87d1093d9378be94d2b38e5f582610b7d8888612164565b6040805192835260208301919091528051918290030190a25050505050565b60008111610bf1576040805162461bcd60e51b815260206004820152600c60248201527f216b6574684275726e416d740000000000000000000000000000000000000000604482015290519081900360640190fd5b60003390506000610c106009546109d3610c096117fd565b8690612084565b905080471015610c58576040805162461bcd60e51b815260206004820152600e60248201526d08595d1a125b90dbdb9d1c9858dd60921b604482015290519081900360640190fd5b610c6282846121c1565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610c98573d6000803e3d6000fd5b50604080518281526020810185905281516001600160a01b038516927fa47a77dc9b560fa9fc75e07b2c95e7729a69f8dcb9bf56b241891290efb369ba928290030190a2505050565b6001600160a01b038516331480610d1b5750600354600454610d04904290612164565b118015610d1b57506006546001600160a01b031633145b610d6c576040805162461bcd60e51b815260206004820152600560248201527f2175736572000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0385166000908152600a6020526040902054841115610da8576001600160a01b0385166000908152600a602052604090205493505b83831115610db4578392505b34600080806402540be400610dd1610dca611f11565b8a90612084565b81610dd857fe5b04905083811115610e1057612710610e016005546127100186840361208490919063ffffffff16565b81610e0857fe5b049250610e16565b80840391505b600080881561104657604080516370a0823160e01b8152306004820152905160009173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916370a0823191602480820192602092909190829003018186803b158015610e7457600080fd5b505afa158015610e88573d6000803e3d6000fd5b505050506040513d6020811015610e9e57600080fd5b5051604080517f1f181d57000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604481018b90529051919250479173c618d56b6d606e59c6b87af724ab5a91eb40d1cb91631f181d5791606480830192600092919082900301818387803b158015610f1f57600080fd5b505af1158015610f33573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051610ff5935073c618d56b6d606e59c6b87af724ab5a91eb40d1cb92506370a0823191602480820192602092909190829003018186803b158015610f8d57600080fd5b505afa158015610fa1573d6000803e3d6000fd5b505050506040513d6020811015610fb757600080fd5b505160408051808201909152600881527f216c69714c6f73730000000000000000000000000000000000000000000000006020820152849190611e7a565b9350611041816040518060400160405280600881526020017f216574684761696e00000000000000000000000000000000000000000000000081525047611e7a9092919063ffffffff16565b925050505b84156110845760408051808201909152600d81526c08595d1a109bdc9c9bddd05b5d609a1b602082015261107d9082908790611e7a565b9350611091565b61108e84826122b1565b93505b604080518082018252600d81527f216c6971556e6c6f636b416d74000000000000000000000000000000000000006020808301919091526001600160a01b038e166000908152600a90915291909120546110ec918c90611e7a565b6001600160a01b038c166000908152600a6020526040902055818a111561119e576040805163a9059cbb60e01b81526001600160a01b038d166004820152838c036024820152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9163a9059cbb9160448083019260209291908290030181600087803b15801561117157600080fd5b505af1158015611185573d6000803e3d6000fd5b505050506040513d602081101561119b57600080fd5b50505b6305f5e1008411156111e2576040516001600160a01b038c169085156108fc029086906000818181858888f193505050501580156111e0573d6000803e3d6000fd5b505b604080518b81526020810185905281516001600160a01b038e16927f998b2cc3508ff742355b91fd07dd44bdc9011ec87d1093d9378be94d2b38e5f5928290030190a25050505050505050505050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e75780601f106106bc576101008083540402835291602001916106e7565b60035442106112d5576040805162461bcd60e51b815260206004820152600a60248201526910b6b4b3b930ba34b7b760b11b604482015290519081900360640190fd5b604080516370a0823160e01b81523060048201529051339134916000918291829173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916370a0823191602480820192602092909190829003018186803b15801561133257600080fd5b505afa158015611346573d6000803e3d6000fd5b505050506040513d602081101561135c57600080fd5b5051905047600061136d868c6122b1565b9050808210156113b5576040805162461bcd60e51b815260206004820152600e60248201526d08595d1a125b90dbdb9d1c9858dd60921b604482015290519081900360640190fd5b73c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b031663057466ea828b8b6040518463ffffffff1660e01b815260040180838152602001828152602001925050506000604051808303818588803b15801561141757600080fd5b505af115801561142b573d6000803e3d6000fd5b50505050506114fe836040518060400160405280600881526020017f216c69714761696e00000000000000000000000000000000000000000000000081525073c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156114cb57600080fd5b505afa1580156114df573d6000803e3d6000fd5b505050506040513d60208110156114f557600080fd5b50519190611e7a565b945061154a476040518060400160405280600881526020017f216574684c6f737300000000000000000000000000000000000000000000000081525084611e7a9092919063ffffffff16565b93505050508187111561155b578196505b60006402540be40061156e610dca611f11565b8161157557fe5b04905060006115ce836040518060400160405280600e81526020017f216574684c6f636b4f7574416d740000000000000000000000000000000000008152506115c785896122b190919063ffffffff16565b9190611e7a565b90506116296127106115eb6005548d61208490919063ffffffff16565b816115f257fe5b046040518060400160405280600d81526020016c08595d1a109bdc9c9bddd05b5d609a1b81525083611e7a9092919063ffffffff16565b6001600160a01b0387166000908152600a602052604090205490915061164f908a6122b1565b6001600160a01b0387166000908152600a602052604090205588841115611701576040805163a9059cbb60e01b81526001600160a01b03881660048201528a86036024820152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9163a9059cbb9160448083019260209291908290030181600087803b1580156116d457600080fd5b505af11580156116e8573d6000803e3d6000fd5b505050506040513d60208110156116fe57600080fd5b50505b6305f5e10081111561179a5780471015611762576040805162461bcd60e51b815260206004820152600a60248201527f216574684f7574416d7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040516001600160a01b0387169082156108fc029083906000818181858888f19350505050158015611798573d6000803e3d6000fd5b505b604080518a81526020810184905281516001600160a01b038916927f9b6024f0ea0edc0d7101fc2c29212ff50f0da5a8d7614d1042adf37b764c5d89928290030190a250505050505050505050565b60006107056117f6611c38565b8484611d28565b600047816402540be400611895611812611f11565b604080516370a0823160e01b8152306004820152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916370a08231916024808301926020929190829003018186803b15801561186357600080fd5b505afa158015611877573d6000803e3d6000fd5b505050506040513d602081101561188d57600080fd5b505190612084565b8161189c57fe5b0490506118a982826122b1565b9250505090565b600a6020526000908152604090205481565b6006546001600160a01b031681565b60035481565b60055481565b33348061191d576040805162461bcd60e51b815260206004820152600960248201526808595d1a125b905b5d60ba1b604482015290519081900360640190fd5b600060095460001415611931575080611957565b611954611946836119406117fd565b90612164565b6009546109d3908590612084565b90505b611961838261230b565b604080518381526020810183905281516001600160a01b038616927f1675c3def69e4ded795f3e247bd4a74ee003770f64b2a3fa8ebbd94310e571a5928290030190a2505050565b600081116119fe576040805162461bcd60e51b815260206004820152600960248201527f216c6971496e416d740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6003544210611a41576040805162461bcd60e51b815260206004820152600a60248201526910b6b4b3b930ba34b7b760b11b604482015290519081900360640190fd5b3360006402540be400611a5c611a55611f11565b8590612084565b81611a6357fe5b04905080471015611aac576040805162461bcd60e51b815260206004820152600e60248201526d08595d1a125b90dbdb9d1c9858dd60921b604482015290519081900360640190fd5b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015230602482015260448101859052905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916323b872dd9160648083019260209291908290030181600087803b158015611b2e57600080fd5b505af1158015611b42573d6000803e3d6000fd5b505050506040513d6020811015611b5857600080fd5b50506001600160a01b0382166000908152600a6020526040902054611b7d90846122b1565b6001600160a01b0383166000818152600a6020526040808220939093559151909183156108fc02918491818181858888f19350505050158015611bc4573d6000803e3d6000fd5b50604080518481526020810183905281516001600160a01b038516927f9b6024f0ea0edc0d7101fc2c29212ff50f0da5a8d7614d1042adf37b764c5d89928290030190a2505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3390565b6001600160a01b038316611c815760405162461bcd60e51b81526004018080602001828103825260248152602001806124f36024913960400191505060405180910390fd5b6001600160a01b038216611cc65760405162461bcd60e51b815260040180806020018281038252602281526020018061243d6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260086020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611d6d5760405162461bcd60e51b81526004018080602001828103825260258152602001806124ce6025913960400191505060405180910390fd5b6001600160a01b038216611db25760405162461bcd60e51b81526004018080602001828103825260238152602001806123f86023913960400191505060405180910390fd5b611def8160405180606001604052806026815260200161245f602691396001600160a01b0386166000908152600760205260409020549190611e7a565b6001600160a01b038085166000908152600760205260408082209390935590841681522054611e1e90826122b1565b6001600160a01b0380841660008181526007602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611f095760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ece578181015183820152602001611eb6565b50505050905090810190601f168015611efb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080611ff473c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b0316638a9118c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611f6457600080fd5b505afa158015611f78573d6000803e3d6000fd5b505050506040513d6020811015611f8e57600080fd5b5051604080517ff1d9f88b000000000000000000000000000000000000000000000000000000008152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9163f1d9f88b916004808301926020929190829003018186803b15801561186357600080fd5b9050600073c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561204557600080fd5b505afa158015612059573d6000803e3d6000fd5b505050506040513d602081101561206f57600080fd5b505190506118a9816109d381816402540be400875b60008261209357506000610709565b828202828482816120a057fe5b04146120f3576040805162461bcd60e51b815260206004820152600560248201527f21216d756c000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b9392505050565b6000808211612150576040805162461bcd60e51b815260206004820152600560248201527f2121646976000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600082848161215b57fe5b04949350505050565b6000828211156121bb576040805162461bcd60e51b815260206004820152600560248201527f2121737562000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b50900390565b6001600160a01b0382166122065760405162461bcd60e51b81526004018080602001828103825260218152602001806124ad6021913960400191505060405180910390fd5b6122438160405180606001604052806022815260200161241b602291396001600160a01b0385166000908152600760205260409020549190611e7a565b6001600160a01b0383166000908152600760205260409020556009546122699082612164565b6009556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000828201838110156120f3576040805162461bcd60e51b815260206004820152600560248201527f2121616464000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038216612366576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6001600160a01b03821660009081526007602052604090205461238990826122b1565b6001600160a01b0383166000908152600760205260409020556009546123af90826122b1565b6009556040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220c5a926da78506474e82c8b52a22f26414e5780fe9150d7e446c639d81942f63564736f6c634300060c0033

Deployed Bytecode

0x60806040526004361061019a5760003560e01c80637e0eeadc116100e1578063b7397ade1161008a578063d594cdb811610064578063d594cdb8146105d9578063d7611cc1146105ee578063dcb6aa6b146105f6578063dd62ed3e1461062057610209565b8063b7397ade1461057c578063cb85ce67146105af578063cde9d09e146105c457610209565b8063a779f2fe116100bb578063a779f2fe146104ff578063a9059cbb1461052e578063aa09cc571461056757610209565b80637e0eeadc146104825780638e07eb94146104ac57806395d89b41146104ea57610209565b8063377a1ed61161014357806348f965061161011d57806348f965061461041d57806370a0823114610447578063778f652d1461047a57610209565b8063377a1ed61461038f57806342edd8e0146103c057806345e26ef9146103f357610209565b80631f05cbea116101745780631f05cbea1461030c57806323b872dd14610321578063313ce5671461036457610209565b806306fdde031461020e578063095ea7b31461029857806318160ddd146102e557610209565b36610209573373c618d56b6d606e59c6b87af724ab5a91eb40d1cb14610207576040805162461bcd60e51b815260206004820152600760248201527f2173656e64657200000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b005b600080fd5b34801561021a57600080fd5b5061022361065b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561025d578181015183820152602001610245565b50505050905090810190601f16801561028a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102a457600080fd5b506102d1600480360360408110156102bb57600080fd5b506001600160a01b0381351690602001356106f1565b604080519115158252519081900360200190f35b3480156102f157600080fd5b506102fa61070f565b60408051918252519081900360200190f35b34801561031857600080fd5b506102fa610715565b34801561032d57600080fd5b506102d16004803603606081101561034457600080fd5b506001600160a01b0381358116916020810135909116906040013561071b565b34801561037057600080fd5b506103796107a2565b6040805160ff9092168252519081900360200190f35b34801561039b57600080fd5b506103a46107ab565b604080516001600160a01b039092168252519081900360200190f35b3480156103cc57600080fd5b50610207600480360360208110156103e357600080fd5b50356001600160a01b03166107c3565b3480156103ff57600080fd5b506102076004803603602081101561041657600080fd5b50356108a0565b34801561042957600080fd5b506102076004803603602081101561044057600080fd5b50356108fd565b34801561045357600080fd5b506102fa6004803603602081101561046a57600080fd5b50356001600160a01b0316610956565b610207610971565b34801561048e57600080fd5b50610207600480360360208110156104a557600080fd5b5035610b9c565b610207600480360360a08110156104c257600080fd5b506001600160a01b038135169060208101359060408101359060608101359060800135610ce1565b3480156104f657600080fd5b50610223611232565b6102076004803603608081101561051557600080fd5b5080359060208101359060408101359060600135611292565b34801561053a57600080fd5b506102d16004803603604081101561055157600080fd5b506001600160a01b0381351690602001356117e9565b34801561057357600080fd5b506102fa6117fd565b34801561058857600080fd5b506102fa6004803603602081101561059f57600080fd5b50356001600160a01b03166118b0565b3480156105bb57600080fd5b506103a46118c2565b3480156105d057600080fd5b506102fa6118d1565b3480156105e557600080fd5b506102fa6118d7565b6102076118dd565b34801561060257600080fd5b506102076004803603602081101561061957600080fd5b50356119a9565b34801561062c57600080fd5b506102fa6004803603604081101561064357600080fd5b506001600160a01b0381358116916020013516611c0d565b60008054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e75780601f106106bc576101008083540402835291602001916106e7565b820191906000526020600020905b8154815290600101906020018083116106ca57829003601f168201915b5050505050905090565b60006107056106fe611c38565b8484611c3c565b5060015b92915050565b60095490565b60045481565b6000610728848484611d28565b61079884610734611c38565b61079385604051806060016040528060288152602001612485602891396001600160a01b038a16600090815260086020526040812090610772611c38565b6001600160a01b031681526020810191909152604001600020549190611e7a565b611c3c565b5060019392505050565b60025460ff1690565b73c618d56b6d606e59c6b87af724ab5a91eb40d1cb81565b6006546001600160a01b0316331461080b576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6001600160a01b038116610866576040805162461bcd60e51b815260206004820152600560248201527f2161646472000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6006546001600160a01b031633146108e8576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b603c60055411156108f857600080fd5b600555565b6006546001600160a01b03163314610945576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b42811161095157600080fd5b600355565b6001600160a01b031660009081526007602052604090205490565b34806109b0576040805162461bcd60e51b815260206004820152600960248201526808595d1a125b905b5d60ba1b604482015290519081900360640190fd5b600033816109bc611f11565b905060006109d9826109d3876402540be400612084565b906120fa565b6001600160a01b0384166000908152600a6020526040902054909150811115610a3c57506001600160a01b0382166000908152600a6020526040902054610a396402540be400610a298385612084565b81610a3057fe5b87919004612164565b93505b6001600160a01b0383166000908152600a6020526040902054610a5f9082612164565b6001600160a01b0384166000818152600a6020908152604080832094909455835163a9059cbb60e01b8152600481019390935260248301859052925173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9363a9059cbb93604480820194929392918390030190829087803b158015610ad757600080fd5b505af1158015610aeb573d6000803e3d6000fd5b505050506040513d6020811015610b0157600080fd5b50506305f5e100841115610b47576040516001600160a01b0384169085156108fc029086906000818181858888f19350505050158015610b45573d6000803e3d6000fd5b505b6001600160a01b0383167f998b2cc3508ff742355b91fd07dd44bdc9011ec87d1093d9378be94d2b38e5f582610b7d8888612164565b6040805192835260208301919091528051918290030190a25050505050565b60008111610bf1576040805162461bcd60e51b815260206004820152600c60248201527f216b6574684275726e416d740000000000000000000000000000000000000000604482015290519081900360640190fd5b60003390506000610c106009546109d3610c096117fd565b8690612084565b905080471015610c58576040805162461bcd60e51b815260206004820152600e60248201526d08595d1a125b90dbdb9d1c9858dd60921b604482015290519081900360640190fd5b610c6282846121c1565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610c98573d6000803e3d6000fd5b50604080518281526020810185905281516001600160a01b038516927fa47a77dc9b560fa9fc75e07b2c95e7729a69f8dcb9bf56b241891290efb369ba928290030190a2505050565b6001600160a01b038516331480610d1b5750600354600454610d04904290612164565b118015610d1b57506006546001600160a01b031633145b610d6c576040805162461bcd60e51b815260206004820152600560248201527f2175736572000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b0385166000908152600a6020526040902054841115610da8576001600160a01b0385166000908152600a602052604090205493505b83831115610db4578392505b34600080806402540be400610dd1610dca611f11565b8a90612084565b81610dd857fe5b04905083811115610e1057612710610e016005546127100186840361208490919063ffffffff16565b81610e0857fe5b049250610e16565b80840391505b600080881561104657604080516370a0823160e01b8152306004820152905160009173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916370a0823191602480820192602092909190829003018186803b158015610e7457600080fd5b505afa158015610e88573d6000803e3d6000fd5b505050506040513d6020811015610e9e57600080fd5b5051604080517f1f181d57000000000000000000000000000000000000000000000000000000008152600481018d9052602481018c9052604481018b90529051919250479173c618d56b6d606e59c6b87af724ab5a91eb40d1cb91631f181d5791606480830192600092919082900301818387803b158015610f1f57600080fd5b505af1158015610f33573d6000803e3d6000fd5b5050604080516370a0823160e01b81523060048201529051610ff5935073c618d56b6d606e59c6b87af724ab5a91eb40d1cb92506370a0823191602480820192602092909190829003018186803b158015610f8d57600080fd5b505afa158015610fa1573d6000803e3d6000fd5b505050506040513d6020811015610fb757600080fd5b505160408051808201909152600881527f216c69714c6f73730000000000000000000000000000000000000000000000006020820152849190611e7a565b9350611041816040518060400160405280600881526020017f216574684761696e00000000000000000000000000000000000000000000000081525047611e7a9092919063ffffffff16565b925050505b84156110845760408051808201909152600d81526c08595d1a109bdc9c9bddd05b5d609a1b602082015261107d9082908790611e7a565b9350611091565b61108e84826122b1565b93505b604080518082018252600d81527f216c6971556e6c6f636b416d74000000000000000000000000000000000000006020808301919091526001600160a01b038e166000908152600a90915291909120546110ec918c90611e7a565b6001600160a01b038c166000908152600a6020526040902055818a111561119e576040805163a9059cbb60e01b81526001600160a01b038d166004820152838c036024820152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9163a9059cbb9160448083019260209291908290030181600087803b15801561117157600080fd5b505af1158015611185573d6000803e3d6000fd5b505050506040513d602081101561119b57600080fd5b50505b6305f5e1008411156111e2576040516001600160a01b038c169085156108fc029086906000818181858888f193505050501580156111e0573d6000803e3d6000fd5b505b604080518b81526020810185905281516001600160a01b038e16927f998b2cc3508ff742355b91fd07dd44bdc9011ec87d1093d9378be94d2b38e5f5928290030190a25050505050505050505050565b60018054604080516020601f600260001961010087891615020190951694909404938401819004810282018101909252828152606093909290918301828280156106e75780601f106106bc576101008083540402835291602001916106e7565b60035442106112d5576040805162461bcd60e51b815260206004820152600a60248201526910b6b4b3b930ba34b7b760b11b604482015290519081900360640190fd5b604080516370a0823160e01b81523060048201529051339134916000918291829173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916370a0823191602480820192602092909190829003018186803b15801561133257600080fd5b505afa158015611346573d6000803e3d6000fd5b505050506040513d602081101561135c57600080fd5b5051905047600061136d868c6122b1565b9050808210156113b5576040805162461bcd60e51b815260206004820152600e60248201526d08595d1a125b90dbdb9d1c9858dd60921b604482015290519081900360640190fd5b73c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b031663057466ea828b8b6040518463ffffffff1660e01b815260040180838152602001828152602001925050506000604051808303818588803b15801561141757600080fd5b505af115801561142b573d6000803e3d6000fd5b50505050506114fe836040518060400160405280600881526020017f216c69714761696e00000000000000000000000000000000000000000000000081525073c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156114cb57600080fd5b505afa1580156114df573d6000803e3d6000fd5b505050506040513d60208110156114f557600080fd5b50519190611e7a565b945061154a476040518060400160405280600881526020017f216574684c6f737300000000000000000000000000000000000000000000000081525084611e7a9092919063ffffffff16565b93505050508187111561155b578196505b60006402540be40061156e610dca611f11565b8161157557fe5b04905060006115ce836040518060400160405280600e81526020017f216574684c6f636b4f7574416d740000000000000000000000000000000000008152506115c785896122b190919063ffffffff16565b9190611e7a565b90506116296127106115eb6005548d61208490919063ffffffff16565b816115f257fe5b046040518060400160405280600d81526020016c08595d1a109bdc9c9bddd05b5d609a1b81525083611e7a9092919063ffffffff16565b6001600160a01b0387166000908152600a602052604090205490915061164f908a6122b1565b6001600160a01b0387166000908152600a602052604090205588841115611701576040805163a9059cbb60e01b81526001600160a01b03881660048201528a86036024820152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9163a9059cbb9160448083019260209291908290030181600087803b1580156116d457600080fd5b505af11580156116e8573d6000803e3d6000fd5b505050506040513d60208110156116fe57600080fd5b50505b6305f5e10081111561179a5780471015611762576040805162461bcd60e51b815260206004820152600a60248201527f216574684f7574416d7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040516001600160a01b0387169082156108fc029083906000818181858888f19350505050158015611798573d6000803e3d6000fd5b505b604080518a81526020810184905281516001600160a01b038916927f9b6024f0ea0edc0d7101fc2c29212ff50f0da5a8d7614d1042adf37b764c5d89928290030190a250505050505050505050565b60006107056117f6611c38565b8484611d28565b600047816402540be400611895611812611f11565b604080516370a0823160e01b8152306004820152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916370a08231916024808301926020929190829003018186803b15801561186357600080fd5b505afa158015611877573d6000803e3d6000fd5b505050506040513d602081101561188d57600080fd5b505190612084565b8161189c57fe5b0490506118a982826122b1565b9250505090565b600a6020526000908152604090205481565b6006546001600160a01b031681565b60035481565b60055481565b33348061191d576040805162461bcd60e51b815260206004820152600960248201526808595d1a125b905b5d60ba1b604482015290519081900360640190fd5b600060095460001415611931575080611957565b611954611946836119406117fd565b90612164565b6009546109d3908590612084565b90505b611961838261230b565b604080518381526020810183905281516001600160a01b038616927f1675c3def69e4ded795f3e247bd4a74ee003770f64b2a3fa8ebbd94310e571a5928290030190a2505050565b600081116119fe576040805162461bcd60e51b815260206004820152600960248201527f216c6971496e416d740000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6003544210611a41576040805162461bcd60e51b815260206004820152600a60248201526910b6b4b3b930ba34b7b760b11b604482015290519081900360640190fd5b3360006402540be400611a5c611a55611f11565b8590612084565b81611a6357fe5b04905080471015611aac576040805162461bcd60e51b815260206004820152600e60248201526d08595d1a125b90dbdb9d1c9858dd60921b604482015290519081900360640190fd5b604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015230602482015260448101859052905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb916323b872dd9160648083019260209291908290030181600087803b158015611b2e57600080fd5b505af1158015611b42573d6000803e3d6000fd5b505050506040513d6020811015611b5857600080fd5b50506001600160a01b0382166000908152600a6020526040902054611b7d90846122b1565b6001600160a01b0383166000818152600a6020526040808220939093559151909183156108fc02918491818181858888f19350505050158015611bc4573d6000803e3d6000fd5b50604080518481526020810183905281516001600160a01b038516927f9b6024f0ea0edc0d7101fc2c29212ff50f0da5a8d7614d1042adf37b764c5d89928290030190a2505050565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b3390565b6001600160a01b038316611c815760405162461bcd60e51b81526004018080602001828103825260248152602001806124f36024913960400191505060405180910390fd5b6001600160a01b038216611cc65760405162461bcd60e51b815260040180806020018281038252602281526020018061243d6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260086020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611d6d5760405162461bcd60e51b81526004018080602001828103825260258152602001806124ce6025913960400191505060405180910390fd5b6001600160a01b038216611db25760405162461bcd60e51b81526004018080602001828103825260238152602001806123f86023913960400191505060405180910390fd5b611def8160405180606001604052806026815260200161245f602691396001600160a01b0386166000908152600760205260409020549190611e7a565b6001600160a01b038085166000908152600760205260408082209390935590841681522054611e1e90826122b1565b6001600160a01b0380841660008181526007602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115611f095760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611ece578181015183820152602001611eb6565b50505050905090810190601f168015611efb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080611ff473c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b0316638a9118c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611f6457600080fd5b505afa158015611f78573d6000803e3d6000fd5b505050506040513d6020811015611f8e57600080fd5b5051604080517ff1d9f88b000000000000000000000000000000000000000000000000000000008152905173c618d56b6d606e59c6b87af724ab5a91eb40d1cb9163f1d9f88b916004808301926020929190829003018186803b15801561186357600080fd5b9050600073c618d56b6d606e59c6b87af724ab5a91eb40d1cb6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561204557600080fd5b505afa158015612059573d6000803e3d6000fd5b505050506040513d602081101561206f57600080fd5b505190506118a9816109d381816402540be400875b60008261209357506000610709565b828202828482816120a057fe5b04146120f3576040805162461bcd60e51b815260206004820152600560248201527f21216d756c000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b9392505050565b6000808211612150576040805162461bcd60e51b815260206004820152600560248201527f2121646976000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600082848161215b57fe5b04949350505050565b6000828211156121bb576040805162461bcd60e51b815260206004820152600560248201527f2121737562000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b50900390565b6001600160a01b0382166122065760405162461bcd60e51b81526004018080602001828103825260218152602001806124ad6021913960400191505060405180910390fd5b6122438160405180606001604052806022815260200161241b602291396001600160a01b0385166000908152600760205260409020549190611e7a565b6001600160a01b0383166000908152600760205260409020556009546122699082612164565b6009556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6000828201838110156120f3576040805162461bcd60e51b815260206004820152600560248201527f2121616464000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038216612366576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6001600160a01b03821660009081526007602052604090205461238990826122b1565b6001600160a01b0383166000908152600760205260409020556009546123af90826122b1565b6009556040805182815290516001600160a01b038416916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220c5a926da78506474e82c8b52a22f26414e5780fe9150d7e446c639d81942f63564736f6c634300060c0033

Deployed Bytecode Sourcemap

2931:14459:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12384:10;3051:42;12384:25;12376:45;;;;;-1:-1:-1;;;12376:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2931:14459;;;;;1772:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6253:149;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6253:149:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4857:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3173:48;;;;;;;;;;;;;:::i;5225:301::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5225:301:0;;;;;;;;;;;;;;;;;:::i;1954:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3013:80;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3013:80:0;;;;;;;;;;;;;;3807:140;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3807:140:0;-1:-1:-1;;;;;3807:140:0;;:::i;4167:153::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4167:153:0;;:::i;3959:196::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3959:196:0;;:::i;4951:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4951:107:0;-1:-1:-1;;;;;4951:107:0;;:::i;11053:1144::-;;;:::i;9286:637::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9286:637:0;;:::i;12437:2674::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12437:2674:0;;;;;;;;;;;;;;;;;;;;;;;:::i;1861:87::-;;;;;;;;;;;;;:::i;15123:2264::-;;;;;;;;;;;;;;;;-1:-1:-1;15123:2264:0;;;;;;;;;;;;;;;;;:::i;5064:155::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5064:155:0;;;;;;;;:::i;8208:292::-;;;;;;;;;;;;;:::i;10027:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10027:42:0;-1:-1:-1;;;;;10027:42:0;;:::i;3552:22::-;;;;;;;;;;;;;:::i;3100:35::-;;;;;;;;;;;;;:::i;3299:30::-;;;;;;;;;;;;;:::i;8508:766::-;;;:::i;10232:809::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10232:809:0;;:::i;6116:131::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6116:131:0;;;;;;;;;;:::i;1772:83::-;1842:5;1835:12;;;;;;;;-1:-1:-1;;1835:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1809:13;;1835:12;;1842:5;;1835:12;;1842:5;1835:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1772:83;:::o;6253:149::-;6316:4;6333:39;6342:12;:10;:12::i;:::-;6356:7;6365:6;6333:8;:39::i;:::-;-1:-1:-1;6390:4:0;6253:149;;;;;:::o;4857:88::-;4925:12;;4857:88;:::o;3173:48::-;;;;:::o;5225:301::-;5311:4;5328:36;5338:6;5346:9;5357:6;5328:9;:36::i;:::-;5375:121;5384:6;5392:12;:10;:12::i;:::-;5406:89;5444:6;5406:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5406:19:0;;;;;;:11;:19;;;;;;5426:12;:10;:12::i;:::-;-1:-1:-1;;;;;5406:33:0;;;;;;;;;;;;-1:-1:-1;5406:33:0;;;:89;:37;:89::i;:::-;5375:8;:121::i;:::-;-1:-1:-1;5514:4:0;5225:301;;;;;:::o;1954:83::-;2020:9;;;;1954:83;:::o;3013:80::-;3051:42;3013:80;:::o;3807:140::-;3762:7;;-1:-1:-1;;;;;3762:7:0;3748:10;:21;3739:39;;;;;-1:-1:-1;;;3739:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;3739:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3883:21:0;::::1;3874:40;;;::::0;;-1:-1:-1;;;3874:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3922:7;:17:::0;;;::::1;-1:-1:-1::0;;;;;3922:17:0;;;::::1;::::0;;;::::1;::::0;;3807:140::o;4167:153::-;3762:7;;-1:-1:-1;;;;;3762:7:0;3748:10;:21;3739:39;;;;;-1:-1:-1;;;3739:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;3739:39:0;;;;;;;;;;;;;;;4271:2:::1;4254:13;;:19;;4245:29;;;::::0;::::1;;4282:13;:30:::0;4167:153::o;3959:196::-;3762:7;;-1:-1:-1;;;;;3762:7:0;3748:10;:21;3739:39;;;;;-1:-1:-1;;;3739:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;3739:39:0;;;;;;;;;;;;;;;4081:15:::1;4058:20;:38;4049:48;;;::::0;::::1;;4105:19;:42:::0;3959:196::o;4951:107::-;-1:-1:-1;;;;;5032:18:0;5008:4;5032:18;;;:9;:18;;;;;;;4951:107::o;11053:1144::-;11206:9;11235:12;11226:35;;;;;-1:-1:-1;;;11226:35:0;;;;;;;;;;;;-1:-1:-1;;;11226:35:0;;;;;;;;;;;;;;;11272:17;11327:10;11272:17;11432:27;:25;:27::i;:::-;11402:57;-1:-1:-1;11472:14:0;11489:53;11402:57;11489:25;:8;7647;11489:12;:25::i;:::-;:29;;:53::i;:::-;-1:-1:-1;;;;;11569:15:0;;;;;;:9;:15;;;;;;11472:70;;-1:-1:-1;11557:27:0;;11553:233;;;-1:-1:-1;;;;;;11622:15:0;;;;;;:9;:15;;;;;;11667:107;7647:8;11702:37;11622:15;11716:22;11702:13;:37::i;:::-;:53;;;;;11667:8;;11702:53;;11667:12;:107::i;:::-;11652:122;;11553:233;-1:-1:-1;;;;;11874:15:0;;;;;;:9;:15;;;;;;:30;;11894:9;11874:19;:30::i;:::-;-1:-1:-1;;;;;11856:15:0;;;;;;:9;:15;;;;;;;;:48;;;;11915:32;;-1:-1:-1;;;11915:32:0;;;;;;;;;;;;;;;;;3051:42;;11915:15;;:32;;;;;11856:15;;11915:32;;;;;;;;;3051:42;11915:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12041:7:0;12026:22;;12022:97;;;12080:27;;-1:-1:-1;;;;;12080:13:0;;;:27;;;;;12094:12;;12080:27;;;;12094:12;12080:13;:27;;;;;;;;;;;;;;;;;;;;;12022:97;-1:-1:-1;;;;;12134:55:0;;;12151:9;12162:26;:8;12175:12;12162;:26::i;:::-;12134:55;;;;;;;;;;;;;;;;;;;;;;11053:1144;;;;;:::o;9286:637::-;9405:1;9391:11;:15;9382:41;;;;;-1:-1:-1;;;9382:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9434:20;9457:10;9434:33;;9529:14;9546:58;9591:12;;9546:40;9562:23;:21;:23::i;:::-;9546:11;;:15;:40::i;:58::-;9529:75;;9649:9;9624:21;:34;;9615:62;;;;;-1:-1:-1;;;9615:62:0;;;;;;;;;;;;-1:-1:-1;;;9615:62:0;;;;;;;;;;;;;;;9744:24;9750:4;9756:11;9744:5;:24::i;:::-;9835;;-1:-1:-1;;;;;9835:13:0;;;:24;;;;;9849:9;;9835:24;;;;9849:9;9835:13;:24;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9875:40:0;;;;;;;;;;;;;;-1:-1:-1;;;;;9875:40:0;;;;;;;;;;;9286:637;;;:::o;12437:2674::-;-1:-1:-1;;;;;12635:18:0;;12643:10;12635:18;;12634:221;;-1:-1:-1;12807:19:0;;12777:26;;12757:47;;:15;;:19;:47::i;:::-;:69;12756:98;;;;-1:-1:-1;12832:7:0;;-1:-1:-1;;;;;12832:7:0;12843:10;12832:21;12756:98;12611:264;;;;;-1:-1:-1;;;12611:264:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12915:15:0;;;;;;:9;:15;;;;;;12900:30;;12896:79;;;-1:-1:-1;;;;;12960:15:0;;;;;;:9;:15;;;;;;;-1:-1:-1;12896:79:0;13003:12;12990:10;:25;12986:69;;;13043:12;13030:25;;12986:69;13135:9;13119:13;;;7647:8;13335:45;13352:27;:25;:27::i;:::-;13335:12;;:16;:45::i;:::-;:61;;;;;;13307:89;;13434:8;13411:20;:31;13407:248;;;13537:5;13474:60;13520:13;;13512:5;:21;13498:8;13475:20;:31;13474:37;;:60;;;;:::i;:::-;:68;;;;;;13459:83;;13407:248;;;13623:20;13612:8;:31;13600:43;;13407:248;13708:12;;13766:14;;13762:508;;13823:31;;;-1:-1:-1;;;13823:31:0;;13848:4;13823:31;;;;;;13806:14;;3051:42;;13823:16;;:31;;;;;;;;;;;;;;;3051:42;13823:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13823:31:0;13936:70;;;;;;;;;;;;;;;;;;;;;;;;;;13823:31;;-1:-1:-1;13886:21:0;;3051:42;;13936:16;;:70;;;;;13869:14;;13936:70;;;;;;;13869:14;3051:42;13936:70;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14066:31:0;;;-1:-1:-1;;;14066:31:0;;14091:4;14066:31;;;;;;14052:58;;-1:-1:-1;3051:42:0;;-1:-1:-1;14066:16:0;;:31;;;;;;;;;;;;;;;3051:42;14066:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14066:31:0;14052:58;;;;;;;;;;;;;14066:31;14052:58;;;:9;;14066:31;14052:13;:58::i;:::-;14042:68;;14167:50;14195:9;14167:50;;;;;;;;;;;;;;;;;14168:21;14167:27;;:50;;;;;:::i;:::-;14157:60;;13762:508;;;14355:16;;14351:235;;14417:42;;;;;;;;;;;;-1:-1:-1;;;14417:42:0;;;;;;:7;;14429:12;;14417:11;:42::i;:::-;14405:54;;14351:235;;;14552:22;:9;14566:7;14552:13;:22::i;:::-;14540:34;;14351:235;14659:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14659:15:0;;-1:-1:-1;14659:15:0;;;:9;:15;;;;;;;;:50;;14679:12;;14659:19;:50::i;:::-;-1:-1:-1;;;;;14641:15:0;;;;;;:9;:15;;;;;:68;14783:22;;;14779:100;;;14822:45;;;-1:-1:-1;;;14822:45:0;;-1:-1:-1;;;;;14822:45:0;;;;;;14844:22;;;14822:45;;;;;;3051:42;;14822:15;;:45;;;;;;;;;;;;;;-1:-1:-1;3051:42:0;14822:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14779:100:0;14951:7;14939:9;:19;14935:91;;;14990:24;;-1:-1:-1;;;;;14990:13:0;;;:24;;;;;15004:9;;14990:24;;;;15004:9;14990:13;:24;;;;;;;;;;;;;;;;;;;;;14935:91;15051:52;;;;;;;;;;;;;;-1:-1:-1;;;;;15051:52:0;;;;;;;;;;;12437:2674;;;;;;;;;;;:::o;1861:87::-;1933:7;1926:14;;;;;;;;-1:-1:-1;;1926:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1900:13;;1926:14;;1933:7;;1926:14;;1933:7;1926:14;;;;;;;;;;;;;;;;;;;;;;;;15123:2264;15294:19;;15276:15;:37;15267:61;;;;;-1:-1:-1;;;15267:61:0;;;;;;;;;;;;-1:-1:-1;;;15267:61:0;;;;;;;;;;;;;;;15661:31;;;-1:-1:-1;;;15661:31:0;;15686:4;15661:31;;;;;;15407:10;;15505:9;;15384:20;;;;;;3051:42;;15661:16;;:31;;;;;;;;;;;;;;;3051:42;15661:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15661:31:0;;-1:-1:-1;15724:21:0;15707:14;15846:26;:8;15859:12;15846;:26::i;:::-;15825:47;;15923:13;15910:9;:26;;15901:54;;;;;-1:-1:-1;;;15901:54:0;;;;;;;;;;;;-1:-1:-1;;;15901:54:0;;;;;;;;;;;;;;;3051:42;-1:-1:-1;;;;;15970:15:0;;15994:13;16010:12;16024:21;15970:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16091:60;16129:9;16091:60;;;;;;;;;;;;;;;;;3051:42;-1:-1:-1;;;;;16092:16:0;;16117:4;16092:31;;;;;;;;;;;;;-1:-1:-1;;;;;16092:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16092:31:0;;16091:60;:37;:60::i;:::-;16081:70;;16208:48;16222:21;16208:48;;;;;;;;;;;;;;;;;:9;:13;;:48;;;;;:::i;:::-;16198:58;;15123:2264;;;16412:7;16399:10;:20;16395:73;;;16449:7;16436:20;;16395:73;16478:18;7647:8;16499:43;16514:27;:25;:27::i;16499:43::-;:59;;;;;;16478:80;;16627:14;16644:58;16676:7;16644:58;;;;;;;;;;;;;;;;;:27;16657:13;16644:8;:12;;:27;;;;:::i;:::-;:31;:58;:31;:58::i;:::-;16627:75;;16753:71;16801:5;16767:31;16784:13;;16767:12;:16;;:31;;;;:::i;:::-;:39;;;;;;16753:71;;;;;;;;;;;;;-1:-1:-1;;;16753:71:0;;;:9;:13;;:71;;;;;:::i;:::-;-1:-1:-1;;;;;16896:15:0;;;;;;:9;:15;;;;;;16741:83;;-1:-1:-1;16896:31:0;;16916:10;16896:19;:31::i;:::-;-1:-1:-1;;;;;16878:15:0;;;;;;:9;:15;;;;;:49;17001:20;;;16997:96;;;17038:43;;;-1:-1:-1;;;17038:43:0;;-1:-1:-1;;;;;17038:43:0;;;;;;17060:20;;;17038:43;;;;;;3051:42;;17038:15;;:43;;;;;;;;;;;;;;-1:-1:-1;3051:42:0;17038:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16997:96:0;17165:7;17153:9;:19;17149:164;;;17238:9;17213:21;:34;;17204:58;;;;;-1:-1:-1;;;17204:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17277:24;;-1:-1:-1;;;;;17277:13:0;;;:24;;;;;17291:9;;17277:24;;;;17291:9;17277:13;:24;;;;;;;;;;;;;;;;;;;;;17149:164;17338:41;;;;;;;;;;;;;;-1:-1:-1;;;;;17338:41:0;;;;;;;;;;;15123:2264;;;;;;;;;;:::o;5064:155::-;5130:4;5147:42;5157:12;:10;:12::i;:::-;5171:9;5182:6;5147:9;:42::i;8208:292::-;8262:4;8301:21;8262:4;7647:8;8360:66;8398:27;:25;:27::i;:::-;8361:31;;;-1:-1:-1;;;8361:31:0;;8386:4;8361:31;;;;;;3051:42;;8361:16;;:31;;;;;;;;;;;;;;3051:42;8361:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8361:31:0;;8360:37;:66::i;:::-;:82;;;;;;;-1:-1:-1;8470:22:0;:8;8360:82;8470:12;:22::i;:::-;8463:29;;;;8208:292;:::o;10027:42::-;;;;;;;;;;;;;:::o;3552:22::-;;;-1:-1:-1;;;;;3552:22:0;;:::o;3100:35::-;;;;:::o;3299:30::-;;;;:::o;8508:766::-;8670:10;8707:9;8736:12;8727:35;;;;;-1:-1:-1;;;8727:35:0;;;;;;;;;;;;-1:-1:-1;;;8727:35:0;;;;;;;;;;;;;;;8839:16;8874:12;;8890:1;8874:17;8870:247;;;-1:-1:-1;8923:8:0;8870:247;;;9036:69;9067:37;9095:8;9067:23;:21;:23::i;:::-;:27;;:37::i;:::-;9049:12;;9036:26;;:8;;:12;:26::i;:69::-;9022:83;;8870:247;9189:24;9195:4;9201:11;9189:5;:24::i;:::-;9229:37;;;;;;;;;;;;;;-1:-1:-1;;;;;9229:37:0;;;;;;;;;;;8508:766;;;:::o;10232:809::-;10338:1;10327:8;:12;10318:35;;;;;-1:-1:-1;;;10318:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10391:19;;10373:15;:37;10364:61;;;;;-1:-1:-1;;;10364:61:0;;;;;;;;;;;;-1:-1:-1;;;10364:61:0;;;;;;;;;;;;;;;10496:10;10473:20;7647:8;10585:41;10598:27;:25;:27::i;:::-;10585:8;;:12;:41::i;:::-;:57;;;;;;10568:74;;10687:9;10662:21;:34;;10653:62;;;;;-1:-1:-1;;;10653:62:0;;;;;;;;;;;;-1:-1:-1;;;10653:62:0;;;;;;;;;;;;;;;10782:50;;;;;;-1:-1:-1;;;;;10782:50:0;;;;;;10816:4;10782:50;;;;;;;;;;;;3051:42;;10782:19;;:50;;;;;;;;;;;;;;-1:-1:-1;3051:42:0;10782:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;10862:15:0;;;;;;:9;10782:50;10862:15;;;;;:29;;10882:8;10862:19;:29::i;:::-;-1:-1:-1;;;;;10844:15:0;;;;;;:9;:15;;;;;;:47;;;;10958:24;;10844:15;;10958:24;;;;;10972:9;;10958:24;10844:15;10958:24;10972:9;10844:15;10958:24;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10998:35:0;;;;;;;;;;;;;;-1:-1:-1;;;;;10998:35:0;;;;;;;;;;;10232:809;;;:::o;6116:131::-;-1:-1:-1;;;;;6212:18:0;;;6188:4;6212:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6116:131::o;4428:98::-;4508:10;4428:98;:::o;6408:337::-;-1:-1:-1;;;;;6500:19:0;;6491:69;;;;-1:-1:-1;;;6491:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6580:21:0;;6571:69;;;;-1:-1:-1;;;6571:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6653:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;6705:32;;;;;;;;;;;;;;;;;6408:337;;;:::o;5532:480::-;-1:-1:-1;;;;;5628:20:0;;5619:71;;;;-1:-1:-1;;;5619:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5710:23:0;;5701:72;;;;-1:-1:-1;;;5701:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5806:71;5828:6;5806:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5806:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;5786:17:0;;;;;;;:9;:17;;;;;;:91;;;;5921:20;;;;;;;:32;;5946:6;5921:24;:32::i;:::-;-1:-1:-1;;;;;5898:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;5969:35;;;;;;;5898:20;;5969:35;;;;;;;;;;;;;5532:480;;;:::o;894:188::-;980:7;1017:12;1009:6;;;;1000:30;;;;-1:-1:-1;;;1000:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1050:5:0;;;894:188::o;7662:298::-;7722:4;7744:16;7763:54;3051:42;-1:-1:-1;;;;;7794:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7794:22:0;7764:24;;;;;;;;3051:42;;7764:22;;:24;;;;;7794:22;;7764:24;;;;;;;3051:42;7764:24;;;;;;;;;;7763:54;7744:73;;7828:17;3051:42;-1:-1:-1;;;;;7848:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7848:20:0;;-1:-1:-1;7888:64:0;7848:20;7888:46;7848:20;7888:46;7647:8;7904:11;1092:219;1150:7;1174:6;1170:47;;-1:-1:-1;1204:1:0;1197:8;;1170:47;1239:5;;;1243:1;1239;:5;:1;1264:5;;;;;:10;1255:29;;;;;-1:-1:-1;;;1255:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1302:1;1092:219;-1:-1:-1;;;1092:219:0:o;1317:157::-;1375:7;1408:1;1404;:5;1395:24;;;;;-1:-1:-1;;;1395:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1430:9;1446:1;1442;:5;;;;;;;1317:157;-1:-1:-1;;;;1317:157:0:o;730:158::-;788:7;822:1;817;:6;;808:25;;;;;-1:-1:-1;;;808:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;856:5:0;;;730:158::o;7163:356::-;-1:-1:-1;;;;;7237:21:0;;7228:68;;;;-1:-1:-1;;;7228:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7338;7361:6;7338:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7338:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;7317:18:0;;;;;;:9;:18;;;;;:89;7432:12;;:24;;7449:6;7432:16;:24::i;:::-;7417:12;:39;7474:37;;;;;;;;7500:1;;-1:-1:-1;;;;;7474:37:0;;;;;;;;;;;;7163:356;;:::o;566:158::-;624:7;656:5;;;681:6;;;;672:25;;;;;-1:-1:-1;;;672:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;6849:308;-1:-1:-1;;;;;6923:21:0;;6914:66;;;;;-1:-1:-1;;;6914:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7014:18:0;;;;;;:9;:18;;;;;;:30;;7037:6;7014:22;:30::i;:::-;-1:-1:-1;;;;;6993:18:0;;;;;;:9;:18;;;;;:51;7070:12;;:24;;7087:6;7070:16;:24::i;:::-;7055:12;:39;7112:37;;;;;;;;-1:-1:-1;;;;;7112:37:0;;;7129:1;;7112:37;;;;;;;;;6849:308;;:::o

Swarm Source

ipfs://c5a926da78506474e82c8b52a22f26414e5780fe9150d7e446c639d81942f635

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.