Contract 0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x096864cbbdb9fcddfd84fe177882bf562ca1d14cb851291b7cf1fc964a5fd4deApprove129927962021-11-27 8:58:436 hrs ago0xc084c7d9866067fc2d2eb1851fb2a971840fb408 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0x50ba017dd412947d8d6142db7f80c5b8b950d5293007d8e145882364bb30852aApprove129878622021-11-27 4:29:5510 hrs 29 mins ago0xb99b6782bcfd9e79f906f1e163a78955ea5b3c42 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.0045244
0xdad98785a3f9c8b75ee441e48d64cda85fd1eeefb2811af933b6cd52837ceeebApprove129805832021-11-26 21:59:2816 hrs 59 mins ago0xd0104e066f037664b9922024839c0276607aa18a IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0xd990da9b2123ef61319d5afb2e6614bf69729429de85be5e007ce982e11e16c7Approve129595322021-11-26 2:22:361 day 12 hrs ago0xa62dc929bb8c3d7a79c252dd51fedb2c92bcbb28 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0x0b5da530186dcb9dfbb422110db2cdabce927157e20e5dac44b97ad86a1bdb58Approve129549522021-11-25 21:53:251 day 17 hrs ago0xfbb8e1f12c54343a165dec557bfc53aa4e83e5af IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0x6c40d9ca8a7ea15c3f2ef5f3ac3687cb5e09246c4471d70cf2419ea4be37b85dApprove129470482021-11-25 14:48:492 days 10 mins ago0xa25ba7b19fd745024f55919ace172a160460fd98 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00007465
0x4b7c857f59f7fa7a229c21c8ee295880b9cc46712ccf29409a960e3ecaaf1787Approve129355932021-11-25 4:30:092 days 10 hrs ago0x6c68f81e62d30895388d2ef399c42afaf5cb0fb5 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00010451
0x13e3869530613c8f69fba10abb8ded5fd7d50a287f50e0ed466821e302c0bf1cApprove129355912021-11-25 4:30:032 days 10 hrs ago0x6c68f81e62d30895388d2ef399c42afaf5cb0fb5 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00010451
0x19224ef437ee0310f9bb10e96ca1fc48737bc3612f52d2a157284861f842abd4Approve129355882021-11-25 4:29:542 days 10 hrs ago0x6c68f81e62d30895388d2ef399c42afaf5cb0fb5 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00010451
0xf9207e374514e1bf9d35a12e0d36d5349b63623cabb1d5b6d8c4cad4f47c1094Approve129277202021-11-24 21:26:562 days 17 hrs ago0x7d9a02a6919c0fc50e90dfd060316a00fbfe0275 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00007465
0x849fb219c0a03d20b154b0675cf2d4c2a33cd2687a06b0f4ca1b5c552d0249d6Approve129277102021-11-24 21:26:202 days 17 hrs ago0x7d9a02a6919c0fc50e90dfd060316a00fbfe0275 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00007465
0x99af88889cd83a123ab4c9afc67a23f24e0be5adda13a5b2cf142ccb20a150beApprove129226962021-11-24 17:04:342 days 21 hrs ago0x9ee1f899a3b79b369127f9a0d7870971988185f5 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00007465
0xc25b90fdef06000e7f9fdfc5a5674bd5b606ceb28195924419d2139d1b3d991cApprove129206392021-11-24 15:16:392 days 23 hrs ago0x9c44d0697eccb6e91760e4e4f7a15768264fd92f IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0x0959b2b27fff829262ba648deff296d29b024a7cb87c0265854f45f200b13a91Approve129028492021-11-23 23:50:063 days 15 hrs ago0xc332049fd192e9b225f8b7f2bc31930be6398492 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0x257f658bf827969cfc177b4e67ada79939f26c22fa85932a30b76015be9dc82eApprove129021082021-11-23 23:12:123 days 15 hrs ago0x71a4d7e033346ec5cc8db78df411daeef0524b8d IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0x9ca7df2f20338a2674e019b624e0e3666d1c6b2b74559c7b151e75f69305091eApprove129009732021-11-23 22:15:233 days 16 hrs ago0xc8087b45618bb6b576cef8ac314fae532c01bb1e IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0xc99f1dbbf358615c9745104b1745ff33c17287358acba670b2982f30c79b4c27Approve128439142021-11-21 21:05:015 days 17 hrs ago0x28643aa58454f2f38acbd726cc84d8e9c26d4ae9 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0xd5e62529d9de166e6197bc7da32c8bbb2aaa8a3b39c3822755b4a3bd2da30f12Approve128333282021-11-21 11:56:246 days 3 hrs ago0x9c44d0697eccb6e91760e4e4f7a15768264fd92f IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0x4950d46946c0d4de78db95674daceee6a763c88b28743be0a4712f8bf6b8356eApprove128228632021-11-21 3:04:236 days 11 hrs ago0x9384d10eeb7d671e652212994394b031b0c49d20 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0x37615ae4ff6627a6513734ee2c6f31a755e051dc3991d5c066acd8bc07c9cd0cApprove128177812021-11-20 22:48:506 days 16 hrs ago0x9125a571aeaa7dc5cc358f5a3afbb4c76ef69889 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0x3cc082a490f5b1ab68a0ce6af81613a9d74ef8f259d4653b86768f6672560044Approve128114282021-11-20 17:25:476 days 21 hrs ago0x1edc57432f17b5e307cc49bacaf430ba0ccdb168 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0xb9d218a09b89af801f65296813596a843b475b7a1b4df8f33b8a985054ccd5c1Approve128032212021-11-20 10:12:597 days 4 hrs ago0xe04d890c485c73884fdc5ef3b2fbc9ca56808fe9 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0xe3443a1860c0ea400983ee6ba6d33140f751c9aea88a729a1826bc8869c8af46Approve127795392021-11-19 13:24:238 days 1 hr ago0x7864290613ceec1fa80ce37e1f4d4bd6d256b0a5 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0x4e637ebeed2e038da07ca8cc3571b2c8e9fce2dea36ca12f5645c07d7d959d4bApprove127679982021-11-19 3:29:578 days 11 hrs ago0x4e89fcc28400b1aae16843f234676a5a3ad4cf45 IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
0xc1b11c600088c8aa6fb422754dfba5e78b263edea6c010bdb079c9be442eb636Approve127651582021-11-19 1:04:378 days 13 hrs ago0x04858539bac769e004171db5b0f24d60df6cd91b IN  0xbd28311f4aaf9bdcfb02554c8ed26e5dbe13884e0 BNB0.00022622
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xe171420175db64bb88fd3bf95f25578c8a1e4ef78998d11ee29cd87efc75f570100039472021-08-13 21:29:10105 days 17 hrs ago 0x12c2b0a1c9c786bf7ad0e92ce3f2d1805874e185  Contract Creation0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ViralataPair

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 BscScan.com on 2021-08-17
*/

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

// File contracts/uniswapv2/libraries/SafeMath.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 SafeMathViralata {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

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

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


// File contracts/uniswapv2/ViralataERC20.sol


pragma solidity =0.6.12;

contract ViralataERC20 {
    using SafeMathViralata for uint;

    string public constant name = 'ViralataSwap LP Token';
    string public constant symbol = 'VLP';
    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;

    address private _trustedForwarder; // remember to change before deploying

    // Control support for EIP-2771 Meta Transactions
    bool public metaTxnsEnabled = false;

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

    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 isTrustedForwarder(address forwarder) public view returns (bool) {
        return metaTxnsEnabled && forwarder == _trustedForwarder;
    }

    function _msgSender() internal view returns (address sender) {
        if (isTrustedForwarder(msg.sender)) {
            // The assembly code is more direct than the Solidity version using `abi.decode`.
            assembly {
                sender := shr(96, calldataload(sub(calldatasize(), 20)))
            }
        } else {
            return msg.sender;
        }
    }

    function _msgData() internal view returns (bytes calldata) {
        if (isTrustedForwarder(msg.sender)) {
            return msg.data[:msg.data.length - 20];
        } else {
            return msg.data;
        }
    }

    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(_msgSender(), spender, value);
        return true;
    }

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

    function transferFrom(address from, address to, uint value) external returns (bool) {
        if (allowance[from][_msgSender()] != uint(-1)) {
            allowance[from][_msgSender()] = allowance[from][_msgSender()].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, 'ViralataSwap: 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, 'ViralataSwap: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}


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


pragma solidity =0.6.12;

// a library for performing various math operations

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

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


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


pragma solidity =0.6.12;

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

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

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

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

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


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


pragma solidity >=0.5.0;

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

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

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


// File contracts/uniswapv2/interfaces/IViralataFactory.sol


pragma solidity >=0.5.0;

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

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

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

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

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


// File contracts/uniswapv2/interfaces/IViralataCallee.sol


pragma solidity >=0.5.0;

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


// File contracts/uniswapv2/ViralataPair.sol


pragma solidity =0.6.12;






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

contract ViralataPair is ViralataERC20 {
    using SafeMathViralata 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

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

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, 'ViralataSwap: 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))), 'ViralataSwap: 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, 'ViralataSwap: 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), 'ViralataSwap: 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 = IViralataFactory(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));
                    // multiply by 0 in denominator to capture all fees
                    // mul operation is kept for consistency with legacy code
                    uint denominator = rootK.mul(0).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 = IERC20Viralata(token0).balanceOf(address(this));
        uint balance1 = IERC20Viralata(token1).balanceOf(address(this));
        uint amount0 = balance0.sub(_reserve0);
        uint amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            address migrator = IViralataFactory(factory).migrator();
            if (_msgSender() == migrator) {
                liquidity = IMigrator(migrator).desiredLiquidity();
                require(liquidity > 0 && liquidity != uint256(-1), "Bad desired liquidity");
            } else {
                require(migrator == address(0), "Must not have migrator");
                liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
                _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
            }
        } else {
            liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
        }
        require(liquidity > 0, 'ViralataSwap: 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(_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 (uint amount0, uint amount1) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        address _token0 = token0;                                // gas savings
        address _token1 = token1;                                // gas savings
        uint balance0 = IERC20Viralata(_token0).balanceOf(address(this));
        uint balance1 = IERC20Viralata(_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, 'ViralataSwap: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20Viralata(_token0).balanceOf(address(this));
        balance1 = IERC20Viralata(_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(_msgSender(), 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, 'ViralataSwap: INSUFFICIENT_OUTPUT_AMOUNT');
        SwapVariables memory vars = SwapVariables(0, 0, 0, 0, 0, 0, 0);
        (vars._reserve0, vars._reserve1,) = getReserves(); // gas savings
        require(amount0Out < vars._reserve0 && amount1Out < vars._reserve1, 'ViralataSwap: INSUFFICIENT_LIQUIDITY');

        vars.fee = 25;

        address auro = IViralataFactory(factory).auro();
        { // scope for _token{0,1}, avoids stack too deep errors
            address _token0 = token0;
            address _token1 = token1;
            require(to != _token0 && to != _token1, 'ViralataSwap: 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) IViralataCallee(to).uniswapV2Call(_msgSender(), amount0Out, amount1Out, data);
            if (_token0 == auro || _token1 == auro) vars.fee = 50; // increase fee for AURO
            vars.balance0 = IERC20Viralata(_token0).balanceOf(address(this));
            vars.balance1 = IERC20Viralata(_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, 'ViralataSwap: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
            uint balance0Adjusted = vars.balance0.mul(10000).sub(vars.amount0In.mul(vars.fee));
            uint balance1Adjusted = vars.balance1.mul(10000).sub(vars.amount1In.mul(vars.fee));
            require(balance0Adjusted.mul(balance1Adjusted) >= uint(vars._reserve0).mul(vars._reserve1).mul(10000**2), 'ViralataSwap: 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, IERC20Viralata(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20Viralata(_token1).balanceOf(address(this)).sub(reserve1));
    }

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

    function disableMetaTxns() external {
        require(_msgSender() == factory, 'ViralataSwap: FORBIDDEN');
        require(metaTxnsEnabled, "ViralataSwap: META_TXNS_ALREADY_DISABLED");

        metaTxnsEnabled = false;

        emit MetaTxnsDisabled(_msgSender());
    }

    function enableMetaTxns() external {
        require(_msgSender() == factory, 'ViralataSwap: FORBIDDEN');
        require(!metaTxnsEnabled, "ViralataSwap: META_TXNS_ALREADY_ENABLED");

        metaTxnsEnabled = true;

        emit MetaTxnsEnabled(_msgSender());
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"MetaTxnsDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"}],"name":"MetaTxnsEnabled","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":"disableMetaTxns","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableMetaTxns","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"forwarder","type":"address"}],"name":"isTrustedForwarder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metaTxnsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"}]

60806040526005805460ff60a01b191690556001600d5534801561002257600080fd5b50604080518082018252601581527f566972616c61746153776170204c5020546f6b656e00000000000000000000006020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f74395e1e6331e722a2daafb6a053df80b7ff71036f1a18db088bab1d965fe5db818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600680546001600160a01b031916331790556135da806101286000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80635a3d54931161010f578063a9059cbb116100a2578063d21220a711610071578063d21220a714610651578063d505accf14610659578063dd62ed3e146106b7578063fff6cae9146106f2576101e5565b8063a9059cbb146105d5578063ba9a7a561461060e578063bc25cf7714610616578063c45a015514610649576101e5565b80637ecebe00116100de5780637ecebe001461054657806389afcb441461057957806395d89b41146105c5578063a8c95dc0146105cd576101e5565b80635a3d5493146104d05780636a627842146104d857806370a082311461050b5780637464fc3d1461053e576101e5565b806323b872dd11610187578063485cc95511610156578063485cc95514610452578063572b6c051461048d578063578bb42d146104c05780635909c0d5146104c8576101e5565b806323b872dd146103e157806330adf81f14610424578063313ce5671461042c5780633644e5151461044a576101e5565b80630902f1ac116101c35780630902f1ac1461030a578063095ea7b3146103495780630dfe16811461039657806318160ddd146103c7576101e5565b8063022c0d9f146101ea57806306fdde03146102855780630838364014610302575b600080fd5b6102836004803603608081101561020057600080fd5b81359160208101359173ffffffffffffffffffffffffffffffffffffffff604083013516919081019060808101606082013564010000000081111561024457600080fd5b82018360208201111561025657600080fd5b8035906020019184600183028401116401000000008311171561027857600080fd5b5090925090506106fa565b005b61028d610fca565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102c75781810151838201526020016102af565b50505050905090810190601f1680156102f45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610283611003565b61031261118d565b604080516dffffffffffffffffffffffffffff948516815292909316602083015263ffffffff168183015290519081900360600190f35b6103826004803603604081101561035f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356111e2565b604080519115158252519081900360200190f35b61039e611200565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103cf61121c565b60408051918252519081900360200190f35b610382600480360360608110156103f757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611222565b6103cf61137e565b6104346113a2565b6040805160ff9092168252519081900360200190f35b6103cf6113a7565b6102836004803603604081101561046857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166113ad565b610382600480360360208110156104a357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611486565b6102836114d5565b6103cf611677565b6103cf61167d565b6103cf600480360360208110156104ee57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611683565b6103cf6004803603602081101561052157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611ca7565b6103cf611cb9565b6103cf6004803603602081101561055c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611cbf565b6105ac6004803603602081101561058f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611cd1565b6040805192835260208301919091528051918290030190f35b61028d61217b565b6103826121b4565b610382600480360360408110156105eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356121d5565b6103cf6121e9565b6102836004803603602081101561062c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166121ef565b61039e6123dc565b61039e6123f8565b610283600480360360e081101561066f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135612414565b6103cf600480360360408110156106cd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166126e0565b6102836126fd565b600d5460011461076b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f566972616c617461537761703a204c4f434b4544000000000000000000000000604482015290519081900360640190fd5b6000600d558415158061077e5750600084115b6107d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806135076028913960400191505060405180910390fd5b6107db61342f565b6040518060e0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815250905061083f61118d565b506dffffffffffffffffffffffffffff9081166020840152168082528610801561087c575080602001516dffffffffffffffffffffffffffff1685105b6108d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806135816024913960400191505060405180910390fd5b601960c0820152600654604080517f21dd70e6000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916321dd70e6916004808301926020929190829003018186803b15801561094357600080fd5b505afa158015610957573d6000803e3d6000fd5b505050506040513d602081101561096d57600080fd5b505160075460085491925073ffffffffffffffffffffffffffffffffffffffff90811691811690871682148015906109d157508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b610a3c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f566972616c617461537761703a20494e56414c49445f544f0000000000000000604482015290519081900360640190fd5b8815610a4d57610a4d82888b6128e3565b8715610a5e57610a5e81888a6128e3565b8415610b31578673ffffffffffffffffffffffffffffffffffffffff166310d1e85c610a88612af0565b8b8b8a8a6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610b1857600080fd5b505af1158015610b2c573d6000803e3d6000fd5b505050505b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610b9657508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610ba357603260c08501525b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b158015610c0f57600080fd5b505afa158015610c23573d6000803e3d6000fd5b505050506040513d6020811015610c3957600080fd5b505160408086019190915280517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8316916370a08231916024808301926020929190829003018186803b158015610cae57600080fd5b505afa158015610cc2573d6000803e3d6000fd5b505050506040513d6020811015610cd857600080fd5b505160608501525050815160408301516dffffffffffffffffffffffffffff90911688900310610d09576000610d27565b8682600001516dffffffffffffffffffffffffffff16038260400151035b8260800181815250508582602001516dffffffffffffffffffffffffffff1603826060015111610d58576000610d76565b8582602001516dffffffffffffffffffffffffffff16038260600151035b60a08301526080820151151580610d91575060008260a00151115b610de6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061355a6027913960400191505060405180910390fd5b6000610e1d610e068460c001518560800151612b3390919063ffffffff16565b6040850151610e1790612710612b33565b90612bb9565b90506000610e50610e3f8560c001518660a00151612b3390919063ffffffff16565b6060860151610e1790612710612b33565b9050610e9b6305f5e100610e9586602001516dffffffffffffffffffffffffffff1687600001516dffffffffffffffffffffffffffff16612b3390919063ffffffff16565b90612b33565b610ea58383612b33565b1015610f1257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f566972616c617461537761703a204b0000000000000000000000000000000000604482015290519081900360640190fd5b5050610f308260400151836060015184600001518560200151612c2b565b8473ffffffffffffffffffffffffffffffffffffffff16610f4f612af0565b73ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82284608001518560a001518b8b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a350506001600d555050505050565b6040518060400160405280601581526020017f566972616c61746153776170204c5020546f6b656e000000000000000000000081525081565b60065473ffffffffffffffffffffffffffffffffffffffff16611024612af0565b73ffffffffffffffffffffffffffffffffffffffff16146110a657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f566972616c617461537761703a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b60055474010000000000000000000000000000000000000000900460ff16611119576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602881526020018061348d6028913960400191505060405180910390fd5b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055611149612af0565b73ffffffffffffffffffffffffffffffffffffffff167f096be170ccc67847e55535e7d8334b2afedd95805baedc160005addb9144745060405160405180910390a2565b6009546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b60006111f66111ef612af0565b8484612ee1565b5060015b92915050565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602052604081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9082611272612af0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113695773ffffffffffffffffffffffffffffffffffffffff84166000908152600260205260408120611313918491906112e6612af0565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205490612bb9565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260026020526040812090611341612af0565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020555b611374848484612f50565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b60065473ffffffffffffffffffffffffffffffffffffffff16331461143357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f566972616c617461537761703a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b6007805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560088054929093169116179055565b60055460009074010000000000000000000000000000000000000000900460ff1680156114cd575060055473ffffffffffffffffffffffffffffffffffffffff8381169116145b90505b919050565b60065473ffffffffffffffffffffffffffffffffffffffff166114f6612af0565b73ffffffffffffffffffffffffffffffffffffffff161461157857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f566972616c617461537761703a20464f5242494444454e000000000000000000604482015290519081900360640190fd5b60055474010000000000000000000000000000000000000000900460ff16156115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806134b56027913960400191505060405180910390fd5b600580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055611633612af0565b73ffffffffffffffffffffffffffffffffffffffff167f92e4c08d47b71e8dc051232b8e475ec296489a67a4ba5cca88ff20fb6ac499e660405160405180910390a2565b600a5481565b600b5481565b6000600d546001146116f657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f566972616c617461537761703a204c4f434b4544000000000000000000000000604482015290519081900360640190fd5b6000600d8190558061170661118d565b50600754604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905193955091935060009273ffffffffffffffffffffffffffffffffffffffff909116916370a08231916024808301926020929190829003018186803b15801561178057600080fd5b505afa158015611794573d6000803e3d6000fd5b505050506040513d60208110156117aa57600080fd5b5051600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905192935060009273ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561182357600080fd5b505afa158015611837573d6000803e3d6000fd5b505050506040513d602081101561184d57600080fd5b50519050600061186d836dffffffffffffffffffffffffffff8716612bb9565b9050600061188b836dffffffffffffffffffffffffffff8716612bb9565b905060006118998787613025565b60005490915080611b3b57600654604080517f7cd07e47000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691637cd07e47916004808301926020929190829003018186803b15801561190f57600080fd5b505afa158015611923573d6000803e3d6000fd5b505050506040513d602081101561193957600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff811661195c612af0565b73ffffffffffffffffffffffffffffffffffffffff161415611a8b578073ffffffffffffffffffffffffffffffffffffffff166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b1580156119be57600080fd5b505afa1580156119d2573d6000803e3d6000fd5b505050506040513d60208110156119e857600080fd5b505199508915801590611a1b57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a14155b611a8657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4261642064657369726564206c69717569646974790000000000000000000000604482015290519081900360640190fd5b611b35565b73ffffffffffffffffffffffffffffffffffffffff811615611b0e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d757374206e6f742068617665206d69677261746f7200000000000000000000604482015290519081900360640190fd5b611b266103e8610e17611b218888612b33565b613192565b9950611b3560006103e86131e3565b50611b8c565b611b896dffffffffffffffffffffffffffff8916611b598684612b33565b81611b6057fe5b046dffffffffffffffffffffffffffff8916611b7c8685612b33565b81611b8357fe5b04613287565b98505b60008911611be5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b81526020018061352f602b913960400191505060405180910390fd5b611bef8a8a6131e3565b611bfb86868a8a612c2b565b8115611c3757600954611c33906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612b33565b600c555b611c3f612af0565b73ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f8585604051808381526020018281526020019250505060405180910390a250506001600d5550949695505050505050565b60016020526000908152604090205481565b600c5481565b60046020526000908152604090205481565b600080600d54600114611d4557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f566972616c617461537761703a204c4f434b4544000000000000000000000000604482015290519081900360640190fd5b6000600d81905580611d5561118d565b50600754600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905194965092945073ffffffffffffffffffffffffffffffffffffffff9182169391169160009184916370a08231916024808301926020929190829003018186803b158015611dd757600080fd5b505afa158015611deb573d6000803e3d6000fd5b505050506040513d6020811015611e0157600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191925060009173ffffffffffffffffffffffffffffffffffffffff8516916370a08231916024808301926020929190829003018186803b158015611e7557600080fd5b505afa158015611e89573d6000803e3d6000fd5b505050506040513d6020811015611e9f57600080fd5b505130600090815260016020526040812054919250611ebe8888613025565b60005490915080611ecf8487612b33565b81611ed657fe5b049a5080611ee48486612b33565b81611eeb57fe5b04995060008b118015611efe575060008a115b611f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806134dc602b913960400191505060405180910390fd5b611f5d308461329f565b611f68878d8d6128e3565b611f73868d8c6128e3565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff8916916370a08231916024808301926020929190829003018186803b158015611fdf57600080fd5b505afa158015611ff3573d6000803e3d6000fd5b505050506040513d602081101561200957600080fd5b5051604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905191965073ffffffffffffffffffffffffffffffffffffffff8816916370a0823191602480820192602092909190829003018186803b15801561207b57600080fd5b505afa15801561208f573d6000803e3d6000fd5b505050506040513d60208110156120a557600080fd5b505193506120b585858b8b612c2b565b81156120f1576009546120ed906dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612b33565b600c555b8b73ffffffffffffffffffffffffffffffffffffffff16612110612af0565b73ffffffffffffffffffffffffffffffffffffffff167fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364968d8d604051808381526020018281526020019250505060405180910390a35050505050505050506001600d81905550915091565b6040518060400160405280600381526020017f564c50000000000000000000000000000000000000000000000000000000000081525081565b60055474010000000000000000000000000000000000000000900460ff1681565b60006111f66121e2612af0565b8484612f50565b6103e881565b600d5460011461226057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f566972616c617461537761703a204c4f434b4544000000000000000000000000604482015290519081900360640190fd5b6000600d55600754600854600954604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff94851694909316926123369285928792612331926dffffffffffffffffffffffffffff169185916370a0823191602480820192602092909190829003018186803b1580156122ff57600080fd5b505afa158015612313573d6000803e3d6000fd5b505050506040513d602081101561232957600080fd5b505190612bb9565b6128e3565b6123d281846123316009600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122ff57600080fd5b50506001600d5550565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561248357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f566972616c617461537761703a20455850495245440000000000000000000000604482015290519081900360640190fd5b60035473ffffffffffffffffffffffffffffffffffffffff80891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e0850182528051908301207f19010000000000000000000000000000000000000000000000000000000000006101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e2808201937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081019281900390910190855afa1580156125e4573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061265f57508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6126ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f566972616c617461537761703a20494e56414c49445f5349474e415455524500604482015290519081900360640190fd5b6126d5898989612ee1565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600d5460011461276e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f566972616c617461537761703a204c4f434b4544000000000000000000000000604482015290519081900360640190fd5b6000600d55600754604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290516128dc9273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b1580156127e557600080fd5b505afa1580156127f9573d6000803e3d6000fd5b505050506040513d602081101561280f57600080fd5b5051600854604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b15801561288257600080fd5b505afa158015612896573d6000803e3d6000fd5b505050506040513d60208110156128ac57600080fd5b50516009546dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416612c2b565b6001600d55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001781529251815160009460609489169392918291908083835b602083106129e957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016129ac565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612a4b576040519150601f19603f3d011682016040523d82523d6000602084013e612a50565b606091505b5091509150818015612a7e575080511580612a7e5750808060200190516020811015612a7b57600080fd5b50515b612ae957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f566972616c617461537761703a205452414e534645525f4641494c4544000000604482015290519081900360640190fd5b5050505050565b6000612afb33611486565b15612b2d57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c612b30565b50335b90565b6000811580612b4e57505080820282828281612b4b57fe5b04145b6111fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b808203828111156111fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6dffffffffffffffffffffffffffff8411801590612c5757506dffffffffffffffffffffffffffff8311155b612cc257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f566972616c617461537761703a204f564552464c4f5700000000000000000000604482015290519081900360640190fd5b60095463ffffffff428116917c010000000000000000000000000000000000000000000000000000000090048116820390811615801590612d1257506dffffffffffffffffffffffffffff841615155b8015612d2d57506dffffffffffffffffffffffffffff831615155b15612dd7578063ffffffff16612d6a85612d4686613358565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169061337c565b600a80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff8116612daa84612d4687613358565b600b80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600980547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612f809082612bb9565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612fbc90826133bd565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561309057600080fd5b505afa1580156130a4573d6000803e3d6000fd5b505050506040513d60208110156130ba57600080fd5b5051600c5473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061317e57801561317957600061310b611b216dffffffffffffffffffffffffffff888116908816612b33565b9050600061311883613192565b90508082111561317657600061313a6131318484612bb9565b60005490612b33565b905060006131528361314c8684612b33565b906133bd565b9050600081838161315f57fe5b04905080156131725761317287826131e3565b5050505b50505b61318a565b801561318a576000600c555b505092915050565b600060038211156131d5575080600160028204015b818110156131cf578091506002818285816131be57fe5b0401816131c757fe5b0490506131a7565b506114d0565b81156114d057506001919050565b6000546131f090826133bd565b600090815573ffffffffffffffffffffffffffffffffffffffff831681526001602052604090205461322290826133bd565b73ffffffffffffffffffffffffffffffffffffffff831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106132965781613298565b825b9392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546132cf9082612bb9565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812091909155546133039082612bb9565b600090815560408051838152905173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416816133b557fe5b049392505050565b808201828110156111fa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6040518060e0016040528060006dffffffffffffffffffffffffffff16815260200160006dffffffffffffffffffffffffffff1681526020016000815260200160008152602001600081526020016000815260200160008152509056fe566972616c617461537761703a204d4554415f54584e535f414c52454144595f44495341424c4544566972616c617461537761703a204d4554415f54584e535f414c52454144595f454e41424c4544566972616c617461537761703a20494e53554646494349454e545f4c49515549444954595f4255524e4544566972616c617461537761703a20494e53554646494349454e545f4f55545055545f414d4f554e54566972616c617461537761703a20494e53554646494349454e545f4c49515549444954595f4d494e544544566972616c617461537761703a20494e53554646494349454e545f494e5055545f414d4f554e54566972616c617461537761703a20494e53554646494349454e545f4c4951554944495459a2646970667358221220a13971f0c4146f137c4aafe8f77aa07ab0d7af7f779cbdd631d39fffc259135064736f6c634300060c0033

Deployed ByteCode Sourcemap

9023:11527:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17048:2310;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17048:2310:0;;-1:-1:-1;17048:2310:0;-1:-1:-1;17048:2310:0;:::i;:::-;;898:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19988:277;;;:::i;10246:231::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4024:149;;;;;;;;;;;;;;;;-1:-1:-1;4024:149:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;9322:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1044:24;;;:::i;:::-;;;;;;;;;;;;;;;;4330:307;;;;;;;;;;;;;;;;-1:-1:-1;4330:307:0;;;;;;;;;;;;;;;;;;:::i;1336:108::-;;;:::i;1002:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1193:31;;;:::i;11309:213::-;;;;;;;;;;;;;;;;-1:-1:-1;11309:213:0;;;;;;;;;;;:::i;2409:149::-;;;;;;;;;;;;;;;;-1:-1:-1;2409:149:0;;;;:::i;20273:274::-;;;:::i;9673:32::-;;;:::i;9712:::-;;;:::i;13660:1661::-;;;;;;;;;;;;;;;;-1:-1:-1;13660:1661:0;;;;:::i;1075:41::-;;;;;;;;;;;;;;;;-1:-1:-1;1075:41:0;;;;:::i;9751:17::-;;;:::i;1451:38::-;;;;;;;;;;;;;;;;-1:-1:-1;1451:38:0;;;;:::i;15433:1503::-;;;;;;;;;;;;;;;;-1:-1:-1;15433:1503:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;958:37;;;:::i;1634:35::-;;;:::i;4181:141::-;;;;;;;;;;;;;;;;-1:-1:-1;4181:141:0;;;;;;;;;:::i;9143:46::-;;;:::i;19407:350::-;;;;;;;;;;;;;;;;-1:-1:-1;19407:350:0;;;;:::i;9293:22::-;;;:::i;9350:21::-;;;:::i;4645:680::-;;;;;;;;;;;;;;;;-1:-1:-1;4645:680:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1123:61::-;;;;;;;;;;;;;;;;-1:-1:-1;1123:61:0;;;;;;;;;;;:::i;19806:174::-;;;:::i;17048:2310::-;10134:8;;10146:1;10134:13;10126:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10194:1;10183:8;:12;17162:14;;;;:32:::1;;;17193:1;17180:10;:14;17162:32;17154:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17250:25;;:::i;:::-;17278:34;;;;;;;;17292:1;17278:34;;;;;;17295:1;17278:34;;;;;;17298:1;17278:34;;;;17301:1;17278:34;;;;17304:1;17278:34;;;;17307:1;17278:34;;;;17310:1;17278:34;;::::0;17250:62:::1;;17359:13;:11;:13::i;:::-;-1:-1:-1::0;17323:49:0::1;::::0;;::::1;17340:14;::::0;::::1;17323:49:::0;::::1;::::0;;;17406:27;::::1;:58:::0;::::1;;;;17450:4;:14;;;17437:27;;:10;:27;17406:58;17398:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17529:2;17518:8;::::0;::::1;:13:::0;17576:7:::1;::::0;17559:32:::1;::::0;;;;;;;17544:12:::1;::::0;17576:7:::1;;::::0;17559:30:::1;::::0;:32:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;17576:7;17559:32;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17559:32:0;17690:6:::1;::::0;17729::::1;::::0;17559:32;;-1:-1:-1;17690:6:0::1;::::0;;::::1;::::0;17729;::::1;::::0;17758:13;::::1;::::0;::::1;::::0;::::1;::::0;:30:::1;;;17781:7;17775:13;;:2;:13;;;;17758:30;17750:67;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;17836:14:::0;;17832:58:::1;;17852:38;17866:7;17875:2;17879:10;17852:13;:38::i;:::-;17943:14:::0;;17939:58:::1;;17959:38;17973:7;17982:2;17986:10;17959:13;:38::i;:::-;18050:15:::0;;18046:98:::1;;18083:2;18067:33;;;18101:12;:10;:12::i;:::-;18115:10;18127;18139:4;;18067:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18046:98;18174:4;18163:15;;:7;:15;;;:34;;;;18193:4;18182:15;;:7;:15;;;18163:34;18159:53;;;18210:2;18199:8;::::0;::::1;:13:::0;18159:53:::1;18268:48;::::0;;;;;18310:4:::1;18268:48;::::0;::::1;::::0;;;:33:::1;::::0;::::1;::::0;::::1;::::0;:48;;;;;::::1;::::0;;;;;;;;:33;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18268:48:0;18252:13:::1;::::0;;::::1;:64:::0;;;;18347:48;;;;;18389:4:::1;18347:48;::::0;::::1;::::0;;;:33:::1;::::0;::::1;::::0;::::1;::::0;:48;;;;;18268::::1;::::0;18347;;;;;;;:33;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;18347:48:0;18331:13:::1;::::0;::::1;:64:::0;-1:-1:-1;;18450:14:0;;18434:13:::1;::::0;::::1;::::0;18450:27:::1;::::0;;::::1;::::0;;::::1;-1:-1:-1::0;18434:95:0::1;;18528:1;18434:95;;;18514:10;18497:4;:14;;;:27;;;18480:4;:13;;;:45;18434:95;18417:4;:14;;:112;;;::::0;::::1;18590:10;18573:4;:14;;;:27;;;18557:4;:13;;;:43;:95;;18651:1;18557:95;;;18637:10;18620:4;:14;;;:27;;;18603:4;:13;;;:45;18557:95;18540:14;::::0;::::1;:112:::0;18671:14:::1;::::0;::::1;::::0;:18;;;:40:::1;;;18710:1;18693:4;:14;;;:18;18671:40;18663:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18845:21;18869:58;18898:28;18917:4;:8;;;18898:4;:14;;;:18;;:28;;;;:::i;:::-;18869:13;::::0;::::1;::::0;:24:::1;::::0;18887:5:::1;18869:17;:24::i;:::-;:28:::0;::::1;:58::i;:::-;18845:82;;18942:21;18966:58;18995:28;19014:4;:8;;;18995:4;:14;;;:18;;:28;;;;:::i;:::-;18966:13;::::0;::::1;::::0;:24:::1;::::0;18984:5:::1;18966:17;:24::i;:58::-;18942:82;;19089:54;19134:8;19089:40;19114:4;:14;;;19089:40;;19094:4;:14;;;19089:20;;:24;;:40;;;;:::i;:::-;:44:::0;::::1;:54::i;:::-;19047:38;:16:::0;19068;19047:20:::1;:38::i;:::-;:96;;19039:124;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;10206:1;;19187:69;19195:4;:13;;;19210:4;:13;;;19225:4;:14;;;19241:4;:14;;;19187:7;:69::i;:::-;19347:2;19272:78;;19277:12;:10;:12::i;:::-;19272:78;;;19291:4;:14;;;19307:4;:14;;;19323:10;19335;19272:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;10229:1:0;10218:8;:12;-1:-1:-1;;;;;17048:2310:0:o;898:53::-;;;;;;;;;;;;;;;;;;;:::o;19988:277::-;20059:7;;;;20043:12;:10;:12::i;:::-;:23;;;20035:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20113:15;;;;;;;20105:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20186:15;:23;;;;;;20244:12;:10;:12::i;:::-;20227:30;;;;;;;;;;;;19988:277::o;10246:231::-;10379:8;;;;;;;10410;;;;;;;10451:18;;;;;;10246:231::o;4024:149::-;4088:4;4105:38;4114:12;:10;:12::i;:::-;4128:7;4137:5;4105:8;:38::i;:::-;-1:-1:-1;4161:4:0;4024:149;;;;;:::o;9322:21::-;;;;;;:::o;1044:24::-;;;;:::o;4330:307::-;4429:15;;;4408:4;4429:15;;;:9;:15;;;;;4467:2;;4408:4;4445:12;:10;:12::i;:::-;4429:29;;;;;;;;;;;;;;;;:41;4425:146;;4519:15;;;;;;;:9;:15;;;;;:40;;4553:5;;4519:15;4535:12;:10;:12::i;:::-;4519:29;;;;;;;;;;;;;-1:-1:-1;4519:29:0;;;:33;:40::i;:::-;4487:15;;;;;;;:9;:15;;;;;;4503:12;:10;:12::i;:::-;4487:29;;;;;;;;;;;;;-1:-1:-1;4487:29:0;:72;4425:146;4581:26;4591:4;4597:2;4601:5;4581:9;:26::i;:::-;-1:-1:-1;4625:4:0;4330:307;;;;;:::o;1336:108::-;1378:66;1336:108;:::o;1002:35::-;1035:2;1002:35;:::o;1193:31::-;;;;:::o;11309:213::-;11405:7;;;;11391:10;:21;11383:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11471:6;:16;;;;;;;;;;;;;;11498:6;:16;;;;;;;;;;;11309:213::o;2409:149::-;2501:15;;2477:4;;2501:15;;;;;:49;;;;-1:-1:-1;2533:17:0;;;2520:30;;;2533:17;;2520:30;2501:49;2494:56;;2409:149;;;;:::o;20273:274::-;20343:7;;;;20327:12;:10;:12::i;:::-;:23;;;20319:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20398:15;;;;;;;20397:16;20389:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20470:15;:22;;;;;;;;20526:12;:10;:12::i;:::-;20510:29;;;;;;;;;;;;20273:274::o;9673:32::-;;;;:::o;9712:::-;;;;:::o;13660:1661::-;13709:14;10134:8;;10146:1;10134:13;10126:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10194:1;10183:8;:12;;;10194:1;13778:13:::1;:11;:13::i;:::-;-1:-1:-1::0;13848:6:0::1;::::0;13833:47:::1;::::0;;;;;13874:4:::1;13833:47;::::0;::::1;::::0;;;13736:55;;-1:-1:-1;13736:55:0;;-1:-1:-1;13817:13:0::1;::::0;13848:6:::1;::::0;;::::1;::::0;13833:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;13848:6;13833:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13833:47:0;13922:6:::1;::::0;13907:47:::1;::::0;;;;;13948:4:::1;13907:47;::::0;::::1;::::0;;;13833;;-1:-1:-1;13891:13:0::1;::::0;13922:6:::1;::::0;;::::1;::::0;13907:32:::1;::::0;:47;;;;;13833::::1;::::0;13907;;;;;;;;13922:6;13907:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;13907:47:0;;-1:-1:-1;13965:12:0::1;13980:23;:8:::0;:23:::1;::::0;::::1;:12;:23::i;:::-;13965:38:::0;-1:-1:-1;14014:12:0::1;14029:23;:8:::0;:23:::1;::::0;::::1;:12;:23::i;:::-;14014:38;;14065:10;14078:30;14087:9;14098;14078:8;:30::i;:::-;14119:17;14139:11:::0;14065:43;;-1:-1:-1;14243:17:0;14239:752:::1;;14313:7;::::0;14296:36:::1;::::0;;;;;;;14277:16:::1;::::0;14313:7:::1;;::::0;14296:34:::1;::::0;:36:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;14313:7;14296:36;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14296:36:0;;-1:-1:-1;14351:24:0::1;::::0;::::1;:12;:10;:12::i;:::-;:24;;;14347:502;;;14418:8;14408:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14408:38:0;;-1:-1:-1;14473:13:0;;;;;:41:::1;;;14511:2;14490:9;:24;;14473:41;14465:75;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14347:502;;;14589:22;::::0;::::1;::::0;14581:57:::1;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;14669:54;9184:5;14669:31;14679:20;:7:::0;14691;14679:11:::1;:20::i;:::-;14669:9;:31::i;:54::-;14657:66;;14742:36;14756:1;9184:5;14742;:36::i;:::-;14239:752;;;;14893:86;14902:37;::::0;::::1;:25;:7:::0;14914:12;14902:11:::1;:25::i;:::-;:37;;;;;;14941;::::0;::::1;:25;:7:::0;14953:12;14941:11:::1;:25::i;:::-;:37;;;;;;14893:8;:86::i;:::-;14881:98;;14239:752;15021:1;15009:9;:13;15001:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15081:20;15087:2;15091:9;15081:5;:20::i;:::-;15114:49;15122:8;15132;15142:9;15153;15114:7;:49::i;:::-;15178:5;15174:47;;;15212:8;::::0;15193:28:::1;::::0;15212:8:::1;15198::::0;;::::1;::::0;15212;;::::1;;15193:18;:28::i;:::-;15185:5;:36:::0;15174:47:::1;15282:12;:10;:12::i;:::-;15277:36;;;15296:7;15305;15277:36;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;10229:1:0;10218:8;:12;-1:-1:-1;13660:1661:0;;;-1:-1:-1;;;;;;13660:1661:0:o;1075:41::-;;;;;;;;;;;;;:::o;9751:17::-;;;;:::o;1451:38::-;;;;;;;;;;;;;:::o;15433:1503::-;15482:12;15496;10134:8;;10146:1;10134:13;10126:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10194:1;10183:8;:12;;;10194:1;15563:13:::1;:11;:13::i;:::-;-1:-1:-1::0;15620:6:0::1;::::0;15701::::1;::::0;15780:48:::1;::::0;;;;;15822:4:::1;15780:48;::::0;::::1;::::0;;;15521:55;;-1:-1:-1;15521:55:0;;-1:-1:-1;15620:6:0::1;::::0;;::::1;::::0;15701;::::1;::::0;15602:15:::1;::::0;15620:6;;15780:33:::1;::::0;:48;;;;;::::1;::::0;;;;;;;;15620:6;15780:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15780:48:0;15855::::1;::::0;;;;;15897:4:::1;15855:48;::::0;::::1;::::0;;;15780;;-1:-1:-1;15839:13:0::1;::::0;15855:33:::1;::::0;::::1;::::0;::::1;::::0;:48;;;;;15780::::1;::::0;15855;;;;;;;:33;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;15855:48:0;15949:4:::1;15914:14;15931:24:::0;;;:9:::1;15855:48;15931:24:::0;;;;;15855:48;;-1:-1:-1;15981:30:0::1;15990:9:::0;16001;15981:8:::1;:30::i;:::-;16022:17;16042:11:::0;15968:43;;-1:-1:-1;16042:11:0;16152:23:::1;:9:::0;16166:8;16152:13:::1;:23::i;:::-;:38;;;;;;::::0;-1:-1:-1;16285:12:0;16259:23:::1;:9:::0;16273:8;16259:13:::1;:23::i;:::-;:38;;;;;;16249:48;;16374:1;16364:7;:11;:26;;;;;16389:1;16379:7;:11;16364:26;16356:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16449:31;16463:4;16470:9;16449:5;:31::i;:::-;16491:35;16505:7;16514:2;16518:7;16491:13;:35::i;:::-;16537;16551:7;16560:2;16564:7;16537:13;:35::i;:::-;16594:48;::::0;;;;;16636:4:::1;16594:48;::::0;::::1;::::0;;;:33:::1;::::0;::::1;::::0;::::1;::::0;:48;;;;;::::1;::::0;;;;;;;;:33;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16594:48:0;16664::::1;::::0;;;;;16706:4:::1;16664:48;::::0;::::1;::::0;;;16594;;-1:-1:-1;16664:33:0::1;::::0;::::1;::::0;::::1;::::0;:48;;;;;16594::::1;::::0;16664;;;;;;;;:33;:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16664:48:0;;-1:-1:-1;16725:49:0::1;16733:8:::0;16664:48;16753:9;16764;16725:7:::1;:49::i;:::-;16789:5;16785:47;;;16823:8;::::0;16804:28:::1;::::0;16823:8:::1;16809::::0;;::::1;::::0;16823;;::::1;;16804:18;:28::i;:::-;16796:5;:36:::0;16785:47:::1;16925:2;16888:40;;16893:12;:10;:12::i;:::-;16888:40;;;16907:7;16916;16888:40;;;;;;;;;;;;;;;;;;;;;;;;10206:1;;;;;;;;;10229::::0;10218:8;:12;;;;15433:1503;;;:::o;958:37::-;;;;;;;;;;;;;;;;;;;:::o;1634:35::-;;;;;;;;;:::o;4181:141::-;4241:4;4258:34;4268:12;:10;:12::i;:::-;4282:2;4286:5;4258:9;:34::i;9143:46::-;9184:5;9143:46;:::o;19407:350::-;10134:8;;10146:1;10134:13;10126:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10194:1;10183:8;:12;19476:6:::1;::::0;19526::::1;::::0;19638:8:::1;::::0;19585:48:::1;::::0;;;;;19627:4:::1;19585:48;::::0;::::1;::::0;;;19476:6:::1;::::0;;::::1;::::0;19526;;::::1;::::0;19558:90:::1;::::0;19476:6;;19581:2;;19585:62:::1;::::0;19638:8:::1;;::::0;19476:6;;19585:33:::1;::::0;:48;;;;;::::1;::::0;;;;;;;;;19476:6;19585:48;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19585:48:0;;:52:::1;:62::i;:::-;19558:13;:90::i;:::-;19659;19673:7;19682:2;19686:62;19739:8;;;;;;;;;;;19686:62;;19701:7;19686:33;;;19728:4;19686:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;19659:90;-1:-1:-1::0;;10229:1:0;10218:8;:12;-1:-1:-1;19407:350:0:o;9293:22::-;;;;;;:::o;9350:21::-;;;;;;:::o;4645:680::-;4791:15;4779:8;:27;;4771:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4948:16;;5044:13;;;;4843:14;5044:13;;;:6;:13;;;;;;;;:15;;;;;;;;;4993:77;;1378:66;4993:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4983:88;;;;;;4884:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4860:237;;;;;;;;;5135:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4843:14;;5044:15;5135:26;;;;;-1:-1:-1;5135:26:0;;;;;;;;;;5044:15;5135:26;;;;;;;;;;;;;;;-1:-1:-1;;5135:26:0;;;;;;-1:-1:-1;;5180:30:0;;;;;;;:59;;;5234:5;5214:25;;:16;:25;;;5180:59;5172:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5286:31;5295:5;5302:7;5311:5;5286:8;:31::i;:::-;4645:680;;;;;;;;;:::o;1123:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19806:174::-;10134:8;;10146:1;10134:13;10126:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10194:1;10183:8;:12;19870:6:::1;::::0;19855:47:::1;::::0;;;;;19896:4:::1;19855:47;::::0;::::1;::::0;;;19847:125:::1;::::0;19870:6:::1;;::::0;19855:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;19870:6;19855:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19855:47:0;19919:6:::1;::::0;19904:47:::1;::::0;;;;;19945:4:::1;19904:47;::::0;::::1;::::0;;;19919:6:::1;::::0;;::::1;::::0;19904:32:::1;::::0;:47;;;;;19855::::1;::::0;19904;;;;;;;;19919:6;19904:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;19904:47:0;19953:8:::1;::::0;::::1;::::0;;::::1;::::0;19963;;::::1;;19847:7;:125::i;:::-;10229:1:::0;10218:8;:12;19806:174::o;10485:290::-;9248:34;;;;;;;;;;;;;;;;;10613:43;;10602:10;10613:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10602:55;;;;10567:12;;10581:17;;10602:10;;;10613:43;10602:55;;;10613:43;10602:55;;10613:43;10602:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10566:91;;;;10676:7;:57;;;;-1:-1:-1;10688:11:0;;:16;;:44;;;10719:4;10708:24;;;;;;;;;;;;;;;-1:-1:-1;10708:24:0;10688:44;10668:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10485:290;;;;;:::o;2566:385::-;2611:14;2642:30;2661:10;2642:18;:30::i;:::-;2638:306;;;-1:-1:-1;2843:23:0;2847:14;2843:23;2830:37;2826:2;2822:46;2793:90;;;-1:-1:-1;2922:10:0;2638:306;2566:385;:::o;598:142::-;650:6;677;;;:30;;-1:-1:-1;;692:5:0;;;706:1;701;692:5;701:1;687:15;;;;;:20;677:30;669:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;461:129;545:5;;;540:16;;;;532:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11607:863;11719:23;;;;;;:50;;-1:-1:-1;11746:23:0;;;;11719:50;11711:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11911:18;;11838:23;:15;:23;;;11911:18;;;;;11894:35;;;11967:15;;;;;;:33;;-1:-1:-1;11986:14:0;;;;;11967:33;:51;;;;-1:-1:-1;12004:14:0;;;;;11967:51;11963:336;;;12173:11;12120:64;;12125:44;12159:9;12125:27;12142:9;12125:16;:27::i;:::-;:33;;;;:44::i;:::-;12096:20;:88;;12120:50;;;;;:64;;;;12096:88;;;12223:64;;;12228:44;12262:9;12228:27;12245:9;12228:16;:27::i;:44::-;12199:20;:88;;12223:50;;;;;:64;;;;12199:88;;;11963:336;12309:8;:28;;;;;;;;;;;;12348;;;;;;;;;;;;12387:35;;;;;;;;;;;;12438:24;;;12443:8;;;12438:24;;12453:8;;;;;;;12438:24;;;;;;;;;;;;;;;;;11607:863;;;;;;:::o;3619:169::-;3700:16;;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;3749:31;;;;;;;;;;;;;;;;;3619:169;;;:::o;3796:220::-;3890:15;;;;;;;:9;:15;;;;;;:26;;3910:5;3890:19;:26::i;:::-;3872:15;;;;;;;;:9;:15;;;;;;:44;;;;3943:13;;;;;;;:24;;3961:5;3943:17;:24::i;:::-;3927:13;;;;;;;;:9;:13;;;;;;;;;:40;;;;3983:25;;;;;;;3927:13;;3983:25;;;;;;;;;;;;;3796:220;;;:::o;12560:988::-;12633:10;12656:13;12689:7;;;;;;;;;;;12672:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12672:33:0;12768:5;;12724:19;;;;;;;-1:-1:-1;12672:33:0;;-1:-1:-1;12768:5:0;12799:742;;12829:11;;12825:646;;12861:10;12874:41;12884:30;;:15;;;;:30;;:19;:30::i;12874:41::-;12861:54;;12934:14;12951:17;12961:6;12951:9;:17::i;:::-;12934:34;;12999:9;12991:5;:17;12987:469;;;13033:14;13050:37;13066:20;:5;13076:9;13066;:20::i;:::-;13050:11;;;:15;:37::i;:::-;13033:54;-1:-1:-1;13262:16:0;13281:27;13298:9;13281:12;:5;13262:16;13281:9;:12::i;:::-;:16;;:27::i;:::-;13262:46;;13331:14;13360:11;13348:9;:23;;;;;;;-1:-1:-1;13398:13:0;;13394:42;;13413:23;13419:5;13426:9;13413:5;:23::i;:::-;12987:469;;;;12825:646;;;12799:742;;;13492:11;;13488:53;;13528:1;13520:5;:9;13488:53;12560:988;;;;;;:::o;5703:303::-;5748:6;5775:1;5771;:5;5767:232;;;-1:-1:-1;5797:1:0;5830;5826;5822:5;;:9;5846:92;5857:1;5853;:5;5846:92;;;5883:1;5879:5;;5921:1;5916;5912;5908;:5;;;;;;:9;5907:15;;;;;;5903:19;;5846:92;;;5767:232;;;;5959:6;;5955:44;;-1:-1:-1;5986:1:0;5703:303;;;:::o;3193:201::-;3266:11;;:22;;3282:5;3266:15;:22::i;:::-;3252:11;:36;;;3315:13;;;;;:9;:13;;;;;;:24;;3333:5;3315:17;:24::i;:::-;3299:13;;;;;;;:9;:13;;;;;;;;:40;;;;3355:31;;;;;;;3299:13;;;;3355:31;;;;;;;;;;3193:201;;:::o;5489:96::-;5541:6;5568:1;5564;:5;:13;;5576:1;5564:13;;;5572:1;5564:13;5560:17;5489:96;-1:-1:-1;;;5489:96:0:o;3402:209::-;3481:15;;;;;;;:9;:15;;;;;;:26;;3501:5;3481:19;:26::i;:::-;3463:15;;;;;;;:9;:15;;;;;:44;;;;3532:11;:22;;3548:5;3532:15;:22::i;:::-;3518:11;:36;;;3570:33;;;;;;;;;;;;;;;;;;;;;;3402:209;;:::o;6366:120::-;6442:10;;6311:6;6442:17;;6366:120::o;6557:108::-;6617:9;6647:10;;;6643:14;;;6647:10;6643:14;;;;;;6557:108;-1:-1:-1;;;6557:108:0:o;325:128::-;409:5;;;404:16;;;;396:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://a13971f0c4146f137c4aafe8f77aa07ab0d7af7f779cbdd631d39fffc2591350
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
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.