Contract 0x26A2abD79583155EA5d34443b62399879D42748A

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x5dc27da3b73caa1e1f9095b782556f1a6e6035936b3afd9c07991501a9573716Approve36609612023-05-28 19:25:063 days 19 hrs ago0x631e085152841dcc0b5124f66f41a0d181c67d3f IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.006943026994
0xb34e81456a29a39ee19d6c9affadb751aaea400d105e3c6a725032e21f8b13fbApprove35957542023-05-19 13:42:1813 days 1 hr ago0x1e86b0b93f2098f3a43bca4b8fb2bd3f468f49d8 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.003314052057
0x9f7da1ee2f53ff7d5603182e70846a97d762575c0d71b3c47d70ec9716845100Approve35957082023-05-19 13:33:0013 days 1 hr ago0x1e86b0b93f2098f3a43bca4b8fb2bd3f468f49d8 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.003385105436
0x72f4c784a45711f3853ac285921c124c78687ae62d0a391ee0e9888e8e7d32f6Approve35532712023-05-13 13:03:4219 days 2 hrs ago0xcd34de471efcb1d5b1fff1c440908f3e4dca865d IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.009190584806
0xa7b945f57415ae36e7cf5e0b2f0c71511ce916a36b2d9b5b3c730e836b02a9e8Approve35530462023-05-13 12:18:0019 days 3 hrs ago0xc48e307d6969ade25ea283abf64f83880667882a IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.017716067147
0x7eae663237936c403c76c89e4d4d009bcd207ad5f1d36eb0840697ddc60ec804Approve35483672023-05-12 20:24:4819 days 18 hrs ago0xc48e307d6969ade25ea283abf64f83880667882a IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.013068947155
0xbaffab868c256e2cbeec81dfcee0e403756f5ec569c9c1d92e74eec1d28c73feApprove34895472023-05-04 12:06:5428 days 3 hrs ago0x212bbfdf681f8268c56806a7536765dbee68e2e2 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.014021951062
0xc9da130ef8f4e67998072b91e0780b105cccad4e60fe6f50e8ef981e4dba6c99Approve34833362023-05-03 14:58:1229 days 22 mins ago0x55d8ba4008185bfcfc2051860745d09688ddebc3 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.015012845213
0x8810ac5293bde407f8d03eb6c532a228f02f150933714ac829e220f40cba79f6Approve34830092023-05-03 13:51:5429 days 1 hr ago0x53a8bf04b0b952c62b3b969753212340d3a98e7b IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.017486592579
0xc7c7459930d65b94b82507828441ebf600cb6553d98910fd052b1a612cf2bdcaApprove34269762023-04-25 13:16:0037 days 2 hrs ago0xde55ea86cd93306a0901ed6814c7fa19cc6c83cf IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.00553644
0x52004e4288aaa5fc789e66d895bbd50df103a4be0fee360fab65e0adb2c934b9Approve34163812023-04-23 23:27:4238 days 15 hrs ago0x0831ced65266e19604b8f5d80988942f188cf11b IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0026129
0xa3e1e6fb0b8575c46f4e7959270d7a9724cee38d58dc6c9edf9f1c05be1a7413Approve34158492023-04-23 21:34:4238 days 17 hrs ago0x0831ced65266e19604b8f5d80988942f188cf11b IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0026129
0x671d02a24822236102431a7c279751293d3e58e67499a4c9a718ed5be07961b4Approve33506612023-04-14 9:03:5448 days 6 hrs ago0xe8df8c650f866c9d96f8ac2149f67ebd63c2e0b3 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0026129
0xf146b2d1eff3011e28634279fb3fb2a5d6c74ca6b8ec8b0d70a36952986c6335Approve33159952023-04-09 9:54:0053 days 5 hrs ago0x95272acc5000f969215508b1a1d3840e63af0680 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0024490935
0x93ce79b33c1758fd8c42f4cab98b343e561e0552cb0a2d22004f36951457e253Approve33159702023-04-09 9:48:4253 days 5 hrs ago0x26f12397f8b312305c79b88ade67dd1749d37aea IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.002485287
0xf9fccd005341fca976cd0ff91f0bcf51a04701ba149e92459e63cc6f893ade19Approve33097682023-04-08 12:29:4854 days 2 hrs ago0xcfd396a775208d0b161eddb0dae9a4a5159996d5 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0026129
0x34fd3e111c8eaa25a6e034331c178ec28c90d3d53ebf75a4dd5a502d92df2da2Approve32904292023-04-05 11:43:1857 days 3 hrs ago0x875bde4c417e22035c03bac45bb953d8000aba70 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0026129
0x4c0e4c6a5d9b261e8010c492350e8eb539635977e5740843d8c851a9baee6172Approve32636142023-04-01 14:53:1261 days 27 mins ago0x6fcd699636c1c79bdfcfed5e5730e96c89c82138 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0046149
0x8d675866106d2bdc759fe6e54f9f178afd057250c0ec037674c02e9c4c11b772Approve32582462023-03-31 20:19:4261 days 19 hrs ago0x85204a5e932b69455822033f33e378dff4bb8960 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0046137
0xb7c61fa92014b0b0b588fe823ad350940d506c7502fbe75ff75cd88da1a5d183Approve32356492023-03-28 13:47:1865 days 1 hr ago0x42b656b4587b0e964e4024d1a05e054361c04e12 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0026129
0x3da3b14572c8d2d390f76b033f1bb72f897231eb2b2d98b3f02bcacb2bce31b8Approve32120252023-03-25 4:16:1268 days 11 hrs ago0xc70aa0bc5c372ca2006204c91af480dacf621bac IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0026129
0xe8f96ce78ad3cbe8cf900f745d6f39adc53f25dcd026e3af99e2d004b2ab0e0cApprove31906722023-03-22 2:41:3071 days 12 hrs ago0x96249640b5c7fc85926dee051ee2f2783f0e1288 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0026129
0x45c1aebd743717b9b77ebf558d2a4ee51967bfdd5a6b8c08f84b3788599dd682Approve31906702023-03-22 2:41:0071 days 12 hrs ago0x96249640b5c7fc85926dee051ee2f2783f0e1288 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0026129
0x42185366d08b57d040bbe6a180c6417bcd89bdbc2f630a89eba67b43d75b505dApprove31890822023-03-21 21:16:4271 days 18 hrs ago0x0aae1332e2a590bdc66f5b726feb1d74e39dea5a IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0046829055
0xc8c304a3c95aef9ca0236ab89ba380eff5ac41364c7e49e4d6e52514cd30bed4Approve31852462023-03-21 8:02:1872 days 7 hrs ago0xdc5b17f7e80ba5f2c06e9d04bd202d394165e093 IN  0x26a2abd79583155ea5d34443b62399879d42748a0 GLMR0.0046137
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x9da6621ba0d66a1fca8e127f74eb3243ccff9bfd63c35455e1b14c5e745a15a61830372022-01-13 2:56:12504 days 12 hrs ago Solarflare: Flare Factory  Contract Creation0 GLMR
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FlarePair

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonbeam.moonscan.io on 2022-01-21
*/

// Sources flattened with hardhat v2.7.0 https://hardhat.org

// File contracts/flare/FlarePair.sol

// SPDX-License-Identifier: GPL-3.0
pragma solidity =0.6.12;

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

library SafeMathFlare {
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x, "ds-math-add-overflow");
    }

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

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


contract FlareERC20 {
    using SafeMathFlare for uint256;

    string public constant name = "Flare LP Token";
    string public constant symbol = "FLP";
    uint8 public constant decimals = 18;
    uint256 public totalSupply;
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) 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 => uint256) public nonces;

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

    constructor() public {
        uint256 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 _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal pure virtual returns (bytes calldata) {
        return msg.data;
    }

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

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

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

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

    function approve(address spender, uint256 value) external returns (bool) {
        _approve(_msgSender(), spender, value);
        return true;
    }

    function transfer(address to, uint256 value) external returns (bool) {
        _transfer(_msgSender(), to, value);
        return true;
    }

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

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        require(deadline >= block.timestamp, "permit: 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,
            "permit: INVALID_SIGNATURE"
        );
        _approve(owner, spender, value);
    }
}



// a library for performing various math operations

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

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

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


interface IERC20Flare {
    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);
}


interface IFlareFactory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function setMigrator(address) external;
}


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

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

contract FlarePair is FlareERC20 {
    using SafeMathFlare for uint256;
    using UQ112x112 for uint224;

    uint256 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

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

    struct SwapVariables {
        uint112 _reserve0;
        uint112 _reserve1;
        uint256 balance0;
        uint256 balance1;
        uint256 amount0In;
        uint256 amount1In;
    }

    uint256 private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, "lock: 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,
        uint256 value
    ) private {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(SELECTOR, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "_safeTransfer: TRANSFER_FAILED"
        );
    }

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 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, "initialize: FORBIDDEN"); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }

    // update reserves and, on the first call per block, price accumulators
    function _update(
        uint256 balance0,
        uint256 balance1,
        uint112 _reserve0,
        uint112 _reserve1
    ) private {
        require(
            balance0 <= uint112(-1) && balance1 <= uint112(-1),
            "_update: 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 +=
                uint256(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) *
                timeElapsed;
            price1CumulativeLast +=
                uint256(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 = IFlareFactory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint256 _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint256 rootK = Math.sqrt(uint256(_reserve0).mul(_reserve1));
                uint256 rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint256 numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint256 denominator = rootK.mul(5).add(rootKLast);
                    uint256 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 (uint256 liquidity) {
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings
        uint256 balance0 = IERC20Flare(token0).balanceOf(address(this));
        uint256 balance1 = IERC20Flare(token1).balanceOf(address(this));
        uint256 amount0 = balance0.sub(_reserve0);
        uint256 amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            address migrator = IFlareFactory(factory).migrator();
            if (_msgSender() == migrator) {
                liquidity = IMigrator(migrator).desiredLiquidity();
                require(
                    liquidity > 0 && liquidity != uint256(-1),
                    "mint: 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, "mint: INSUFFICIENT_LIQUIDITY_MINTED");
        _mint(to, liquidity);

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

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

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint256 _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,
            "burn: INSUFFICIENT_LIQUIDITY_BURNED"
        );
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20Flare(_token0).balanceOf(address(this));
        balance1 = IERC20Flare(_token1).balanceOf(address(this));

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

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

        {
            // scope for _token{0,1}, avoids stack too deep errors
            address _token0 = token0;
            address _token1 = token1;
            require(to != _token0 && to != _token1, "swap: 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)
                IFlareCallee(to).uniswapV2Call(
                    _msgSender(),
                    amount0Out,
                    amount1Out,
                    data
                );
            vars.balance0 = IERC20Flare(_token0).balanceOf(address(this));
            vars.balance1 = IERC20Flare(_token1).balanceOf(address(this));
        }
        vars.amount0In = vars.balance0 > vars._reserve0 - amount0Out
            ? vars.balance0 - (vars._reserve0 - amount0Out)
            : 0;
        vars.amount1In = vars.balance1 > vars._reserve1 - amount1Out
            ? vars.balance1 - (vars._reserve1 - amount1Out)
            : 0;
        require(
            vars.amount0In > 0 || vars.amount1In > 0,
            "swap: INSUFFICIENT_INPUT_AMOUNT"
        );
        {
            // scope for reserve{0,1} - Adjusted, avoids stack too deep errors
            uint256 balance0Adjusted = vars.balance0.mul(10000).sub(
                vars.amount0In.mul(25)
            );
            uint256 balance1Adjusted = vars.balance1.mul(10000).sub(
                vars.amount1In.mul(25)
            );
            require(
                balance0Adjusted.mul(balance1Adjusted) >=
                    uint256(vars._reserve0).mul(vars._reserve1).mul(10000**2),
                "swap: K"
            );
        }

        _update(vars.balance0, vars.balance1, vars._reserve0, vars._reserve1);
        emit Swap(
            _msgSender(),
            vars.amount0In,
            vars.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,
            IERC20Flare(_token0).balanceOf(address(this)).sub(reserve0)
        );
        _safeTransfer(
            _token1,
            to,
            IERC20Flare(_token1).balanceOf(address(this)).sub(reserve1)
        );
    }

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

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"}]

60806040526001600c5534801561001557600080fd5b50604080518082018252600e81526d233630b932902628102a37b5b2b760911b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f7818410b011e19364f46fc37d130d00300413fdc94f64da78f119382b468d753818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b03191633179055612fd38061010c6000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a7146105da578063d505accf146105e2578063dd62ed3e14610640578063fff6cae91461067b576101b9565b8063ba9a7a5614610597578063bc25cf771461059f578063c45a0155146105d2576101b9565b80637ecebe00116100d35780637ecebe00146104d757806389afcb441461050a57806395d89b4114610556578063a9059cbb1461055e576101b9565b80636a6278421461046957806370a082311461049c5780637464fc3d146104cf576101b9565b806323b872dd116101665780633644e515116101405780633644e51514610416578063485cc9551461041e5780635909c0d5146104595780635a3d549314610461576101b9565b806323b872dd146103ad57806330adf81f146103f0578063313ce567146103f8576101b9565b8063095ea7b311610197578063095ea7b3146103155780630dfe16811461036257806318160ddd14610393576101b9565b8063022c0d9f146101be57806306fdde03146102595780630902f1ac146102d6575b600080fd5b610257600480360360808110156101d457600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561021857600080fd5b82018360208201111561022a57600080fd5b8035906020019184600183028401116401000000008311171561024c57600080fd5b509092509050610683565b005b610261610e75565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029b578181015183820152602001610283565b50505050905090810190601f1680156102c85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102de610eae565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b61034e6004803603604081101561032b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f03565b604080519115158252519081900360200190f35b61036a610f21565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61039b610f3d565b60408051918252519081900360200190f35b61034e600480360360608110156103c357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610f43565b61039b61109f565b6104006110c3565b6040805160ff9092168252519081900360200190f35b61039b6110c8565b6102576004803603604081101561043457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166110ce565b61039b6111a7565b61039b6111ad565b61039b6004803603602081101561047f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166111b3565b61039b600480360360208110156104b257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166117d7565b61039b6117e9565b61039b600480360360208110156104ed57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166117ef565b61053d6004803603602081101561052057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611801565b6040805192835260208301919091528051918290030190f35b610261611cab565b61034e6004803603604081101561057457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611ce4565b61039b611cf8565b610257600480360360208110156105b557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611cfe565b61036a611eeb565b61036a611f07565b610257600480360360e08110156105f857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611f23565b61039b6004803603604081101561065657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166121ef565b61025761220c565b600c546001146106f457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6c6f636b3a204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c55841515806107075750600084115b61077257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f737761703a20494e53554646494349454e545f4f55545055545f414d4f554e54604482015290519081900360640190fd5b61077a612f01565b6040518060c0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081525090506107d7610eae565b506dffffffffffffffffffffffffffff90811660208401521680825286108015610814575080602001516dffffffffffffffffffffffffffff1685105b61087f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f737761703a20494e53554646494349454e545f4c495155494449545900000000604482015290519081900360640190fd5b60065460075473ffffffffffffffffffffffffffffffffffffffff9182169190811690861682148015906108df57508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b61094a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f737761703a20494e56414c49445f544f00000000000000000000000000000000604482015290519081900360640190fd5b871561095b5761095b82878a6123f2565b861561096c5761096c8187896123f2565b8315610a3f578573ffffffffffffffffffffffffffffffffffffffff166310d1e85c6109966125ff565b8a8a89896040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610a2657600080fd5b505af1158015610a3a573d6000803e3d6000fd5b505050505b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610aab57600080fd5b505afa158015610abf573d6000803e3d6000fd5b505050506040513d6020811015610ad557600080fd5b505160408085019190915280517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8316916370a08231916024808301926020929190829003018186803b158015610b4a57600080fd5b505afa158015610b5e573d6000803e3d6000fd5b505050506040513d6020811015610b7457600080fd5b505160608401525050805160408201516dffffffffffffffffffffffffffff90911687900310610ba5576000610bc3565b8581600001516dffffffffffffffffffffffffffff16038160400151035b8160800181815250508481602001516dffffffffffffffffffffffffffff1603816060015111610bf4576000610c12565b8481602001516dffffffffffffffffffffffffffff16038160600151035b60a08201526080810151151580610c2d575060008160a00151115b610c9857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f737761703a20494e53554646494349454e545f494e5055545f414d4f554e5400604482015290519081900360640190fd5b6000610ccc610cb56019846080015161260390919063ffffffff16565b6040840151610cc690612710612603565b90612689565b90506000610cfc610ceb60198560a0015161260390919063ffffffff16565b6060850151610cc690612710612603565b9050610d476305f5e100610d4185602001516dffffffffffffffffffffffffffff1686600001516dffffffffffffffffffffffffffff1661260390919063ffffffff16565b90612603565b610d518383612603565b1015610dbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f737761703a204b00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b5050610ddc81604001518260600151836000015184602001516126fb565b8373ffffffffffffffffffffffffffffffffffffffff16610dfb6125ff565b73ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82283608001518460a001518a8a6040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001600c5550505050565b6040518060400160405280600e81526020017f466c617265204c5020546f6b656e00000000000000000000000000000000000081525081565b6008546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610f17610f106125ff565b84846129b1565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9082610f936125ff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461108a5773ffffffffffffffffffffffffffffffffffffffff84166000908152600260205260408120611034918491906110076125ff565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205490612689565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600260205260408120906110626125ff565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020555b611095848484612a20565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60055473ffffffffffffffffffffffffffffffffffffffff16331461115457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e697469616c697a653a20464f5242494444454e0000000000000000000000604482015290519081900360640190fd5b6006805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c5460011461122657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6c6f636b3a204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611236610eae565b50600654604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b1580156112b057600080fd5b505afa1580156112c4573d6000803e3d6000fd5b505050506040513d60208110156112da57600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561135357600080fd5b505afa158015611367573d6000803e3d6000fd5b505050506040513d602081101561137d57600080fd5b50519050600061139d836dffffffffffffffffffffffffffff8716612689565b905060006113bb836dffffffffffffffffffffffffffff8716612689565b905060006113c98787612af5565b6000549091508061166b57600554604080517f7cd07e47000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691637cd07e47916004808301926020929190829003018186803b15801561143f57600080fd5b505afa158015611453573d6000803e3d6000fd5b505050506040513d602081101561146957600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff811661148c6125ff565b73ffffffffffffffffffffffffffffffffffffffff1614156115bb578073ffffffffffffffffffffffffffffffffffffffff166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b1580156114ee57600080fd5b505afa158015611502573d6000803e3d6000fd5b505050506040513d602081101561151857600080fd5b50519950891580159061154b57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a14155b6115b657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6d696e743a204261642064657369726564206c69717569646974790000000000604482015290519081900360640190fd5b611665565b73ffffffffffffffffffffffffffffffffffffffff81161561163e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d757374206e6f742068617665206d69677261746f7200000000000000000000604482015290519081900360640190fd5b6116566103e8610cc66116518888612603565b612c63565b995061166560006103e8612cb5565b506116bc565b6116b96dffffffffffffffffffffffffffff89166116898684612603565b8161169057fe5b046dffffffffffffffffffffffffffff89166116ac8685612603565b816116b357fe5b04612d59565b98505b60008911611715576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612f586023913960400191505060405180910390fd5b61171f8a8a612cb5565b61172b86868a8a6126fb565b811561176757600854611763906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612603565b600b555b61176f6125ff565b73ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f8585604051808381526020018281526020019250505060405180910390a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461187557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6c6f636b3a204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c81905580611885610eae565b50600654600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b15801561190757600080fd5b505afa15801561191b573d6000803e3d6000fd5b505050506040513d602081101561193157600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b1580156119a557600080fd5b505afa1580156119b9573d6000803e3d6000fd5b505050506040513d60208110156119cf57600080fd5b5051306000908152600160205260408120549192506119ee8888612af5565b600054909150806119ff8487612603565b81611a0657fe5b049a5080611a148486612603565b81611a1b57fe5b04995060008b118015611a2e575060008a115b611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612f7b6023913960400191505060405180910390fd5b611a8d3084612d71565b611a98878d8d6123f2565b611aa3868d8c6123f2565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b158015611b0f57600080fd5b505afa158015611b23573d6000803e3d6000fd5b505050506040513d6020811015611b3957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b158015611bab57600080fd5b505afa158015611bbf573d6000803e3d6000fd5b505050506040513d6020811015611bd557600080fd5b50519350611be585858b8b6126fb565b8115611c2157600854611c1d906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612603565b600b555b8b73ffffffffffffffffffffffffffffffffffffffff16611c406125ff565b73ffffffffffffffffffffffffffffffffffffffff167fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364968d8d604051808381526020018281526020019250505060405180910390a35050505050505050506001600c81905550915091565b6040518060400160405280600381526020017f464c50000000000000000000000000000000000000000000000000000000000081525081565b6000610f17611cf16125ff565b8484612a20565b6103e881565b600c54600114611d6f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6c6f636b3a204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff9485169490931692611e459285928792611e40926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b158015611e0e57600080fd5b505afa158015611e22573d6000803e3d6000fd5b505050506040513d6020811015611e3857600080fd5b505190612689565b6123f2565b611ee18184611e406008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611e0e57600080fd5b50506001600c5550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b42841015611f9257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7065726d69743a20455850495245440000000000000000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156120f3573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061216e57508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6121d957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f7065726d69743a20494e56414c49445f5349474e415455524500000000000000604482015290519081900360640190fd5b6121e48989896129b1565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c5460011461227d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6c6f636b3a204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000600c55600654604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516123eb9273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b1580156122f457600080fd5b505afa158015612308573d6000803e3d6000fd5b505050506040513d602081101561231e57600080fd5b5051600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561239157600080fd5b505afa1580156123a5573d6000803e3d6000fd5b505050506040513d60208110156123bb57600080fd5b50516008546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004166126fb565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106124f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016124bb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461255a576040519150601f19603f3d011682016040523d82523d6000602084013e61255f565b606091505b509150915081801561258d57508051158061258d575080806020019051602081101561258a57600080fd5b50515b6125f857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5f736166655472616e736665723a205452414e534645525f4641494c45440000604482015290519081900360640190fd5b5050505050565b3390565b600081158061261e5750508082028282828161261b57fe5b04145b610f1b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b80820382811115610f1b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff841180159061272757506dffffffffffffffffffffffffffff8311155b61279257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f5f7570646174653a204f564552464c4f57000000000000000000000000000000604482015290519081900360640190fd5b60085463ffffffff428116917c0100000000000000000000000000000000000000000000000000000000900481168203908116158015906127e257506dffffffffffffffffffffffffffff841615155b80156127fd57506dffffffffffffffffffffffffffff831615155b156128a7578063ffffffff1661283a8561281686612e2a565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690612e4e565b600980547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff811661287a8461281687612e2a565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600880547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612a509082612689565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612a8c9082612e8f565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015612b6057600080fd5b505afa158015612b74573d6000803e3d6000fd5b505050506040513d6020811015612b8a57600080fd5b5051600b5473ffffffffffffffffffffffffffffffffffffffff8216158015945091925090612c4f578015612c4a576000612bdb6116516dffffffffffffffffffffffffffff888116908816612603565b90506000612be883612c63565b905080821115612c47576000612c0a612c018484612689565b60005490612603565b90506000612c2383612c1d866005612603565b90612e8f565b90506000818381612c3057fe5b0490508015612c4357612c438782612cb5565b5050505b50505b612c5b565b8015612c5b576000600b555b505092915050565b60006003821115612ca6575080600160028204015b81811015612ca057809150600281828581612c8f57fe5b040181612c9857fe5b049050612c78565b50612cb0565b8115612cb0575060015b919050565b600054612cc29082612e8f565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054612cf49082612e8f565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818310612d685781612d6a565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902054612da19082612689565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604081209190915554612dd59082612689565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff841681612e8757fe5b049392505050565b80820182811015610f1b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6040518060c0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff16815260200160008152602001600081526020016000815260200160008152509056fe6d696e743a20494e53554646494349454e545f4c49515549444954595f4d494e5445446275726e3a20494e53554646494349454e545f4c49515549444954595f4255524e4544a2646970667358221220a31f2611160b604f675cd3085a6213d4cb5fc4d53c7b07b175e9279d89bc2ccb64736f6c634300060c0033

Deployed ByteCode Sourcemap

7995:11906:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16462:2663;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16462:2663:0;;-1:-1:-1;16462:2663:0;-1:-1:-1;16462:2663:0;:::i;:::-;;825:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9200:313;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3273:152;;;;;;;;;;;;;;;;-1:-1:-1;3273:152:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;8300:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;964:26;;;:::i;:::-;;;;;;;;;;;;;;;;3585:379;;;;;;;;;;;;;;;;-1:-1:-1;3585:379:0;;;;;;;;;;;;;;;;;;:::i;1264:117::-;;;:::i;922:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1121:31;;;:::i;10511:211::-;;;;;;;;;;;;;;;;-1:-1:-1;10511:211:0;;;;;;;;;;;:::i;8630:35::-;;;:::i;8672:::-;;;:::i;12904:1822::-;;;;;;;;;;;;;;;;-1:-1:-1;12904:1822:0;;;;:::i;997:44::-;;;;;;;;;;;;;;;;-1:-1:-1;997:44:0;;;;:::i;8714:20::-;;;:::i;1388:41::-;;;;;;;;;;;;;;;;-1:-1:-1;1388:41:0;;;;:::i;14838:1512::-;;;;;;;;;;;;;;;;-1:-1:-1;14838:1512:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;878:37;;;:::i;3433:144::-;;;;;;;;;;;;;;;;-1:-1:-1;3433:144:0;;;;;;;;;:::i;8109:49::-;;;:::i;19174:444::-;;;;;;;;;;;;;;;;-1:-1:-1;19174:444:0;;;;:::i;8271:22::-;;;:::i;8328:21::-;;;:::i;3972:994::-;;;;;;;;;;;;;;;;-1:-1:-1;3972:994:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1048:64::-;;;;;;;;;;;;;;;;-1:-1:-1;1048:64:0;;;;;;;;;;;:::i;19667:231::-;;;:::i;16462:2663::-;9096:8;;9108:1;9096:13;9088:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9148:1;9137:8;:12;16639:14;;;;:32:::1;;;16670:1;16657:10;:14;16639:32;16617:114;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16742:25;;:::i;:::-;16770:31;;;;;;;;16784:1;16770:31;;;;;;16787:1;16770:31;;;;;;16790:1;16770:31;;;;16793:1;16770:31;;;;16796:1;16770:31;;;;16799:1;16770:31;;::::0;16742:59:::1;;16849:13;:11;:13::i;:::-;-1:-1:-1::0;16812:50:0::1;::::0;;::::1;16829:14;::::0;::::1;16812:50:::0;::::1;::::0;;;16910:27;::::1;:58:::0;::::1;;;;16954:4;:14;;;16941:27;;:10;:27;16910:58;16888:136;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;17138:6;::::0;17177::::1;::::0;17138::::1;::::0;;::::1;::::0;17177;;::::1;::::0;17206:13;::::1;::::0;::::1;::::0;::::1;::::0;:30:::1;;;17229:7;17223:13;;:2;:13;;;;17206:30;17198:59;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;17276:14:::0;;17272:58:::1;;17292:38;17306:7;17315:2;17319:10;17292:13;:38::i;:::-;17383:14:::0;;17379:58:::1;;17399:38;17413:7;17422:2;17426:10;17399:13;:38::i;:::-;17490:15:::0;;17486:215:::1;;17537:2;17524:30;;;17577:12;:10;:12::i;:::-;17612:10;17645;17678:4;;17524:177;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17486:215;17732:45;::::0;;;;;17771:4:::1;17732:45;::::0;::::1;::::0;;;:30:::1;::::0;::::1;::::0;::::1;::::0;:45;;;;;::::1;::::0;;;;;;;;:30;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17732:45:0;17716:13:::1;::::0;;::::1;:61:::0;;;;17808:45;;;;;17847:4:::1;17808:45;::::0;::::1;::::0;;;:30:::1;::::0;::::1;::::0;::::1;::::0;:45;;;;;17732::::1;::::0;17808;;;;;;;:30;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17808:45:0;17792:13:::1;::::0;::::1;:61:::0;-1:-1:-1;;17908:14:0;;17892:13:::1;::::0;::::1;::::0;17908:27:::1;::::0;;::::1;::::0;;::::1;-1:-1:-1::0;17892:121:0::1;;18012:1;17892:121;;;17985:10;17968:4;:14;;;:27;;;17951:4;:13;;;:45;17892:121;17875:4;:14;;:138;;;::::0;::::1;18074:10;18057:4;:14;;;:27;;;18041:4;:13;;;:43;:121;;18161:1;18041:121;;;18134:10;18117:4;:14;;;:27;;;18100:4;:13;;;:45;18041:121;18024:14;::::0;::::1;:138:::0;18195:14:::1;::::0;::::1;::::0;:18;;;:40:::1;;;18234:1;18217:4;:14;;;:18;18195:40;18173:121;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;18400:24;18427:84;18474:22;18493:2;18474:4;:14;;;:18;;:22;;;;:::i;:::-;18427:13;::::0;::::1;::::0;:24:::1;::::0;18445:5:::1;18427:17;:24::i;:::-;:28:::0;::::1;:84::i;:::-;18400:111;;18526:24;18553:84;18600:22;18619:2;18600:4;:14;;;:18;;:22;;;;:::i;:::-;18553:13;::::0;::::1;::::0;:24:::1;::::0;18571:5:::1;18553:17;:24::i;:84::-;18526:111;;18741:57;18789:8;18741:43;18769:4;:14;;;18741:43;;18749:4;:14;;;18741:23;;:27;;:43;;;;:::i;:::-;:47:::0;::::1;:57::i;:::-;18678:38;:16:::0;18699;18678:20:::1;:38::i;:::-;:120;;18652:189;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;9160:1;;18865:69;18873:4;:13;;;18888:4;:13;;;18903:4;:14;;;18919:4;:14;;;18865:7;:69::i;:::-;19104:2;18950:167;;18969:12;:10;:12::i;:::-;18950:167;;;18996:4;:14;;;19025:4;:14;;;19054:10;19079;18950:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;9183:1:0;9172:8;:12;-1:-1:-1;;;;16462:2663:0:o;825:46::-;;;;;;;;;;;;;;;;;;;:::o;9200:313::-;9415:8;;;;;;;9446;;;;;;;9487:18;;;;;;9200:313::o;3273:152::-;3340:4;3357:38;3366:12;:10;:12::i;:::-;3380:7;3389:5;3357:8;:38::i;:::-;-1:-1:-1;3413:4:0;3273:152;;;;;:::o;8300:21::-;;;;;;:::o;964:26::-;;;;:::o;3585:379::-;3721:15;;;3700:4;3721:15;;;:9;:15;;;;;3762:2;;3700:4;3737:12;:10;:12::i;:::-;3721:29;;;;;;;;;;;;;;;;:44;3717:181;;3814:15;;;;;;;:9;:15;;;;;:72;;3866:5;;3814:15;3830:12;:10;:12::i;:::-;3814:29;;;;;;;;;;;;;-1:-1:-1;3814:29:0;;;:33;:72::i;:::-;3782:15;;;;;;;:9;:15;;;;;;3798:12;:10;:12::i;:::-;3782:29;;;;;;;;;;;;;-1:-1:-1;3782:29:0;:104;3717:181;3908:26;3918:4;3924:2;3928:5;3908:9;:26::i;:::-;-1:-1:-1;3952:4:0;3585:379;;;;;:::o;1264:117::-;1315:66;1264:117;:::o;922:35::-;955:2;922:35;:::o;1121:31::-;;;;:::o;10511:211::-;10607:7;;;;10593:10;:21;10585:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10671:6;:16;;;;;;;;;;;;;;10698:6;:16;;;;;;;;;;;10511:211::o;8630:35::-;;;;:::o;8672:::-;;;;:::o;12904:1822::-;12953:17;9096:8;;9108:1;9096:13;9088:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9148:1;9137:8;:12;;;9148:1;13026:13:::1;:11;:13::i;:::-;-1:-1:-1::0;13096:6:0::1;::::0;13084:44:::1;::::0;;;;;13122:4:::1;13084:44;::::0;::::1;::::0;;;12983:56;;-1:-1:-1;12983:56:0;;-1:-1:-1;13065:16:0::1;::::0;13096:6:::1;::::0;;::::1;::::0;13084:29:::1;::::0;:44;;;;;::::1;::::0;;;;;;;;13096:6;13084:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13084:44:0;13170:6:::1;::::0;13158:44:::1;::::0;;;;;13196:4:::1;13158:44;::::0;::::1;::::0;;;13084;;-1:-1:-1;13139:16:0::1;::::0;13170:6:::1;::::0;;::::1;::::0;13158:29:::1;::::0;:44;;;;;13084::::1;::::0;13158;;;;;;;;13170:6;13158:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13158:44:0;;-1:-1:-1;13213:15:0::1;13231:23;:8:::0;:23:::1;::::0;::::1;:12;:23::i;:::-;13213:41:::0;-1:-1:-1;13265:15:0::1;13283:23;:8:::0;:23:::1;::::0;::::1;:12;:23::i;:::-;13265:41;;13319:10;13332:30;13341:9;13352;13332:8;:30::i;:::-;13373:20;13396:11:::0;13319:43;;-1:-1:-1;13500:17:0;13496:905:::1;;13567:7;::::0;13553:33:::1;::::0;;;;;;;13534:16:::1;::::0;13567:7:::1;;::::0;13553:31:::1;::::0;:33:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;13567:7;13553:33;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13553:33:0;;-1:-1:-1;13605:24:0::1;::::0;::::1;:12;:10;:12::i;:::-;:24;;;13601:609;;;13672:8;13662:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13662:38:0;;-1:-1:-1;13749:13:0;;;;;:41:::1;;;13787:2;13766:9;:24;;13749:41;13719:142;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13601:609;;;13910:22;::::0;::::1;::::0;13902:57:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13990:94;8153:5;13990:31;14000:20;:7:::0;14012;14000:11:::1;:20::i;:::-;13990:9;:31::i;:94::-;13978:106;;14103:36;14117:1;8153:5;14103;:36::i;:::-;13496:905;;;;14254:135;14281:37;::::0;::::1;:25;:7:::0;14293:12;14281:11:::1;:25::i;:::-;:37;;;;;;14337;::::0;::::1;:25;:7:::0;14349:12;14337:11:::1;:25::i;:::-;:37;;;;;;14254:8;:135::i;:::-;14242:147;;13496:905;14431:1;14419:9;:13;14411:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14483:20;14489:2;14493:9;14483:5;:20::i;:::-;14516:49;14524:8;14534;14544:9;14555;14516:7;:49::i;:::-;14580:5;14576:50;;;14617:8;::::0;14595:31:::1;::::0;14617:8:::1;14603::::0;;::::1;::::0;14617;;::::1;;14595:21;:31::i;:::-;14587:5;:39:::0;14576:50:::1;14687:12;:10;:12::i;:::-;14682:36;;;14701:7;14710;14682:36;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;9183:1:0;9172:8;:12;-1:-1:-1;12904:1822:0;;;-1:-1:-1;;;;;;12904:1822:0:o;997:44::-;;;;;;;;;;;;;:::o;8714:20::-;;;;:::o;1388:41::-;;;;;;;;;;;;;:::o;14838:1512::-;14914:15;14931;9096:8;;9108:1;9096:13;9088:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9148:1;9137:8;:12;;;9148:1;15007:13:::1;:11;:13::i;:::-;-1:-1:-1::0;15064:6:0::1;::::0;15114::::1;::::0;15165:45:::1;::::0;;;;;15204:4:::1;15165:45;::::0;::::1;::::0;;;14964:56;;-1:-1:-1;14964:56:0;;-1:-1:-1;15064:6:0::1;::::0;;::::1;::::0;15114;::::1;::::0;15046:15:::1;::::0;15064:6;;15165:30:::1;::::0;:45;;;;;::::1;::::0;;;;;;;;15064:6;15165:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15165:45:0;15240::::1;::::0;;;;;15279:4:::1;15240:45;::::0;::::1;::::0;;;15165;;-1:-1:-1;15221:16:0::1;::::0;15240:30:::1;::::0;::::1;::::0;::::1;::::0;:45;;;;;15165::::1;::::0;15240;;;;;;;:30;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15240:45:0;15334:4:::1;15296:17;15316:24:::0;;;:9:::1;15240:45;15316:24:::0;;;;;15240:45;;-1:-1:-1;15366:30:0::1;15375:9:::0;15386;15366:8:::1;:30::i;:::-;15407:20;15430:11:::0;15353:43;;-1:-1:-1;15430:11:0;15540:23:::1;:9:::0;15554:8;15540:13:::1;:23::i;:::-;:38;;;;;;::::0;-1:-1:-1;15673:12:0;15647:23:::1;:9:::0;15661:8;15647:13:::1;:23::i;:::-;:38;;;;;;15637:48;;15776:1;15766:7;:11;:26;;;;;15791:1;15781:7;:11;15766:26;15744:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15866:31;15880:4;15887:9;15866:5;:31::i;:::-;15908:35;15922:7;15931:2;15935:7;15908:13;:35::i;:::-;15954;15968:7;15977:2;15981:7;15954:13;:35::i;:::-;16011:45;::::0;;;;;16050:4:::1;16011:45;::::0;::::1;::::0;;;:30:::1;::::0;::::1;::::0;::::1;::::0;:45;;;;;::::1;::::0;;;;;;;;:30;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16011:45:0;16078::::1;::::0;;;;;16117:4:::1;16078:45;::::0;::::1;::::0;;;16011;;-1:-1:-1;16078:30:0::1;::::0;::::1;::::0;::::1;::::0;:45;;;;;16011::::1;::::0;16078;;;;;;;;:30;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16078:45:0;;-1:-1:-1;16136:49:0::1;16144:8:::0;16078:45;16164:9;16175;16136:7:::1;:49::i;:::-;16200:5;16196:50;;;16237:8;::::0;16215:31:::1;::::0;16237:8:::1;16223::::0;;::::1;::::0;16237;;::::1;;16215:21;:31::i;:::-;16207:5;:39:::0;16196:50:::1;16339:2;16302:40;;16307:12;:10;:12::i;:::-;16302:40;;;16321:7;16330;16302:40;;;;;;;;;;;;;;;;;;;;;;;;9160:1;;;;;;;;;9183::::0;9172:8;:12;;;;14838:1512;;;:::o;878:37::-;;;;;;;;;;;;;;;;;;;:::o;3433:144::-;3496:4;3513:34;3523:12;:10;:12::i;:::-;3537:2;3541:5;3513:9;:34::i;8109:49::-;8153:5;8109:49;:::o;19174:444::-;9096:8;;9108:1;9096:13;9088:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9148:1;9137:8;:12;19243:6:::1;::::0;19293::::1;::::0;19442:8:::1;::::0;19392:45:::1;::::0;;;;;19431:4:::1;19392:45;::::0;::::1;::::0;;;19243:6:::1;::::0;;::::1;::::0;19293;;::::1;::::0;19325:137:::1;::::0;19243:6;;19375:2;;19392:59:::1;::::0;19442:8:::1;;::::0;19243:6;;19392:30:::1;::::0;:45;;;;;::::1;::::0;;;;;;;;;19243:6;19392:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19392:45:0;;:49:::1;:59::i;:::-;19325:13;:137::i;:::-;19473;19501:7;19523:2;19540:59;19590:8;;;;;;;;;;;19540:59;;19552:7;19540:30;;;19579:4;19540:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;19473:137;-1:-1:-1::0;;9183:1:0;9172:8;:12;-1:-1:-1;19174:444:0:o;8271:22::-;;;;;;:::o;8328:21::-;;;;;;:::o;3972:994::-;4194:15;4182:8;:27;;4174:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4345:16;;4589:13;;;;4240:14;4589:13;;;:6;:13;;;;;;;;:15;;;;;;;;;4412:250;;1315:66;4412:250;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4380:301;;;;;;4281:415;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4257:450;;;;;;;;;4745:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4240:14;;4589:15;4745:26;;;;;-1:-1:-1;4745:26:0;;;;;;;;;;4589:15;4745:26;;;;;;;;;;;;;;;-1:-1:-1;;4745:26:0;;;;;;-1:-1:-1;;4804:30:0;;;;;;;:59;;;4858:5;4838:25;;:16;:25;;;4804:59;4782:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4927:31;4936:5;4943:7;4952:5;4927:8;:31::i;:::-;3972:994;;;;;;;;;:::o;1048:64::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19667:231::-;9096:8;;9108:1;9096:13;9088:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9148:1;9137:8;:12;19742:6:::1;::::0;19730:44:::1;::::0;;;;;19768:4:::1;19730:44;::::0;::::1;::::0;;;19708:182:::1;::::0;19742:6:::1;;::::0;19730:29:::1;::::0;:44;;;;;::::1;::::0;;;;;;;;19742:6;19730:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19730:44:0;19801:6:::1;::::0;19789:44:::1;::::0;;;;;19827:4:::1;19789:44;::::0;::::1;::::0;;;19801:6:::1;::::0;;::::1;::::0;19789:29:::1;::::0;:44;;;;;19730::::1;::::0;19789;;;;;;;;19801:6;19789:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19789:44:0;19848:8:::1;::::0;::::1;::::0;;::::1;::::0;19871;;::::1;;19708:7;:182::i;:::-;9183:1:::0;9172:8;:12;19667:231::o;9521:389::-;8226:34;;;;;;;;;;;;;;;;;9700:43;;9675:10;9700:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9675:79;;;;9640:12;;9654:17;;9675:10;;;9700:43;9675:79;;;9700:43;9675:79;;9700:43;9675:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9639:115;;;;9787:7;:57;;;;-1:-1:-1;9799:11:0;;:16;;:44;;;9830:4;9819:24;;;;;;;;;;;;;;;-1:-1:-1;9819:24:0;9799:44;9765:137;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9521:389;;;;;:::o;2147:98::-;2227:10;2147:98;:::o;598:151::-;656:9;686:6;;;:30;;-1:-1:-1;;701:5:0;;;715:1;710;701:5;710:1;696:15;;;;;:20;686:30;678:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;452:138;545:5;;;540:16;;;;532:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10807:1018;10982:23;;;;;;:50;;-1:-1:-1;11009:23:0;;;;10982:50;10960:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11192:18;;11119:23;:15;:23;;;11192:18;;;;;11175:35;;;11248:15;;;;;;:33;;-1:-1:-1;11267:14:0;;;;;11248:33;:51;;;;-1:-1:-1;11285:14:0;;;;;11248:51;11244:410;;;11491:11;11418:84;;11426:44;11460:9;11426:27;11443:9;11426:16;:27::i;:::-;:33;;;;:44::i;:::-;11377:20;:125;;11418:53;;;;;:84;;;;11377:125;;;11558:84;;;11566:44;11600:9;11566:27;11583:9;11566:16;:27::i;:44::-;11517:20;:125;;11558:53;;;;;:84;;;;11517:125;;;11244:410;11664:8;:28;;;;;;;;;;;;11703;;;;;;;;;;;;11742:35;;;;;;;;;;;;11793:24;;;11798:8;;;11793:24;;11808:8;;;;;;;11793:24;;;;;;;;;;;;;;;;;10807:1018;;;;;;:::o;2794:206::-;2912:16;;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;2961:31;;;;;;;;;;;;;;;;;2794:206;;;:::o;3008:257::-;3139:15;;;;;;;:9;:15;;;;;;:26;;3159:5;3139:19;:26::i;:::-;3121:15;;;;;;;;:9;:15;;;;;;:44;;;;3192:13;;;;;;;:24;;3210:5;3192:17;:24::i;:::-;3176:13;;;;;;;;:9;:13;;;;;;;;;:40;;;;3232:25;;;;;;;3176:13;;3232:25;;;;;;;;;;;;;3008:257;;;:::o;11915:877::-;12006:10;12034:13;12064:7;;;;;;;;;;;12050:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12050:30:0;12146:5;;12099:19;;;;;;;-1:-1:-1;12050:30:0;;-1:-1:-1;12146:5:0;12177:608;;12207:11;;12203:512;;12239:13;12255:44;12265:33;;:18;;;;:33;;:22;:33::i;12255:44::-;12239:60;;12318:17;12338;12348:6;12338:9;:17::i;:::-;12318:37;;12386:9;12378:5;:17;12374:326;;;12420:17;12440:37;12456:20;:5;12466:9;12456;:20::i;:::-;12440:11;;;:15;:37::i;:::-;12420:57;-1:-1:-1;12500:19:0;12522:27;12539:9;12522:12;:5;12532:1;12522:9;:12::i;:::-;:16;;:27::i;:::-;12500:49;;12572:17;12604:11;12592:9;:23;;;;;;;-1:-1:-1;12642:13:0;;12638:42;;12657:23;12663:5;12670:9;12657:5;:23::i;:::-;12374:326;;;;12203:512;;;12177:608;;;12736:11;;12732:53;;12772:1;12764:5;:9;12732:53;11915:877;;;;;;:::o;5275:312::-;5323:9;5353:1;5349;:5;5345:235;;;-1:-1:-1;5375:1:0;5411;5407;5403:5;;:9;5427:92;5438:1;5434;:5;5427:92;;;5464:1;5460:5;;5502:1;5497;5493;5489;:5;;;;;;:9;5488:15;;;;;;5484:19;;5427:92;;;5345:235;;;;5540:6;;5536:44;;-1:-1:-1;5567:1:0;5536:44;5275:312;;;:::o;2362:204::-;2438:11;;:22;;2454:5;2438:15;:22::i;:::-;2424:11;:36;;;2487:13;;;;;:9;:13;;;;;;:24;;2505:5;2487:17;:24::i;:::-;2471:13;;;;;;;:9;:13;;;;;;;;:40;;;;2527:31;;;;;;;2471:13;;;;2527:31;;;;;;;;;;2362:204;;:::o;5052:105::-;5110:9;5140:1;5136;:5;:13;;5148:1;5136:13;;;5144:1;5136:13;5132:17;5052:105;-1:-1:-1;;;5052:105:0:o;2574:212::-;2656:15;;;;;;;:9;:15;;;;;;:26;;2676:5;2656:19;:26::i;:::-;2638:15;;;;;;;:9;:15;;;;;:44;;;;2707:11;:22;;2723:5;2707:15;:22::i;:::-;2693:11;:36;;;2745:33;;;;;;;;;;;;;;;;;;;;;;2574:212;;:::o;5698:120::-;5774:10;;5643:6;5774:17;;5698:120::o;5889:108::-;5949:9;5979:10;;;5975:14;;;5979:10;5975:14;;;;;;5889:108;-1:-1:-1;;;5889:108:0:o;307:137::-;400:5;;;395:16;;;;387:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://a31f2611160b604f675cd3085a6213d4cb5fc4d53c7b07b175e9279d89bc2ccb
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.