Contract 0xef45d134b73241eda7703fa787148d9c9f4950b0

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb3c34091c6ab2c90b8eccd5ba01ecf637d7481780f7767d01c36011e5f5ef76bSwap Exact Token...213148832021-11-07 5:27:0627 days 17 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.01191478486
0xead2ea774c5ad1263e9b9ef41b61925acb9772df25aa5452de2288b3cf303de8Swap Exact Token...213146652021-11-07 5:24:0127 days 17 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.012425592547
0xc27d6458e6c25dc781efcbb99ed24d52d0ca16478ca273b9442e90b93c33fc67Swap Exact Token...213143962021-11-07 5:20:1627 days 17 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.012439948243
0xd0c65e088482b288604e4e63ec6d47952850cedda0fa9f984e4897a42c042f7dSwap Exact Token...213142172021-11-07 5:17:4327 days 17 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.01253160352
0x919460f058c5170f61f95276a42f98e08cf13bfca49a8c83ace62b6fe383b207Swap Exact Token...213125232021-11-07 4:53:2627 days 17 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.01728230329
0x5232bc310a1a7f1e84141106c8f4e1566a695d9efe9716ee762a3a62ef7f47eeSwap Exact Token...213124072021-11-07 4:51:5027 days 17 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.01641651205
0x2de816a4646e849b49792143f8aace5e6b0485c191e44e79956e3f1244261e26Swap Exact Token...213122402021-11-07 4:49:1727 days 17 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.01574716846
0xe2f35fa16a03cd55b198eb8ad752319de2bedec3935974a88b2dae16a81bebbbSwap Exact Token...213117592021-11-07 4:41:0127 days 17 hrs ago0xda5824e47998bdeb91b25bb71cbf74e832f875a8 IN  SpiritSwap: Factory0 FTM0.01469441494
0xdf08d9e52e9376b5dda474bd063da44ce7280294ecab77d7980daf90d8d21af3Create Pair206642162021-10-31 16:55:3934 days 5 hrs ago0xa2ba62ac5a89f5d5cfc71073250b92c853805b58 IN  SpiritSwap: Factory0 FTM0.236967423055
0x86984397166c965de43308407d18a49f6cebea2a2864fbfef826762708e35391Create Pair186781672021-10-09 14:32:2556 days 8 hrs ago0xe2dca5be87a29dd426d9cfa38cc08681ff3a84e3 IN  SpiritSwap: Factory0 FTM0.299282182722
0xe66cafc90402d6e6683027285792501d2011b6a7e8ffdd18e5ba83fa932589bfCreate Pair186780372021-10-09 14:29:0556 days 8 hrs ago0xe2dca5be87a29dd426d9cfa38cc08681ff3a84e3 IN  SpiritSwap: Factory0 FTM0.317679764529
0xbbf04828caf9e7666a7a4918f25961d715f3c455486ed4367c5b775cca9675c8Create Pair178627882021-09-28 12:48:3467 days 9 hrs ago0xc5f43e0418754f39494a23220a485c5fb5cbc0b6 IN  SpiritSwap: Factory0 FTM0.438905532255
0x84c02f9406e8faedb64d88b1b6ec72667137b7679df5f10407824392fe9a0c85Create Pair175320732021-09-23 9:40:1072 days 12 hrs ago0xf77ce6e2445052a952df1e32c1586524091ea735 IN  SpiritSwap: Factory0 FTM0.3563968757
0xc5a516653c03f969df36e33e6dc912b4575a2290eddf2fe632b1fac433e1688eCreate Pair175320162021-09-23 9:38:0672 days 13 hrs ago0xf77ce6e2445052a952df1e32c1586524091ea735 IN  SpiritSwap: Factory0 FTM0.004758
0x423a28ac615bdc87d537566dfe2ff77edc96296aa957f1a0cfaaac8830af73daCreate Pair174866802021-09-22 11:29:2973 days 11 hrs ago0xcc35f0806a725c39237601d0e908e0624993bd6d IN  SpiritSwap: Factory0 FTM0.405788925879
0xcdfdb9fc47f7195c0f3a9ebbe6e8c66b7f400386d0e8f1fd6218b56e29268481Create Pair172970172021-09-19 11:44:3476 days 10 hrs ago0xb871b5916a9fed5937124175c94af5ae4b5e0c27 IN  SpiritSwap: Factory0 FTM0.52195727123
0xc1cdf4b25be42ebcb77b170c053afb3162cf38f609f2b8a16c51088c4f89ac0eSet Fee To Sette...166523012021-09-08 5:54:5787 days 16 hrs ago0x4d5362dd18ea4ba880c829b0152b7ba371741e59 IN  SpiritSwap: Factory0 FTM0.001519035
0x880aaedcfccd1e30550a4ad80f08055dc598172d5ff5eff98372cd12ff8025fcSet Fee To155481882021-08-26 6:16:20100 days 16 hrs ago0x4d5362dd18ea4ba880c829b0152b7ba371741e59 IN  SpiritSwap: Factory0 FTM0.001673112
0xb84b2df95aaa72fc77a9f0934fa0ede7ee794672edb558efc6e0fbb9148467c2Set Fee To155424782021-08-26 4:40:12100 days 17 hrs ago0x4d5362dd18ea4ba880c829b0152b7ba371741e59 IN  SpiritSwap: Factory0 FTM0.001523727
0xc309e33e7dd59bdcec8943dfe4c90b83fb6d1a1023740a26ea94991537ab1c47Create Pair152532922021-08-22 19:50:54104 days 2 hrs ago0xcc887c71abeb5763e896859b11530cc7942c7bd5 IN  SpiritSwap: Factory0 FTM0.16781904
0x5b330fd322fc765afa3656d2f82397b443bfb04fabf37b84a4808f001b6215ecSet Fee To150826872021-08-20 18:57:06106 days 3 hrs ago0x4d5362dd18ea4ba880c829b0152b7ba371741e59 IN  SpiritSwap: Factory0 FTM0.00179262
0xeeb436f3e1759a3bbbabaad0e7541b507a6ceef3d709763d7b75b683c68d2627Create Pair137599512021-08-04 13:51:44122 days 8 hrs agoTarot: Deployer IN  SpiritSwap: Factory0 FTM0.0998923
0x0745db0c2697db374f738afb403491fe00da1dadb596e784d600f91f1a6b1624Create Pair137002182021-08-03 21:00:07123 days 1 hr agoTarot: Deployer IN  SpiritSwap: Factory0 FTM0.121880393291
0x95d00a4dc6bcae6baf5ecc1e69b6615547e2f2b339a32ba15427b22643d0579bCreate Pair136868792021-08-03 17:32:13123 days 5 hrs agoTarot: Deployer IN  SpiritSwap: Factory0 FTM0.1176824847
0xa54790fa1d1c3efdf0fc2f0412a445d0c65c96edda4fefa4bcd2e6e089e9e159Create Pair130695222021-07-27 12:57:43130 days 9 hrs agoTarot: Deployer IN  SpiritSwap: Factory0 FTM0.383910262587
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x3e85638cb8eca2804aa59de42c65cb866a11222641e7f1bbce34152359c9c133239772612021-12-04 15:33:287 hrs 6 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0xb7f4877913edb78bc4e1ee17d3adb2fd74ba93089399a5287ff6cb2e11781066239581932021-12-04 10:49:4111 hrs 49 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0x26cd5b03bae19e104a28bef48bddfdafa94c46d155bb3386b1b749ca136e2a51239515762021-12-04 9:14:0113 hrs 25 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0x31006e3ae711fe970ceca78bbc4f973092b7c02970b809c12362f0042365cf16239513142021-12-04 9:10:0913 hrs 29 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0xbc39a07301570cbc9cefaab4a9861ab5b260b38f1387c08757fdf4e61268add3239325142021-12-04 3:46:5118 hrs 52 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0x8cc032a4f0fc6d878bc545f6c8fcbab1edc5d5729738accd27c9957f08e3df08239285632021-12-04 2:47:1419 hrs 52 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0x76c5a837ef1ebc71e4691e4fab0f59c20da69b4a9163dfacf5555dc71ebd109a239081342021-12-03 21:42:381 day 56 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0xbc7ad35425b0528f3bec41131433843561416dc60bf8e57d9146c84950c4d367239069322021-12-03 21:25:441 day 1 hr ago SpiritSwap: Factory  Contract Creation0 FTM
0x55b6fc4160f5d196298b24a555888c1f987c8e7f600310c8fe6634cc285acff3238457742021-12-03 5:58:291 day 16 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x34034a711582917af2446177cf46bbbab7f1c4ae04558924ab3000224f0f108b238181802021-12-02 23:14:431 day 23 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x44e6677c30617031b540aa24cf536c44efb26f4a854b12f262edc366bca4f3b6238049012021-12-02 19:57:512 days 2 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xd9b160dac653f8adf0c9c1070e0ef75c303788bec0be784b3cca2f113f146fd5237960942021-12-02 17:49:092 days 4 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xc3f1efa8924bc6f647ad69677d5810167409da7d38cdb6993ae76233ba7a3556237857352021-12-02 15:21:422 days 7 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xfc144faeb881855db5aa7b064531e15934370760985218b943f425b9894ea881237424792021-12-02 4:56:042 days 17 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x89e6251e9dbaed1c1979e7afc8e7fcb69347f60d9b5326e79b3c2e55a2303379237419432021-12-02 4:49:062 days 17 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x02dafdb185088e21f00bf48bc6fec7988824128245b8eb5fdcf91990da1b6aaa237123482021-12-01 21:42:273 days 57 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0x33af4b3cb2f28d2dac7c6451ae1570868310882df79576a0207865cb4fc4f038236725632021-12-01 12:12:123 days 10 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xd7eb9289cdee0a1ea5a91ae69c3e248dcb863c7ffcc547109023b1f80fb24f16236668262021-12-01 10:42:373 days 11 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xfd70a7f8b8d156aef0751c37485627f606bbe964805e87076216f4cef2337e86236024722021-11-30 19:30:444 days 3 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x42b39af28f8623c9a47f2c4a58cdec13f7d3814a8b1f1b51554d32a56cd6c839235541492021-11-30 7:30:264 days 15 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x0833b19c86de3090093034ce78817d37bbff0f80459591f6cd0dcdeeb1b7d2f5235428362021-11-30 4:46:234 days 17 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xf6263778e361ca710dda4925a5811cc9cfdc51f8205e55b389e440c91f4b4271234198142021-11-28 22:48:445 days 23 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0x269c71662431862ffeeb9cc1eac0a0bed314619a59b9eeabc7051f2c3c293f11234169562021-11-28 22:08:426 days 30 mins ago SpiritSwap: Factory  Contract Creation0 FTM
0x9f9303eff2c852dbeb8b9d255d71f9af3ae10cb194f73997d8daf9d638019381234096352021-11-28 20:16:106 days 2 hrs ago SpiritSwap: Factory  Contract Creation0 FTM
0xc42fa11518661b22a36969dfe7a2db3518da78223a7df0507386f1ac4dd76085232523172021-11-27 5:04:127 days 17 hrs ago SpiritSwap: 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 0xf3f2883b2bcc1e5b63129a302165e696c7eba9b8

Contract Name:
SpiritFactory

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-04-20
*/

/**
 *Submitted for verification at FtmScan.com on 2020-09-19
*/

pragma solidity =0.5.16;


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

    function feeTo() external view returns (address);
    function feeToSetter() 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 locked() external view returns (bool);
    function setLocked(bool) external;
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure 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);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure 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);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
    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');
    }
}

contract PancakeERC20 is IPancakeERC20 {
    using SafeMath for uint;

    string public constant name = 'Spirit LPs';
    string public constant symbol = 'SPIRIT-LP';
    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, 'Pancake: 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, 'Pancake: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}

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

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

interface IERC20 {
    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 IPancakeCallee {
    function pancakeCall(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

contract PancakePair is IPancakePair, PancakeERC20 {
    using SafeMath  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, 'Pancake: 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))), 'Pancake: 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, 'Pancake: 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), 'Pancake: 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 = IPancakeFactory(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 = IERC20(token0).balanceOf(address(this));
        uint balance1 = IERC20(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) {
            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, 'Pancake: 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 = IERC20(_token0).balanceOf(address(this));
        uint balance1 = IERC20(_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, 'Pancake: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20(_token0).balanceOf(address(this));
        balance1 = IERC20(_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, 'Pancake: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'Pancake: 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, 'Pancake: 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) IPancakeCallee(to).pancakeCall(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20(_token0).balanceOf(address(this));
        balance1 = IERC20(_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, 'Pancake: 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), 'Pancake: 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, IERC20(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20(_token1).balanceOf(address(this)).sub(reserve1));
    }

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

contract SpiritFactory is IPancakeFactory {
    bytes32 public constant INIT_CODE_PAIR_HASH = keccak256(abi.encodePacked(type(PancakePair).creationCode));

    address public feeTo;
    address public feeToSetter;
    bool public locked;

    mapping(address => mapping(address => address)) public getPair;
    address[] public allPairs;

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

    constructor(address _feeToSetter, bool _locked) public {
        feeToSetter = _feeToSetter;
        locked = _locked;
    }

    function allPairsLength() external view returns (uint) {
        return allPairs.length;
    }

    function createPair(address tokenA, address tokenB) external returns (address pair) {
        require(tokenA != tokenB, 'Spirit: IDENTICAL_ADDRESSES');
        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'Spirit: ZERO_ADDRESS');
        require(getPair[token0][token1] == address(0), 'Spirit: PAIR_EXISTS'); // single check is sufficient
        bytes memory bytecode = type(PancakePair).creationCode;
        bytes32 salt = keccak256(abi.encodePacked(token0, token1));
        assembly {
            pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
        IPancakePair(pair).initialize(token0, token1);
        getPair[token0][token1] = pair;
        getPair[token1][token0] = pair; // populate mapping in the reverse direction
        allPairs.push(pair);
        emit PairCreated(token0, token1, pair, allPairs.length);
    }

    function setFeeTo(address _feeTo) external {
        require(msg.sender == feeToSetter, 'Spirit: FORBIDDEN');
        feeTo = _feeTo;
    }

    function setFeeToSetter(address _feeToSetter) external {
        require(msg.sender == feeToSetter, 'Spirit: FORBIDDEN');
        feeToSetter = _feeToSetter;
    }

    function setLocked(bool _locked) external {
        require(msg.sender == feeToSetter, 'Spirit: FORBIDDEN');
        locked = _locked;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"},{"internalType":"bool","name":"_locked","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{"constant":true,"inputs":[],"name":"INIT_CODE_PAIR_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"allPairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"pair","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"_locked","type":"bool"}],"name":"setLocked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50604051612c06380380612c068339818101604052604081101561003357600080fd5b508051602090910151600180546001600160a01b0319166001600160a01b039093169290921760ff60a01b1916600160a01b91151591909102179055612b888061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80635855a25a116100715780635855a25a14610132578063a2e74af61461013a578063c9c6539614610160578063cf3090121461018e578063e6a43905146101aa578063f46901ed146101d8576100a9565b8063017e7e58146100ae578063094b7415146100d25780631e3dd18b146100da578063211e28b6146100f7578063574f2ba314610118575b600080fd5b6100b66101fe565b604080516001600160a01b039092168252519081900360200190f35b6100b661020d565b6100b6600480360360208110156100f057600080fd5b503561021c565b6101166004803603602081101561010d57600080fd5b50351515610243565b005b6101206102b4565b60408051918252519081900360200190f35b6101206102ba565b6101166004803603602081101561015057600080fd5b50356001600160a01b031661034d565b6100b66004803603604081101561017657600080fd5b506001600160a01b03813581169160200135166103c2565b6101966106e7565b604080519115158252519081900360200190f35b6100b6600480360360408110156101c057600080fd5b506001600160a01b03813581169160200135166106f7565b610116600480360360208110156101ee57600080fd5b50356001600160a01b031661071d565b6000546001600160a01b031681565b6001546001600160a01b031681565b6003818154811061022957fe5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b03163314610296576040805162461bcd60e51b815260206004820152601160248201527029b834b934ba1d102327a92124a22222a760791b604482015290519081900360640190fd5b60018054911515600160a01b0260ff60a01b19909216919091179055565b60035490565b6040516102c960208201610792565b6020820181038252601f19601f820116604052506040516020018082805190602001908083835b6020831061030f5780518252601f1990920191602091820191016102f0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012081565b6001546001600160a01b031633146103a0576040805162461bcd60e51b815260206004820152601160248201527029b834b934ba1d102327a92124a22222a760791b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b0316141561042b576040805162461bcd60e51b815260206004820152601b60248201527f5370697269743a204944454e544943414c5f4144445245535345530000000000604482015290519081900360640190fd5b600080836001600160a01b0316856001600160a01b03161061044e578385610451565b84845b90925090506001600160a01b0382166104a8576040805162461bcd60e51b81526020600482015260146024820152735370697269743a205a45524f5f4144445245535360601b604482015290519081900360640190fd5b6001600160a01b03828116600090815260026020908152604080832085851684529091529020541615610518576040805162461bcd60e51b81526020600482015260136024820152725370697269743a20504149525f45584953545360681b604482015290519081900360640190fd5b60606040518060200161052a90610792565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f56040805163485cc95560e01b81526001600160a01b038781166004830152868116602483015291519297509087169163485cc9559160448082019260009290919082900301818387803b1580156105fd57600080fd5b505af1158015610611573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526002602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560038054600181018255958190527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b600154600160a01b900460ff1681565b60026020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b03163314610770576040805162461bcd60e51b815260206004820152601160248201527029b834b934ba1d102327a92124a22222a760791b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6123b4806107a08339019056fe60806040526001600c5534801561001557600080fd5b5060405146908060526123628239604080519182900360520182208282018252600a835269537069726974204c507360b01b6020938401528151808301835260018152603160f81b908401528151808401919091527f12dc4b9d23cac02671870eb5c48f2276ff76c2eecd5057842d000e7dd01f04e6818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b0319163317905561225d806101056000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610b0e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b34565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b5e565b604080519115158252519081900360200190f35b610339610b75565b604080516001600160a01b039092168252519081900360200190f35b61035d610b84565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b8a565b61035d610c24565b6103b5610c48565b6040805160ff9092168252519081900360200190f35b61035d610c4d565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c53565b61035d610cd5565b61035d610cdb565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610ce1565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610fdf565b61035d610ff1565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316610ff7565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611009565b6040805192835260208301919091528051918290030190f35b6102446113ad565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356113d2565b61035d6113df565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166113e5565b61033961154e565b61033961155d565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561156c565b61035d600480360360408110156105a357600080fd5b506001600160a01b038135811691602001351661176c565b61023a611789565b600c5460011461060c576040805162461bcd60e51b815260206004820152600f60248201526e14185b98d85ad94e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c558415158061061f5750600084115b61065a5760405162461bcd60e51b81526004018080602001828103825260238152602001806121e06023913960400191505060405180910390fd5b600080610665610b34565b5091509150816001600160701b03168710801561068a5750806001600160701b031686105b6106db576040805162461bcd60e51b815260206004820152601f60248201527f50616e63616b653a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107195750806001600160a01b0316896001600160a01b031614155b610760576040805162461bcd60e51b815260206004820152601360248201527250616e63616b653a20494e56414c49445f544f60681b604482015290519081900360640190fd5b8a1561077157610771828a8d6118e9565b891561078257610782818a8c6118e9565b861561083d57886001600160a01b03166384800812338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088357600080fd5b505afa158015610897573d6000803e3d6000fd5b505050506040513d60208110156108ad57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108f957600080fd5b505afa15801561090d573d6000803e3d6000fd5b505050506040513d602081101561092357600080fd5b5051925060009150506001600160701b0385168a90038311610946576000610955565b89856001600160701b03160383035b9050600089856001600160701b0316038311610972576000610981565b89856001600160701b03160383035b905060008211806109925750600081115b6109cd5760405162461bcd60e51b81526004018080602001828103825260228152602001806121986022913960400191505060405180910390fd5b6000610a016109e384600363ffffffff611a8316565b6109f5876103e863ffffffff611a8316565b9063ffffffff611ae616565b90506000610a196109e384600363ffffffff611a8316565b9050610a4a620f4240610a3e6001600160701b038b8116908b1663ffffffff611a8316565b9063ffffffff611a8316565b610a5a838363ffffffff611a8316565b1015610a9a576040805162461bcd60e51b815260206004820152600a60248201526950616e63616b653a204b60b01b604482015290519081900360640190fd5b5050610aa884848888611b36565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600a815260200169537069726974204c507360b01b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b6b338484611cf9565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c0f576001600160a01b0384166000908152600260209081526040808320338452909152902054610bea908363ffffffff611ae616565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c1a848484611d5b565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610ca7576040805162461bcd60e51b81526020600482015260126024820152712830b731b0b5b29d102327a92124a22222a760711b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d2c576040805162461bcd60e51b815260206004820152600f60248201526e14185b98d85ad94e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580610d3c610b34565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d9057600080fd5b505afa158015610da4573d6000803e3d6000fd5b505050506040513d6020811015610dba57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e0d57600080fd5b505afa158015610e21573d6000803e3d6000fd5b505050506040513d6020811015610e3757600080fd5b505190506000610e56836001600160701b03871663ffffffff611ae616565b90506000610e73836001600160701b03871663ffffffff611ae616565b90506000610e818787611e15565b60005490915080610ebe57610eaa6103e86109f5610ea5878763ffffffff611a8316565b611f73565b9850610eb960006103e8611fc5565b610f0d565b610f0a6001600160701b038916610edb868463ffffffff611a8316565b81610ee257fe5b046001600160701b038916610efd868563ffffffff611a8316565b81610f0457fe5b0461205b565b98505b60008911610f4c5760405162461bcd60e51b81526004018080602001828103825260268152602001806122036026913960400191505060405180910390fd5b610f568a8a611fc5565b610f6286868a8a611b36565b8115610f9257600854610f8e906001600160701b0380821691600160701b90041663ffffffff611a8316565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611055576040805162461bcd60e51b815260206004820152600f60248201526e14185b98d85ad94e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580611065610b34565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156110c157600080fd5b505afa1580156110d5573d6000803e3d6000fd5b505050506040513d60208110156110eb57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561113957600080fd5b505afa15801561114d573d6000803e3d6000fd5b505050506040513d602081101561116357600080fd5b5051306000908152600160205260408120549192506111828888611e15565b60005490915080611199848763ffffffff611a8316565b816111a057fe5b049a50806111b4848663ffffffff611a8316565b816111bb57fe5b04995060008b1180156111ce575060008a115b6112095760405162461bcd60e51b81526004018080602001828103825260268152602001806121ba6026913960400191505060405180910390fd5b6112133084612073565b61121e878d8d6118e9565b611229868d8c6118e9565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561126f57600080fd5b505afa158015611283573d6000803e3d6000fd5b505050506040513d602081101561129957600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156112e557600080fd5b505afa1580156112f9573d6000803e3d6000fd5b505050506040513d602081101561130f57600080fd5b5051935061131f85858b8b611b36565b811561134f5760085461134b906001600160701b0380821691600160701b90041663ffffffff611a8316565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600981526020016805350495249542d4c560bc1b81525081565b6000610b6b338484611d5b565b6103e881565b600c5460011461142e576040805162461bcd60e51b815260206004820152600f60248201526e14185b98d85ad94e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114dd92859287926114d8926001600160701b03169185916370a0823191602480820192602092909190829003018186803b1580156114a057600080fd5b505afa1580156114b4573d6000803e3d6000fd5b505050506040513d60208110156114ca57600080fd5b50519063ffffffff611ae616565b6118e9565b600854604080516370a0823160e01b8152306004820152905161154492849287926114d892600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b1580156114a057600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156115b4576040805162461bcd60e51b815260206004820152601060248201526f14185b98d85ad94e881156141254915160821b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156116cf573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117055750886001600160a01b0316816001600160a01b0316145b611756576040805162461bcd60e51b815260206004820152601a60248201527f50616e63616b653a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b611761898989611cf9565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146117d2576040805162461bcd60e51b815260206004820152600f60248201526e14185b98d85ad94e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516118e2926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561182357600080fd5b505afa158015611837573d6000803e3d6000fd5b505050506040513d602081101561184d57600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561189a57600080fd5b505afa1580156118ae573d6000803e3d6000fd5b505050506040513d60208110156118c457600080fd5b50516008546001600160701b0380821691600160701b900416611b36565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b602083106119965780518252601f199092019160209182019101611977565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119f8576040519150601f19603f3d011682016040523d82523d6000602084013e6119fd565b606091505b5091509150818015611a2b575080511580611a2b5750808060200190516020811015611a2857600080fd5b50515b611a7c576040805162461bcd60e51b815260206004820152601860248201527f50616e63616b653a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611a9e57505080820282828281611a9b57fe5b04145b610b6f576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b6f576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611b5457506001600160701b038311155b611b99576040805162461bcd60e51b815260206004820152601160248201527050616e63616b653a204f564552464c4f5760781b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611bc957506001600160701b03841615155b8015611bdd57506001600160701b03831615155b15611c4e578063ffffffff16611c0b85611bf686612111565b6001600160e01b03169063ffffffff61212316565b600980546001600160e01b03929092169290920201905563ffffffff8116611c3684611bf687612111565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d84908263ffffffff611ae616565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611db9908263ffffffff61214816565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611e6657600080fd5b505afa158015611e7a573d6000803e3d6000fd5b505050506040513d6020811015611e9057600080fd5b5051600b546001600160a01b038216158015945091925090611f5f578015611f5a576000611ed3610ea56001600160701b0388811690881663ffffffff611a8316565b90506000611ee083611f73565b905080821115611f57576000611f0e611eff848463ffffffff611ae616565b6000549063ffffffff611a8316565b90506000611f3383611f2786600563ffffffff611a8316565b9063ffffffff61214816565b90506000818381611f4057fe5b0490508015611f5357611f538782611fc5565b5050505b50505b611f6b565b8015611f6b576000600b555b505092915050565b60006003821115611fb6575080600160028204015b81811015611fb057809150600281828581611f9f57fe5b040181611fa857fe5b049050611f88565b50611fc0565b8115611fc0575060015b919050565b600054611fd8908263ffffffff61214816565b60009081556001600160a01b038316815260016020526040902054612003908263ffffffff61214816565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061206a578161206c565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461209c908263ffffffff611ae616565b6001600160a01b038316600090815260016020526040812091909155546120c9908263ffffffff611ae616565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161214057fe5b049392505050565b80820182811015610b6f576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe50616e63616b653a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b653a20494e53554646494349454e545f4c49515549444954595f4255524e454450616e63616b653a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b653a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a72315820205942e5fc0d6fa8a2d4b43ceac04d52e3229319213f78166c4992900ba1770564736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a265627a7a72315820fd9916c9f3a5bac9fc3a9fb92613c3d0cddd123d44a41e484aee1ef85425aadd64736f6c63430005100032000000000000000000000000635be83d56fe9b6a9f9a232f8d051eff9a415f130000000000000000000000000000000000000000000000000000000000000001

Deployed ByteCode Sourcemap

20174:2114:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20174:2114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20337:20;;;:::i;:::-;;;;-1:-1:-1;;;;;20337:20:0;;;;;;;;;;;;;;20364:26;;;:::i;20493:25::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20493:25:0;;:::i;22142:143::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22142:143:0;;;;:::i;:::-;;20756:96;;;:::i;:::-;;;;;;;;;;;;;;;;20223:105;;;:::i;21968:166::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21968:166:0;-1:-1:-1;;;;;21968:166:0;;:::i;20860:950::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20860:950:0;;;;;;;;;;:::i;20397:18::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;20424:62;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20424:62:0;;;;;;;;;;:::i;21818:142::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21818:142:0;-1:-1:-1;;;;;21818:142:0;;:::i;20337:20::-;;;-1:-1:-1;;;;;20337:20:0;;:::o;20364:26::-;;;-1:-1:-1;;;;;20364:26:0;;:::o;20493:25::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20493:25:0;;-1:-1:-1;20493:25:0;:::o;22142:143::-;22217:11;;-1:-1:-1;;;;;22217:11:0;22203:10;:25;22195:55;;;;;-1:-1:-1;;;22195:55:0;;;;;;;;;;;;-1:-1:-1;;;22195:55:0;;;;;;;;;;;;;;;22261:6;:16;;;;;-1:-1:-1;;;22261:16:0;-1:-1:-1;;;;22261:16:0;;;;;;;;;22142:143::o;20756:96::-;20829:8;:15;20756:96;:::o;20223:105::-;20296:30;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;20296:30:0;20279:48;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;20279:48:0;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;20279:48:0;;;20269:59;;;;;;20223:105;:::o;21968:166::-;22056:11;;-1:-1:-1;;;;;22056:11:0;22042:10;:25;22034:55;;;;;-1:-1:-1;;;22034:55:0;;;;;;;;;;;;-1:-1:-1;;;22034:55:0;;;;;;;;;;;;;;;22100:11;:26;;-1:-1:-1;;;;;;22100:26:0;-1:-1:-1;;;;;22100:26:0;;;;;;;;;;21968:166::o;20860:950::-;20930:12;20973:6;-1:-1:-1;;;;;20963:16:0;:6;-1:-1:-1;;;;;20963:16:0;;;20955:56;;;;;-1:-1:-1;;;20955:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21023:14;21039;21066:6;-1:-1:-1;;;;;21057:15:0;:6;-1:-1:-1;;;;;21057:15:0;;:53;;21095:6;21103;21057:53;;;21076:6;21084;21057:53;21022:88;;-1:-1:-1;21022:88:0;-1:-1:-1;;;;;;21129:20:0;;21121:53;;;;;-1:-1:-1;;;21121:53:0;;;;;;;;;;;;-1:-1:-1;;;21121:53:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21193:15:0;;;21228:1;21193:15;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:37;21185:69;;;;;-1:-1:-1;;;21185:69:0;;;;;;;;;;;;-1:-1:-1;;;21185:69:0;;;;;;;;;;;;;;;21295:21;21319:30;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;21319:30:0;21295:54;;21360:12;21402:6;21410;21385:32;;;;;;-1:-1:-1;;;;;21385:32:0;-1:-1:-1;;;;;21385:32:0;;;;;;;;-1:-1:-1;;;;;21385:32:0;-1:-1:-1;;;;;21385:32:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;21385:32:0;;;21375:43;;;;;;21360:58;;21508:4;21497:8;21491:15;21486:2;21476:8;21472:17;21469:1;21461:52;21534:45;;;-1:-1:-1;;;21534:45:0;;-1:-1:-1;;;;;21534:45:0;;;;;;;;;;;;;;;;21453:60;;-1:-1:-1;21534:29:0;;;;;;:45;;;;;-1:-1:-1;;21534:45:0;;;;;;;;-1:-1:-1;21534:29:0;:45;;;5:2:-1;;;;30:1;27;20:12;5:2;21534:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;;;;;;;;21590:15:0;;;;;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:30;;;;;-1:-1:-1;;;;;;21590:30:0;;;;;;;;21631:15;;;;;;:23;;;;;;;;:30;;;;;;;;21717:8;27:10:-1;;-1:-1;23:18;;45:23;;21717:19:0;;;;;;;;;;;;;;;;;;21786:15;;21752:50;;;;;;;;;;;;;;;;;;;;;;20860:950;;;;;;;;:::o;20397:18::-;;;-1:-1:-1;;;20397:18:0;;;;;:::o;20424:62::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20424:62:0;;:::o;21818:142::-;21894:11;;-1:-1:-1;;;;;21894:11:0;21880:10;:25;21872:55;;;;;-1:-1:-1;;;21872:55:0;;;;;;;;;;;;-1:-1:-1;;;21872:55:0;;;;;;;;;;;;;;;21938:5;:14;;-1:-1:-1;;;;;;21938:14:0;-1:-1:-1;;;;;21938:14:0;;;;;;;;;;21818:142::o;20174:2114::-;;;;;;;;:::o

Swarm Source

bzzr://fd9916c9f3a5bac9fc3a9fb92613c3d0cddd123d44a41e484aee1ef85425aadd
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.