Contract 0x3d0BD54c48C2C433ea6fed609Cc3d5Fb7A77622B 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x759c1ac5b223103920203d4091c787a95c6fd3b49b61dac6a5a5f3dee816521aApprove546694362023-01-29 16:10:136 hrs 7 mins ago0xa5a663b7951dddff89b01194ee16f3af276051c1 IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.001557656429
0xf7f8f6878a5be7d26a0db708639694a4bf0f8242039e9f03634a1010b3b8dba3Approve546294662023-01-29 1:58:3820 hrs 19 mins ago0x3866f066dfe8b488054f613e0a4a916c3a68a065 IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.001649440424
0x8ccbb2823504334b9954ee32cecb450c121df932be960b6f279704fd9cb6491fApprove544974772023-01-26 21:21:443 days 56 mins ago0x6d665459110077d7043403a47452a9756d71092d IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.016346220935
0xad6e7917ac2acd6cb229da75ff9d93c0fc8887572e2cdf9c2891932c3975b4c1Approve544250452023-01-25 20:17:284 days 2 hrs ago0xde2d60cffe0b0d328e8100640aa685979c37a6d0 IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.001460208225
0x256438352dbc156d46f441a9ed0ca010e06f3bda054c1db53c24392e2f698dffApprove543843482023-01-25 3:20:044 days 18 hrs ago0xb003d445c082ad8141afb4a82f19153e3c9f055b IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.00183687031
0x4c017f6c3dcff8a195b07d04b13d3ff88e7ffa883eec9733fc6515ed5b667a2bApprove541788412023-01-22 2:22:477 days 19 hrs ago0xef4ecbd00aa7188b2dc005f421e9c142699be8e1 IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.001550033819
0xbac189e92607bece094ffa6d4b8b6dbd537a40cf0a865408f70c0fe71476a1ebApprove541038022023-01-20 23:36:288 days 22 hrs ago0x6c6a29db97c0784641d535e9dd8fd4c31bd6b5d6 IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.007937606904
0xb43c4a1ab3b70519a6486723ba9a88452fd0f1c551d45f6198c7d6d5a55288d7Approve539931352023-01-18 18:00:4911 days 4 hrs ago0x5e25ff57cfb5338dee45f34fe4c7b3c449ddfdb3 IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.005693718871
0x441ffc96b76a2967ae71af3c5f09cfd86f757d31e41aa72f2af5371d8152da77Approve539485922023-01-17 22:08:2912 days 9 mins ago0xc98651e36230d55639660303e117f143051fa8be IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.002955642166
0x46305577b1af4377dec64a0a5d292589904ae07e33b47b0021fa6852956793f2Approve538346402023-01-15 22:51:1213 days 23 hrs ago0xfc4b2a62a06cb2e1c6a743e9ae327bb16977e4c1 IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.002352136333
0x60077a6c4f5a9760034f43b88d3c432b9af9499276810116658e06fe1f9168f2Approve538237612023-01-15 19:24:3314 days 2 hrs ago0xd06fee44914f8047525cdc726f2b805fb409a3cd IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.001117274
0xa8299aaad1e57f3e9a92010e9f85612823e607af12e335a5b05ec04cdc6291b4Approve537993742023-01-15 5:06:0914 days 17 hrs ago0xde7dd0a1ec0d34f6cecd6331d627731a29082c05 IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.001995833129
0xcbb0d7d490d6a1d97abcf4f3c966fc5d45995b7478c59013fdec664f5f71e781Transfer537993362023-01-15 5:04:5914 days 17 hrs ago0x42181f98a4c0bc89b6b2d9df86aa8a9debc7ffcc IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.002125631237
0x542938b5c81b378c5928c412fade2e1a637e06f47f533258cdf4f1d284d9ab0aApprove537630532023-01-14 16:06:1915 days 6 hrs ago0x56ad35e8c4a4535400a795109c08b34f46004787 IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.005678390413
0xf69749f090292582a66043676a86816a4ef51caaaab1412dfe4b01b089b8ff54Approve536516672023-01-12 21:30:3217 days 47 mins ago0x7e8416ad4de6e12a807bc3a987ae53b0299c96fb IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.003229079709
0xa37e943d6cba45ae3ddf006c5a17984b544494c912a31b53b6f91a7bd32cf628Approve534517272023-01-08 22:52:4820 days 23 hrs ago0x6c2693f5a936f37ed03cfa8465bf2d8beff19a0f IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.00235521
0xb782e49879f78884e6cc122c21337c757117fcdb178d2bc6256dafa9d772902eApprove533342502023-01-06 15:38:3323 days 6 hrs ago0x2756c78ec5856c867485707d1e456f5d3735136a IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.00174101679
0x975731dc57f998a8087a97eaa97083894a9d418824677074bf4bed6ddd43373aApprove530840672023-01-02 0:39:1927 days 21 hrs ago0xe8ed6af393188d09f6c54b45fec11e86ecfe1e69 IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.00299176772
0xa63632d1a4a532dee273fee6c1d0b9daff040da3592c961c0e6d110b3d52a563Approve530100932022-12-29 13:44:5131 days 8 hrs ago0xa589ab880e9f5b469ede0a9a06574d56ead2233f IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.001343221337
0x6c594b5f5f8938c0758d4f5cae7392e8179a1114cfed16bc6b2ec1f630c15e2aApprove530013762022-12-29 5:00:5531 days 17 hrs ago0xab9aba1244ce6b3a479e1ef475053c903d941961 IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.002681892957
0x937e951013c14d78c2618d071ed4ec9b6d1cc235b06aa9182e773380e97f3b6eApprove528421382022-12-25 12:47:4735 days 9 hrs ago0x42181f98a4c0bc89b6b2d9df86aa8a9debc7ffcc IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.001260636
0xc06af2ff6cccc7fb5b264ac2c3743da81ecb211291df1ddf89386eb25faf420eApprove527365872022-12-23 8:04:5837 days 14 hrs ago0x507cc427c8fba38b81e891549189e6718862af45 IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.001670764402
0x41a497127afb01afcbf238fba7a8db3f71f5c3e0ca606e5e864137e8d334377eApprove519068132022-12-05 6:32:1555 days 15 hrs ago0x1d01697104d3794f9ee35f19acc6a7f9e421d6ae IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.00105761823
0x4a171ff768e464160905eabc9a222b38d7b6e45b559c1b371e1a44b899b0b81eApprove518245022022-12-03 12:41:5357 days 9 hrs ago0x61197ff2d9e4a54851015154857149d8e08247ed IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.00138534
0xb2a827427cbea8c6fedb90fe0b77b4f1a15eae6c3683e093852211b535d757e8Approve517449002022-12-02 0:43:5858 days 21 hrs ago0xd6980b8f28d0b6fa89b7476841e341c57508a3f6 IN  0x3d0bd54c48c2c433ea6fed609cc3d5fb7a77622b0 FTM0.002346198912
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x207d2010f7781ab693a15108e729c7e1be6127ebbd17264e5067465e9d4fed1624750372021-02-27 1:28:03701 days 20 hrs ago SushiSwap: V2 Factory  Contract Creation0 FTM
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x175372f481847ca1a4cf983c5fcec58411161e9f

Contract Name:
UniswapV2Pair

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-11-26
*/

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
    function setMigrator(address) external;
}

// File: contracts/uniswapv2/libraries/SafeMath.sol

pragma solidity =0.6.12;

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

library SafeMathUniswap {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}

// File: contracts/uniswapv2/UniswapV2ERC20.sol

pragma solidity =0.6.12;


contract UniswapV2ERC20 {
    using SafeMathUniswap for uint;

    string public constant name = 'SushiSwap LP Token';
    string public constant symbol = 'SLP';
    uint8 public constant decimals = 18;
    uint  public totalSupply;
    mapping(address => uint) public balanceOf;
    mapping(address => mapping(address => uint)) public allowance;

    bytes32 public DOMAIN_SEPARATOR;
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    mapping(address => uint) public nonces;

    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

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

    function _mint(address to, uint value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint value) internal {
        balanceOf[from] = balanceOf[from].sub(value);
        totalSupply = totalSupply.sub(value);
        emit Transfer(from, address(0), value);
    }

    function _approve(address owner, address spender, uint value) private {
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _transfer(address from, address to, uint value) private {
        balanceOf[from] = balanceOf[from].sub(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(from, to, value);
    }

    function approve(address spender, uint value) external returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint value) external returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(address from, address to, uint value) external returns (bool) {
        if (allowance[from][msg.sender] != uint(-1)) {
            allowance[from][msg.sender] = allowance[from][msg.sender].sub(value);
        }
        _transfer(from, to, value);
        return true;
    }

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        require(deadline >= block.timestamp, 'UniswapV2: EXPIRED');
        bytes32 digest = keccak256(
            abi.encodePacked(
                '\x19\x01',
                DOMAIN_SEPARATOR,
                keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, nonces[owner]++, deadline))
            )
        );
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(recoveredAddress != address(0) && recoveredAddress == owner, 'UniswapV2: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}

// File: contracts/uniswapv2/libraries/Math.sol

pragma solidity =0.6.12;

// a library for performing various math operations

library Math {
    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

// File: contracts/uniswapv2/libraries/UQ112x112.sol

pragma solidity =0.6.12;

// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))

// range: [0, 2**112 - 1]
// resolution: 1 / 2**112

library UQ112x112 {
    uint224 constant Q112 = 2**112;

    // encode a uint112 as a UQ112x112
    function encode(uint112 y) internal pure returns (uint224 z) {
        z = uint224(y) * Q112; // never overflows
    }

    // divide a UQ112x112 by a uint112, returning a UQ112x112
    function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {
        z = x / uint224(y);
    }
}

// File: contracts/uniswapv2/interfaces/IERC20.sol

pragma solidity >=0.5.0;

interface IERC20Uniswap {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

// File: contracts/uniswapv2/interfaces/IUniswapV2Callee.sol

pragma solidity >=0.5.0;

interface IUniswapV2Callee {
    function uniswapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

// File: contracts/uniswapv2/UniswapV2Pair.sol

pragma solidity =0.6.12;








interface IMigrator {
    // Return the desired amount of liquidity token that the migrator wants.
    function desiredLiquidity() external view returns (uint256);
}

contract UniswapV2Pair is UniswapV2ERC20 {
    using SafeMathUniswap  for uint;
    using UQ112x112 for uint224;

    uint public constant MINIMUM_LIQUIDITY = 10**3;
    bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));

    address public factory;
    address public token0;
    address public token1;

    uint112 private reserve0;           // uses single storage slot, accessible via getReserves
    uint112 private reserve1;           // uses single storage slot, accessible via getReserves
    uint32  private blockTimestampLast; // uses single storage slot, accessible via getReserves

    uint public price0CumulativeLast;
    uint public price1CumulativeLast;
    uint public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, 'UniswapV2: LOCKED');
        unlocked = 0;
        _;
        unlocked = 1;
    }

    function getReserves() public view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast) {
        _reserve0 = reserve0;
        _reserve1 = reserve1;
        _blockTimestampLast = blockTimestampLast;
    }

    function _safeTransfer(address token, address to, uint value) private {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'UniswapV2: TRANSFER_FAILED');
    }

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    constructor() public {
        factory = msg.sender;
    }

    // called once by the factory at time of deployment
    function initialize(address _token0, address _token1) external {
        require(msg.sender == factory, 'UniswapV2: FORBIDDEN'); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }

    // update reserves and, on the first call per block, price accumulators
    function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private {
        require(balance0 <= uint112(-1) && balance1 <= uint112(-1), 'UniswapV2: OVERFLOW');
        uint32 blockTimestamp = uint32(block.timestamp % 2**32);
        uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired
        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
            // * never overflows, and + overflow is desired
            price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed;
            price1CumulativeLast += uint(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed;
        }
        reserve0 = uint112(balance0);
        reserve1 = uint112(balance1);
        blockTimestampLast = blockTimestamp;
        emit Sync(reserve0, reserve1);
    }

    // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = IUniswapV2Factory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));
                uint rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint denominator = rootK.mul(5).add(rootKLast);
                    uint liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

    // this low-level function should be called from a contract which performs important safety checks
    function mint(address to) external lock returns (uint liquidity) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        uint balance0 = IERC20Uniswap(token0).balanceOf(address(this));
        uint balance1 = IERC20Uniswap(token1).balanceOf(address(this));
        uint amount0 = balance0.sub(_reserve0);
        uint amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            address migrator = IUniswapV2Factory(factory).migrator();
            if (msg.sender == migrator) {
                liquidity = IMigrator(migrator).desiredLiquidity();
                require(liquidity > 0 && liquidity != uint256(-1), "Bad desired liquidity");
            } else {
                require(migrator == address(0), "Must not have migrator");
                liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
                _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
            }
        } else {
            liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
        }
        require(liquidity > 0, 'UniswapV2: INSUFFICIENT_LIQUIDITY_MINTED');
        _mint(to, liquidity);

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Mint(msg.sender, amount0, amount1);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function burn(address to) external lock returns (uint amount0, uint amount1) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        address _token0 = token0;                                // gas savings
        address _token1 = token1;                                // gas savings
        uint balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
        uint balance1 = IERC20Uniswap(_token1).balanceOf(address(this));
        uint liquidity = balanceOf[address(this)];

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution
        amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution
        require(amount0 > 0 && amount1 > 0, 'UniswapV2: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
        balance1 = IERC20Uniswap(_token1).balanceOf(address(this));

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Burn(msg.sender, amount0, amount1, to);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock {
        require(amount0Out > 0 || amount1Out > 0, 'UniswapV2: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'UniswapV2: INSUFFICIENT_LIQUIDITY');

        uint balance0;
        uint balance1;
        { // scope for _token{0,1}, avoids stack too deep errors
        address _token0 = token0;
        address _token1 = token1;
        require(to != _token0 && to != _token1, 'UniswapV2: INVALID_TO');
        if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens
        if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens
        if (data.length > 0) IUniswapV2Callee(to).uniswapV2Call(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
        balance1 = IERC20Uniswap(_token1).balanceOf(address(this));
        }
        uint amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0;
        uint amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0;
        require(amount0In > 0 || amount1In > 0, 'UniswapV2: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3));
        uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'UniswapV2: K');
        }

        _update(balance0, balance1, _reserve0, _reserve1);
        emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);
    }

    // force balances to match reserves
    function skim(address to) external lock {
        address _token0 = token0; // gas savings
        address _token1 = token1; // gas savings
        _safeTransfer(_token0, to, IERC20Uniswap(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20Uniswap(_token1).balanceOf(address(this)).sub(reserve1));
    }

    // force reserves to match balances
    function sync() external lock {
        _update(IERC20Uniswap(token0).balanceOf(address(this)), IERC20Uniswap(token1).balanceOf(address(this)), reserve0, reserve1);
    }
}

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":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040526001600c5534801561001557600080fd5b50604080518082018252601281527129bab9b434a9bbb0b8102628102a37b5b2b760711b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fefbffe65652a145845c9bc8d0532945be6b9830fe1e9966c887bd298e551ac83818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b03191633179055612377806101106000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610acb565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610af9565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b23565b604080519115158252519081900360200190f35b610339610b3a565b604080516001600160a01b039092168252519081900360200190f35b61035d610b49565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b4f565b61035d610be3565b6103b5610c07565b6040805160ff9092168252519081900360200190f35b61035d610c0c565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c12565b61035d610c96565b61035d610c9c565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610ca2565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b031661111e565b61035d611130565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316611136565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611148565b6040805192835260208301919091528051918290030190f35b6102446114dc565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356114fb565b61035d611508565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b031661150e565b610339611680565b61033961168f565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561169e565b61035d600480360360408110156105a357600080fd5b506001600160a01b03813581169160200135166118a0565b61023a6118bd565b600c5460011461060e576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55841515806106215750600084115b61065c5760405162461bcd60e51b81526004018080602001828103825260258152602001806122886025913960400191505060405180910390fd5b600080610667610af9565b5091509150816001600160701b03168710801561068c5750806001600160701b031686105b6106c75760405162461bcd60e51b81526004018080602001828103825260218152602001806122d16021913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107055750806001600160a01b0316896001600160a01b031614155b61074e576040805162461bcd60e51b8152602060048201526015602482015274556e697377617056323a20494e56414c49445f544f60581b604482015290519081900360640190fd5b8a1561075f5761075f828a8d611a1f565b891561077057610770818a8c611a1f565b861561082257886001600160a01b03166310d1e85c338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561080957600080fd5b505af115801561081d573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561086857600080fd5b505afa15801561087c573d6000803e3d6000fd5b505050506040513d602081101561089257600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108de57600080fd5b505afa1580156108f2573d6000803e3d6000fd5b505050506040513d602081101561090857600080fd5b5051925060009150506001600160701b0385168a9003831161092b57600061093a565b89856001600160701b03160383035b9050600089856001600160701b0316038311610957576000610966565b89856001600160701b03160383035b905060008211806109775750600081115b6109b25760405162461bcd60e51b81526004018080602001828103825260248152602001806122ad6024913960400191505060405180910390fd5b60006109d46109c2846003611bb9565b6109ce876103e8611bb9565b90611c1c565b905060006109e66109c2846003611bb9565b9050610a0b620f4240610a056001600160701b038b8116908b16611bb9565b90611bb9565b610a158383611bb9565b1015610a57576040805162461bcd60e51b815260206004820152600c60248201526b556e697377617056323a204b60a01b604482015290519081900360640190fd5b5050610a6584848888611c6c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280601281526020017129bab9b434a9bbb0b8102628102a37b5b2b760711b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b30338484611e2b565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610bce576001600160a01b0384166000908152600260209081526040808320338452909152902054610ba99083611c1c565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610bd9848484611e8d565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610c68576040805162461bcd60e51b81526020600482015260146024820152732ab734b9bbb0b82b191d102327a92124a22222a760611b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610cef576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c81905580610cff610af9565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d5357600080fd5b505afa158015610d67573d6000803e3d6000fd5b505050506040513d6020811015610d7d57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610dd057600080fd5b505afa158015610de4573d6000803e3d6000fd5b505050506040513d6020811015610dfa57600080fd5b505190506000610e13836001600160701b038716611c1c565b90506000610e2a836001600160701b038716611c1c565b90506000610e388787611f3b565b6000549091508061100f5760055460408051637cd07e4760e01b815290516000926001600160a01b031691637cd07e47916004808301926020929190829003018186803b158015610e8857600080fd5b505afa158015610e9c573d6000803e3d6000fd5b505050506040513d6020811015610eb257600080fd5b50519050336001600160a01b0382161415610f8d57806001600160a01b03166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0057600080fd5b505afa158015610f14573d6000803e3d6000fd5b505050506040513d6020811015610f2a57600080fd5b505199508915801590610f3f57506000198a14155b610f88576040805162461bcd60e51b81526020600482015260156024820152744261642064657369726564206c697175696469747960581b604482015290519081900360640190fd5b611009565b6001600160a01b03811615610fe2576040805162461bcd60e51b815260206004820152601660248201527526bab9ba103737ba103430bb329036b4b3b930ba37b960511b604482015290519081900360640190fd5b610ffa6103e86109ce610ff58888611bb9565b61207b565b995061100960006103e86120cd565b50611052565b61104f6001600160701b0389166110268684611bb9565b8161102d57fe5b046001600160701b0389166110428685611bb9565b8161104957fe5b04612157565b98505b600089116110915760405162461bcd60e51b815260040180806020018281038252602881526020018061231a6028913960400191505060405180910390fd5b61109b8a8a6120cd565b6110a786868a8a611c6c565b81156110d1576008546110cd906001600160701b0380821691600160701b900416611bb9565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611196576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c819055806111a6610af9565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561120257600080fd5b505afa158015611216573d6000803e3d6000fd5b505050506040513d602081101561122c57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561127a57600080fd5b505afa15801561128e573d6000803e3d6000fd5b505050506040513d60208110156112a457600080fd5b5051306000908152600160205260408120549192506112c38888611f3b565b600054909150806112d48487611bb9565b816112db57fe5b049a50806112e98486611bb9565b816112f057fe5b04995060008b118015611303575060008a115b61133e5760405162461bcd60e51b81526004018080602001828103825260288152602001806122f26028913960400191505060405180910390fd5b611348308461216f565b611353878d8d611a1f565b61135e868d8c611a1f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156113a457600080fd5b505afa1580156113b8573d6000803e3d6000fd5b505050506040513d60208110156113ce57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561141a57600080fd5b505afa15801561142e573d6000803e3d6000fd5b505050506040513d602081101561144457600080fd5b5051935061145485858b8b611c6c565b811561147e5760085461147a906001600160701b0380821691600160701b900416611bb9565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b604051806040016040528060038152602001620534c560ec1b81525081565b6000610b30338484611e8d565b6103e881565b600c54600114611559576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261160292859287926115fd926001600160701b03169185916370a0823191602480820192602092909190829003018186803b1580156115cb57600080fd5b505afa1580156115df573d6000803e3d6000fd5b505050506040513d60208110156115f557600080fd5b505190611c1c565b611a1f565b61167681846115fd6008600e9054906101000a90046001600160701b03166001600160701b0316856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156115cb57600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156116e8576040805162461bcd60e51b8152602060048201526012602482015271155b9a5cddd85c158c8e881156141254915160721b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611803573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906118395750886001600160a01b0316816001600160a01b0316145b61188a576040805162461bcd60e51b815260206004820152601c60248201527f556e697377617056323a20494e56414c49445f5349474e415455524500000000604482015290519081900360640190fd5b611895898989611e2b565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611908576040805162461bcd60e51b8152602060048201526011602482015270155b9a5cddd85c158c8e881313d0d2d151607a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b81523060048201529051611a18926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561195957600080fd5b505afa15801561196d573d6000803e3d6000fd5b505050506040513d602081101561198357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119d057600080fd5b505afa1580156119e4573d6000803e3d6000fd5b505050506040513d60208110156119fa57600080fd5b50516008546001600160701b0380821691600160701b900416611c6c565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611acc5780518252601f199092019160209182019101611aad565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b2e576040519150601f19603f3d011682016040523d82523d6000602084013e611b33565b606091505b5091509150818015611b61575080511580611b615750808060200190516020811015611b5e57600080fd5b50515b611bb2576040805162461bcd60e51b815260206004820152601a60248201527f556e697377617056323a205452414e534645525f4641494c4544000000000000604482015290519081900360640190fd5b5050505050565b6000811580611bd457505080820282828281611bd157fe5b04145b610b34576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b34576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611c8a57506001600160701b038311155b611cd1576040805162461bcd60e51b8152602060048201526013602482015272556e697377617056323a204f564552464c4f5760681b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611d0157506001600160701b03841615155b8015611d1557506001600160701b03831615155b15611d80578063ffffffff16611d3d85611d2e86612201565b6001600160e01b031690612213565b600980546001600160e01b03929092169290920201905563ffffffff8116611d6884611d2e87612201565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611eb09082611c1c565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611edf9082612238565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8c57600080fd5b505afa158015611fa0573d6000803e3d6000fd5b505050506040513d6020811015611fb657600080fd5b5051600b546001600160a01b038216158015945091925090612067578015612062576000611ff3610ff56001600160701b03888116908816611bb9565b905060006120008361207b565b90508082111561205f5760006120226120198484611c1c565b60005490611bb9565b9050600061203b83612035866005611bb9565b90612238565b9050600081838161204857fe5b049050801561205b5761205b87826120cd565b5050505b50505b612073565b8015612073576000600b555b505092915050565b600060038211156120be575080600160028204015b818110156120b8578091506002818285816120a757fe5b0401816120b057fe5b049050612090565b506120c8565b81156120c8575060015b919050565b6000546120da9082612238565b60009081556001600160a01b0383168152600160205260409020546120ff9082612238565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106121665781612168565b825b9392505050565b6001600160a01b0382166000908152600160205260409020546121929082611c1c565b6001600160a01b038316600090815260016020526040812091909155546121b99082611c1c565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161223057fe5b049392505050565b80820182811015610b34576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe556e697377617056323a20494e53554646494349454e545f4f55545055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f494e5055545f414d4f554e54556e697377617056323a20494e53554646494349454e545f4c4951554944495459556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4255524e4544556e697377617056323a20494e53554646494349454e545f4c49515549444954595f4d494e544544a2646970667358221220713a8bf21df06433f34b5c9abf186abb737e72524583bdf420105a289791e24864736f6c634300060c0033

Deployed ByteCode Sourcemap

7655:10161:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15292:1903;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15292:1903:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15292:1903:0;;-1:-1:-1;15292:1903:0;-1:-1:-1;15292:1903:0;:::i;:::-;;1578:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8667:231;;;:::i;:::-;;;;-1:-1:-1;;;;;8667:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3632:147;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3632:147:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7956:21;;;:::i;:::-;;;;-1:-1:-1;;;;;7956:21:0;;;;;;;;;;;;;;1721:24;;;:::i;:::-;;;;;;;;;;;;;;;;3934:301;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3934:301:0;;;;;;;;;;;;;;;;;:::i;2013:108::-;;;:::i;1679:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1870:31;;;:::i;9727:210::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9727:210:0;;;;;;;;;;:::i;8307:32::-;;;:::i;8346:::-;;;:::i;11921:1653::-;;;;;;;;;;;;;;;;-1:-1:-1;11921:1653:0;-1:-1:-1;;;;;11921:1653:0;;:::i;1752:41::-;;;;;;;;;;;;;;;;-1:-1:-1;1752:41:0;-1:-1:-1;;;;;1752:41:0;;:::i;8385:17::-;;;:::i;2128:38::-;;;;;;;;;;;;;;;;-1:-1:-1;2128:38:0;-1:-1:-1;;;;;2128:38:0;;:::i;13686:1494::-;;;;;;;;;;;;;;;;-1:-1:-1;13686:1494:0;-1:-1:-1;;;;;13686:1494:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1635:37;;;:::i;3787:139::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3787:139:0;;;;;;;;:::i;7777:46::-;;;:::i;17244:348::-;;;;;;;;;;;;;;;;-1:-1:-1;17244:348:0;-1:-1:-1;;;;;17244:348:0;;:::i;7927:22::-;;;:::i;7984:21::-;;;:::i;4243:674::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4243:674:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1800:61::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1800:61:0;;;;;;;;;;:::i;17641:172::-;;;:::i;15292:1903::-;8558:8;;8570:1;8558:13;8550:43;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;;;;8615:1;8604:8;:12;15406:14;;;;:32:::1;;;15437:1;15424:10;:14;15406:32;15398:82;;;;-1:-1:-1::0;;;15398:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15492:17;15511::::0;15533:13:::1;:11;:13::i;:::-;15491:55;;;;;15593:9;-1:-1:-1::0;;;;;15580:22:0::1;:10;:22;:48;;;;;15619:9;-1:-1:-1::0;;;;;15606:22:0::1;:10;:22;15580:48;15572:94;;;;-1:-1:-1::0;;;15572:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15811:6;::::0;15846::::1;::::0;15679:13:::1;::::0;;;-1:-1:-1;;;;;15811:6:0;;::::1;::::0;15846;;::::1;::::0;15871:13;::::1;::::0;::::1;::::0;::::1;::::0;:30:::1;;;15894:7;-1:-1:-1::0;;;;;15888:13:0::1;:2;-1:-1:-1::0;;;;;15888:13:0::1;;;15871:30;15863:64;;;::::0;;-1:-1:-1;;;15863:64:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15863:64:0;;;;;;;;;;;;;::::1;;15942:14:::0;;15938:58:::1;;15958:38;15972:7;15981:2;15985:10;15958:13;:38::i;:::-;16045:14:::0;;16041:58:::1;;16061:38;16075:7;16084:2;16088:10;16061:13;:38::i;:::-;16148:15:::0;;16144:97:::1;;16182:2;-1:-1:-1::0;;;;;16165:34:0::1;;16200:10;16212;16224;16236:4;;16165:76;;;;;;;;;;;;;-1:-1:-1::0;;;;;16165:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16144:97;16263:47;::::0;;-1:-1:-1;;;16263:47:0;;16304:4:::1;16263:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;16263:32:0;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16263:47:0;16332::::1;::::0;;-1:-1:-1;;;16332:47:0;;16373:4:::1;16332:47;::::0;::::1;::::0;;;16263;;-1:-1:-1;;;;;;16332:32:0;::::1;::::0;::::1;::::0;:47;;;;;16263::::1;::::0;16332;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16332:47:0;;-1:-1:-1;16401:14:0::1;::::0;-1:-1:-1;;;;;;;16429:22:0;::::1;::::0;;::::1;16418:33:::0;::::1;:75;;16492:1;16418:75;;;16478:10;16466:9;-1:-1:-1::0;;;;;16466:22:0::1;;16454:8;:35;16418:75;16401:92;;16504:14;16544:10;16532:9;-1:-1:-1::0;;;;;16532:22:0::1;;16521:8;:33;:75;;16595:1;16521:75;;;16581:10;16569:9;-1:-1:-1::0;;;;;16569:22:0::1;;16557:8;:35;16521:75;16504:92;;16627:1;16615:9;:13;:30;;;;16644:1;16632:9;:13;16615:30;16607:79;;;;-1:-1:-1::0;;;16607:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16772:21;16796:40;16819:16;:9:::0;16833:1:::1;16819:13;:16::i;:::-;16796:18;:8:::0;16809:4:::1;16796:12;:18::i;:::-;:22:::0;::::1;:40::i;:::-;16772:64:::0;-1:-1:-1;16847:21:0::1;16871:40;16894:16;:9:::0;16908:1:::1;16894:13;:16::i;16871:40::-;16847:64:::0;-1:-1:-1;16972:43:0::1;17007:7;16972:30;-1:-1:-1::0;;;;;16972:15:0;;::::1;::::0;:30;::::1;:19;:30::i;:::-;:34:::0;::::1;:43::i;:::-;16930:38;:16:::0;16951;16930:20:::1;:38::i;:::-;:85;;16922:110;;;::::0;;-1:-1:-1;;;16922:110:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;16922:110:0;;;;;;;;;;;;;::::1;;8627:1;;17056:49;17064:8;17074;17084:9;17095;17056:7;:49::i;:::-;17121:66;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17121:66:0;::::1;::::0;17126:10:::1;::::0;17121:66:::1;::::0;;;;;;;::::1;-1:-1:-1::0;;8650:1:0;8639:8;:12;-1:-1:-1;;;;;;;;;15292:1903:0:o;1578:50::-;;;;;;;;;;;;;;-1:-1:-1;;;1578:50:0;;;;:::o;8667:231::-;8800:8;;-1:-1:-1;;;;;8800:8:0;;;;-1:-1:-1;;;8831:8:0;;;;;;-1:-1:-1;;;8872:18:0;;;;;8667:231::o;3632:147::-;3696:4;3713:36;3722:10;3734:7;3743:5;3713:8;:36::i;:::-;-1:-1:-1;3767:4:0;3632:147;;;;;:::o;7956:21::-;;;-1:-1:-1;;;;;7956:21:0;;:::o;1721:24::-;;;;:::o;3934:301::-;-1:-1:-1;;;;;4033:15:0;;4012:4;4033:15;;;:9;:15;;;;;;;;4049:10;4033:27;;;;;;;;-1:-1:-1;;4033:39:0;4029:140;;-1:-1:-1;;;;;4119:15:0;;;;;;:9;:15;;;;;;;;4135:10;4119:27;;;;;;;;:38;;4151:5;4119:31;:38::i;:::-;-1:-1:-1;;;;;4089:15:0;;;;;;:9;:15;;;;;;;;4105:10;4089:27;;;;;;;:68;4029:140;4179:26;4189:4;4195:2;4199:5;4179:9;:26::i;:::-;-1:-1:-1;4223:4:0;3934:301;;;;;:::o;2013:108::-;2055:66;2013:108;:::o;1679:35::-;1712:2;1679:35;:::o;1870:31::-;;;;:::o;9727:210::-;9823:7;;-1:-1:-1;;;;;9823:7:0;9809:10;:21;9801:54;;;;;-1:-1:-1;;;9801:54:0;;;;;;;;;;;;-1:-1:-1;;;9801:54:0;;;;;;;;;;;;;;;9886:6;:16;;-1:-1:-1;;;;;9886:16:0;;;-1:-1:-1;;;;;;9886:16:0;;;;;;;9913:6;:16;;;;;;;;;;;9727:210::o;8307:32::-;;;;:::o;8346:::-;;;;:::o;11921:1653::-;11970:14;8558:8;;8570:1;8558:13;8550:43;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;;;;8615:1;8604:8;:12;;;8615:1;12039:13:::1;:11;:13::i;:::-;-1:-1:-1::0;12108:6:0::1;::::0;12094:46:::1;::::0;;-1:-1:-1;;;12094:46:0;;12134:4:::1;12094:46;::::0;::::1;::::0;;;11997:55;;-1:-1:-1;11997:55:0;;-1:-1:-1;12078:13:0::1;::::0;-1:-1:-1;;;;;12108:6:0;;::::1;::::0;12094:31:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;12108:6;12094:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12094:46:0;12181:6:::1;::::0;12167:46:::1;::::0;;-1:-1:-1;;;12167:46:0;;12207:4:::1;12167:46;::::0;::::1;::::0;;;12094;;-1:-1:-1;12151:13:0::1;::::0;-1:-1:-1;;;;;12181:6:0;;::::1;::::0;12167:31:::1;::::0;:46;;;;;12094::::1;::::0;12167;;;;;;;;12181:6;12167:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12167:46:0;;-1:-1:-1;12224:12:0::1;12239:23;:8:::0;-1:-1:-1;;;;;12239:23:0;::::1;:12;:23::i;:::-;12224:38:::0;-1:-1:-1;12273:12:0::1;12288:23;:8:::0;-1:-1:-1;;;;;12288:23:0;::::1;:12;:23::i;:::-;12273:38;;12324:10;12337:30;12346:9;12357;12337:8;:30::i;:::-;12378:17;12398:11:::0;12324:43;;-1:-1:-1;12502:17:0;12498:751:::1;;12573:7;::::0;12555:37:::1;::::0;;-1:-1:-1;;;12555:37:0;;;;12536:16:::1;::::0;-1:-1:-1;;;;;12573:7:0::1;::::0;12555:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;12573:7;12555:37;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12555:37:0;;-1:-1:-1;12611:10:0::1;-1:-1:-1::0;;;;;12611:22:0;::::1;;12607:500;;;12676:8;-1:-1:-1::0;;;;;12666:36:0::1;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;12666:38:0;;-1:-1:-1;12731:13:0;;;;;:41:::1;;;-1:-1:-1::0;;12748:9:0::1;:24;;12731:41;12723:75;;;::::0;;-1:-1:-1;;;12723:75:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12723:75:0;;;;;;;;;;;;;::::1;;12607:500;;;-1:-1:-1::0;;;;;12847:22:0;::::1;::::0;12839:57:::1;;;::::0;;-1:-1:-1;;;12839:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;12839:57:0;;;;;;;;;;;;;::::1;;12927:54;7818:5;12927:31;12937:20;:7:::0;12949;12937:11:::1;:20::i;:::-;12927:9;:31::i;:54::-;12915:66;;13000:36;13014:1;7818:5;13000;:36::i;:::-;12498:751;;;;13151:86;-1:-1:-1::0;;;;;13160:37:0;::::1;:25;:7:::0;13172:12;13160:11:::1;:25::i;:::-;:37;;;;;;-1:-1:-1::0;;;;;13199:37:0;::::1;:25;:7:::0;13211:12;13199:11:::1;:25::i;:::-;:37;;;;;;13151:8;:86::i;:::-;13139:98;;12498:751;13279:1;13267:9;:13;13259:66;;;;-1:-1:-1::0;;;13259:66:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13336:20;13342:2;13346:9;13336:5;:20::i;:::-;13369:49;13377:8;13387;13397:9;13408;13369:7;:49::i;:::-;13433:5;13429:47;;;13467:8;::::0;13448:28:::1;::::0;-1:-1:-1;;;;;13453:8:0;;::::1;::::0;-1:-1:-1;;;13467:8:0;::::1;;13448:18;:28::i;:::-;13440:5;:36:::0;13429:47:::1;13532:34;::::0;;;;;::::1;::::0;::::1;::::0;;;;;13537:10:::1;::::0;13532:34:::1;::::0;;;;;;::::1;-1:-1:-1::0;;8650:1:0;8639:8;:12;-1:-1:-1;11921:1653:0;;;-1:-1:-1;;;;;;11921:1653:0:o;1752:41::-;;;;;;;;;;;;;:::o;8385:17::-;;;;:::o;2128:38::-;;;;;;;;;;;;;:::o;13686:1494::-;13735:12;13749;8558:8;;8570:1;8558:13;8550:43;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;;;;8615:1;8604:8;:12;;;8615:1;13816:13:::1;:11;:13::i;:::-;-1:-1:-1::0;13873:6:0::1;::::0;13954::::1;::::0;14033:47:::1;::::0;;-1:-1:-1;;;14033:47:0;;14074:4:::1;14033:47;::::0;::::1;::::0;;;13774:55;;-1:-1:-1;13774:55:0;;-1:-1:-1;;;;;;13873:6:0;;::::1;::::0;13954;::::1;::::0;13855:15:::1;::::0;13873:6;;14033:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;13873:6;14033:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14033:47:0;14107::::1;::::0;;-1:-1:-1;;;14107:47:0;;14148:4:::1;14107:47;::::0;::::1;::::0;;;14033;;-1:-1:-1;14091:13:0::1;::::0;-1:-1:-1;;;;;14107:32:0;::::1;::::0;::::1;::::0;:47;;;;;14033::::1;::::0;14107;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14107:47:0;14200:4:::1;14165:14;14182:24:::0;;;:9:::1;14107:47;14182:24:::0;;;;;14107:47;;-1:-1:-1;14232:30:0::1;14241:9:::0;14252;14232:8:::1;:30::i;:::-;14273:17;14293:11:::0;14219:43;;-1:-1:-1;14293:11:0;14403:23:::1;:9:::0;14417:8;14403:13:::1;:23::i;:::-;:38;;;;;;::::0;-1:-1:-1;14536:12:0;14510:23:::1;:9:::0;14524:8;14510:13:::1;:23::i;:::-;:38;;;;;;14500:48;;14625:1;14615:7;:11;:26;;;;;14640:1;14630:7;:11;14615:26;14607:79;;;;-1:-1:-1::0;;;14607:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14697:31;14711:4;14718:9;14697:5;:31::i;:::-;14739:35;14753:7;14762:2;14766:7;14739:13;:35::i;:::-;14785;14799:7;14808:2;14812:7;14785:13;:35::i;:::-;14842:47;::::0;;-1:-1:-1;;;14842:47:0;;14883:4:::1;14842:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;14842:32:0;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14842:47:0;14911::::1;::::0;;-1:-1:-1;;;14911:47:0;;14952:4:::1;14911:47;::::0;::::1;::::0;;;14842;;-1:-1:-1;;;;;;14911:32:0;::::1;::::0;::::1;::::0;:47;;;;;14842::::1;::::0;14911;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14911:47:0;;-1:-1:-1;14971:49:0::1;14979:8:::0;14911:47;14999:9;15010;14971:7:::1;:49::i;:::-;15035:5;15031:47;;;15069:8;::::0;15050:28:::1;::::0;-1:-1:-1;;;;;15055:8:0;;::::1;::::0;-1:-1:-1;;;15069:8:0;::::1;;15050:18;:28::i;:::-;15042:5;:36:::0;15031:47:::1;15134:38;::::0;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;15134:38:0;::::1;::::0;15139:10:::1;::::0;15134:38:::1;::::0;;;;;;;;;::::1;8627:1;;;;;;;;;8650::::0;8639:8;:12;;;;13686:1494;;;:::o;1635:37::-;;;;;;;;;;;;;;-1:-1:-1;;;1635:37:0;;;;:::o;3787:139::-;3847:4;3864:32;3874:10;3886:2;3890:5;3864:9;:32::i;7777:46::-;7818:5;7777:46;:::o;17244:348::-;8558:8;;8570:1;8558:13;8550:43;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;;;;8615:1;8604:8;:12;17313:6:::1;::::0;17363::::1;::::0;17474:8:::1;::::0;17422:47:::1;::::0;;-1:-1:-1;;;17422:47:0;;17463:4:::1;17422:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;17313:6:0;;::::1;::::0;17363;;::::1;::::0;17395:89:::1;::::0;17313:6;;17418:2;;17422:61:::1;::::0;-1:-1:-1;;;;;17474:8:0::1;::::0;17313:6;;17422:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;;17313:6;17422:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17422:47:0;;:51:::1;:61::i;:::-;17395:13;:89::i;:::-;17495;17509:7;17518:2;17522:61;17574:8;;;;;;;;;-1:-1:-1::0;;;;;17574:8:0::1;-1:-1:-1::0;;;;;17522:61:0::1;17536:7;-1:-1:-1::0;;;;;17522:32:0::1;;17563:4;17522:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;17522:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;17495:89;-1:-1:-1::0;;8650:1:0;8639:8;:12;-1:-1:-1;17244:348:0:o;7927:22::-;;;-1:-1:-1;;;;;7927:22:0;;:::o;7984:21::-;;;-1:-1:-1;;;;;7984:21:0;;:::o;4243:674::-;4389:15;4377:8;:27;;4369:58;;;;;-1:-1:-1;;;4369:58:0;;;;;;;;;;;;-1:-1:-1;;;4369:58:0;;;;;;;;;;;;;;;4543:16;;-1:-1:-1;;;;;4639:13:0;;;4438:14;4639:13;;;:6;:13;;;;;;;;:15;;;;;;;;;4588:77;;2055:66;4588:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4578:88;;;;;;-1:-1:-1;;;4479:202:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4455:237;;;;;;;;;4730:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4438:14;;4639:15;4730:26;;;;;-1:-1:-1;;4730:26:0;;;;;;;;;;4639:15;4730:26;;;;;;;;;;;;;;;-1:-1:-1;;4730:26:0;;-1:-1:-1;;4730:26:0;;;-1:-1:-1;;;;;;;4775:30:0;;;;;;:59;;;4829:5;-1:-1:-1;;;;;4809:25:0;:16;-1:-1:-1;;;;;4809:25:0;;4775:59;4767:100;;;;;-1:-1:-1;;;4767:100:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4878:31;4887:5;4894:7;4903:5;4878:8;:31::i;:::-;4243:674;;;;;;;;;:::o;1800:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;17641:172::-;8558:8;;8570:1;8558:13;8550:43;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;-1:-1:-1;;;8550:43:0;;;;;;;;;;;;;;;8615:1;8604:8;:12;17704:6:::1;::::0;17690:46:::1;::::0;;-1:-1:-1;;;17690:46:0;;17730:4:::1;17690:46;::::0;::::1;::::0;;;17682:123:::1;::::0;-1:-1:-1;;;;;17704:6:0::1;::::0;17690:31:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;17704:6;17690:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17690:46:0;17752:6:::1;::::0;17738:46:::1;::::0;;-1:-1:-1;;;17738:46:0;;17778:4:::1;17738:46;::::0;::::1;::::0;;;-1:-1:-1;;;;;17752:6:0;;::::1;::::0;17738:31:::1;::::0;:46;;;;;17690::::1;::::0;17738;;;;;;;;17752:6;17738:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17738:46:0;17786:8:::1;::::0;-1:-1:-1;;;;;17786:8:0;;::::1;::::0;-1:-1:-1;;;17796:8:0;::::1;;17682:7;:123::i;:::-;8650:1:::0;8639:8;:12;17641:172::o;8906:287::-;7882:34;;;;;;;;;;;;;;;;;9034:43;;-1:-1:-1;;;;;9034:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9034:43:0;-1:-1:-1;;;9034:43:0;;;9023:55;;;;8988:12;;9002:17;;9023:10;;;9034:43;9023:55;;;9034:43;9023:55;;9034:43;9023:55;;;;;;;;;;-1:-1:-1;;9023:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8987:91;;;;9097:7;:57;;;;-1:-1:-1;9109:11:0;;:16;;:44;;;9140:4;9129:24;;;;;;;;;;;;;;;-1:-1:-1;9129:24:0;9109:44;9089:96;;;;;-1:-1:-1;;;9089:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8906:287;;;;;:::o;1278:142::-;1330:6;1357;;;:30;;-1:-1:-1;;1372:5:0;;;1386:1;1381;1372:5;1381:1;1367:15;;;;;:20;1357:30;1349:63;;;;;-1:-1:-1;;;1349:63:0;;;;;;;;;;;;-1:-1:-1;;;1349:63:0;;;;;;;;;;;;;;1141:129;1225:5;;;1220:16;;;;1212:50;;;;;-1:-1:-1;;;1212:50:0;;;;;;;;;;;;-1:-1:-1;;;1212:50:0;;;;;;;;;;;;;;10022:860;-1:-1:-1;;;;;10134:23:0;;;;;:50;;-1:-1:-1;;;;;;10161:23:0;;;10134:50;10126:82;;;;;-1:-1:-1;;;10126:82:0;;;;;;;;;;;;-1:-1:-1;;;10126:82:0;;;;;;;;;;;;;;;10323:18;;10250:23;:15;:23;;;-1:-1:-1;;;10323:18:0;;;;10306:35;;;10379:15;;;;;;:33;;-1:-1:-1;;;;;;10398:14:0;;;;10379:33;:51;;;;-1:-1:-1;;;;;;10416:14:0;;;;10379:51;10375:336;;;10585:11;10532:64;;10537:44;10571:9;10537:27;10554:9;10537:16;:27::i;:::-;-1:-1:-1;;;;;10537:33:0;;;:44::i;:::-;10508:20;:88;;-1:-1:-1;;;;;10532:50:0;;;;:64;;;;10508:88;;;10635:64;;;10640:44;10674:9;10640:27;10657:9;10640:16;:27::i;:44::-;10611:20;:88;;-1:-1:-1;;;;;10635:50:0;;;;:64;;;;10611:88;;;10375:336;10721:8;:28;;-1:-1:-1;;10721:28:0;-1:-1:-1;;;;;10721:28:0;;;;;;;-1:-1:-1;;;;10760:28:0;-1:-1:-1;;;10760:28:0;;;;;;;;;-1:-1:-1;;;;;10799:35:0;-1:-1:-1;;;10799:35:0;;;;;;;;;10850:24;;;10855:8;;;10850:24;;10865:8;;;;;;;10850:24;;;;;;;;;;;;;;;;;10022:860;;;;;;:::o;3227:169::-;-1:-1:-1;;;;;3308:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;3357:31;;;;;;;;;;;;;;;;;3227:169;;;:::o;3404:220::-;-1:-1:-1;;;;;3498:15:0;;;;;;:9;:15;;;;;;:26;;3518:5;3498:19;:26::i;:::-;-1:-1:-1;;;;;3480:15:0;;;;;;;:9;:15;;;;;;:44;;;;3551:13;;;;;;;:24;;3569:5;3551:17;:24::i;:::-;-1:-1:-1;;;;;3535:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;3591:25;;;;;;;3535:13;;3591:25;;;;;;;;;;;;;3404:220;;;:::o;10972:837::-;11045:10;11068:13;11102:7;;;;;;;;;-1:-1:-1;;;;;11102:7:0;-1:-1:-1;;;;;11084:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11084:34:0;11181:5;;-1:-1:-1;;;;;11137:19:0;;;;;;-1:-1:-1;11084:34:0;;-1:-1:-1;11181:5:0;11212:590;;11242:11;;11238:494;;11274:10;11287:41;11297:30;-1:-1:-1;;;;;11297:15:0;;;;:30;;:19;:30::i;11287:41::-;11274:54;;11347:14;11364:17;11374:6;11364:9;:17::i;:::-;11347:34;;11412:9;11404:5;:17;11400:317;;;11446:14;11463:37;11479:20;:5;11489:9;11479;:20::i;:::-;11463:11;;;:15;:37::i;:::-;11446:54;-1:-1:-1;11523:16:0;11542:27;11559:9;11542:12;:5;11552:1;11542:9;:12::i;:::-;:16;;:27::i;:::-;11523:46;;11592:14;11621:11;11609:9;:23;;;;;;;-1:-1:-1;11659:13:0;;11655:42;;11674:23;11680:5;11687:9;11674:5;:23::i;:::-;11400:317;;;;11238:494;;;11212:590;;;11753:11;;11749:53;;11789:1;11781:5;:9;11749:53;10972:837;;;;;;:::o;5292:303::-;5337:6;5364:1;5360;:5;5356:232;;;-1:-1:-1;5386:1:0;5419;5415;5411:5;;:9;5435:92;5446:1;5442;:5;5435:92;;;5472:1;5468:5;;5510:1;5505;5501;5497;:5;;;;;;:9;5496:15;;;;;;5492:19;;5435:92;;;5356:232;;;;5548:6;;5544:44;;-1:-1:-1;5575:1:0;5544:44;5292:303;;;:::o;2801:201::-;2874:11;;:22;;2890:5;2874:15;:22::i;:::-;2860:11;:36;;;-1:-1:-1;;;;;2923:13:0;;;;:9;:13;;;;;;:24;;2941:5;2923:17;:24::i;:::-;-1:-1:-1;;;;;2907:13:0;;;;;;:9;:13;;;;;;;;:40;;;;2963:31;;;;;;;2907:13;;;;2963:31;;;;;;;;;;2801:201;;:::o;5078:96::-;5130:6;5157:1;5153;:5;:13;;5165:1;5153:13;;;5161:1;5153:13;5149:17;5078:96;-1:-1:-1;;;5078:96:0:o;3010:209::-;-1:-1:-1;;;;;3089:15:0;;;;;;:9;:15;;;;;;:26;;3109:5;3089:19;:26::i;:::-;-1:-1:-1;;;;;3071:15:0;;;;;;:9;:15;;;;;:44;;;;3140:11;:22;;3156:5;3140:15;:22::i;:::-;3126:11;:36;;;3178:33;;;;;;;;-1:-1:-1;;;;;3178:33:0;;;;;;;;;;;;;3010:209;;:::o;5952:120::-;-1:-1:-1;;;;;6028:10:0;-1:-1:-1;;;6028:17:0;;5952:120::o;6143:108::-;6203:9;-1:-1:-1;;;;;6233:10:0;;-1:-1:-1;;;;;6229:14:0;;6233:10;6229:14;;;;;;6143:108;-1:-1:-1;;;6143:108:0:o;1005:128::-;1089:5;;;1084:16;;;;1076:49;;;;;-1:-1:-1;;;1076:49:0;;;;;;;;;;;;-1:-1:-1;;;1076:49:0;;;;;;;;;;;;;

Swarm Source

ipfs://713a8bf21df06433f34b5c9abf186abb737e72524583bdf420105a289791e248
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.