Contract 0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea51 1

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x53496583e1577c20a62884ef1671a4062626a0605140490d66358282bc756239Withdraw130525412021-11-29 14:59:0511 mins ago0x33afb60c82668241f098cb185dddc28f1a4875ce IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000355205
0x2ef2cc35fa8d18775abc5eb5d26f5a63b6b4fa33bc56a892564eba4288eb3195Withdraw130523542021-11-29 14:48:4521 mins ago0xf83523005b5568d7b38731c28c5ffb34ec4a32a4 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000355265
0xcbd1cc1def9284d3055a09b75d1d94a149543a2473b05769d10d7e62a11beb62Withdraw130522932021-11-29 14:45:3025 mins ago0xaeeda631711516054deb1237c5bb6cc7d63a26c5 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000355265
0x17450e3541d89034370c723cae2918f494140741cc934d96539f7f643816ca20Withdraw130522772021-11-29 14:44:4225 mins ago0xaa1e5fa5869d5a301f2a8a68fc3e33e990e9d43c IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000355205
0xf957678ca56cf5614709ac7b933e7ec47239d7e92366050bc37809f573e9e7ccWithdraw130522102021-11-29 14:41:1529 mins ago0x0cdf641a12303286a88f713142579ddb3c65d419 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000190505
0xf278418db8ddbe088a33c99b7d6bd2d1b6ccf3310b1858e38bef164111e03bd1Withdraw130521652021-11-29 14:38:4831 mins ago0x0cdf641a12303286a88f713142579ddb3c65d419 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000280265
0x1d95f6a2971884578f3d6c733103f307d0ff91981a2f880a29f6d36a4c255ebbWithdraw130516042021-11-29 14:08:511 hr 1 min ago0xfac0ff073189032c4711408fa3261821729960d8 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000280265
0xb6a0945803b0fe69550ab01ac82e8aeb389dcaaaea4edd02841b50721732cf30Withdraw130514882021-11-29 14:02:131 hr 8 mins ago0xa882c5224fc512441f012f4823f95a4ddf105697 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000190505
0x98d8ea8915c5c33ab1a6e02091bcb29c6e7543bec4c48244b2a4b96c289046e1Withdraw130514882021-11-29 14:02:131 hr 8 mins ago0xa882c5224fc512441f012f4823f95a4ddf105697 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000355265
0x963ff46d8363a2050b93cd770d402fea491fe414d41895b6d12ea60aefbc1369Withdraw130514292021-11-29 13:58:361 hr 11 mins ago0x126cd584e6e842d8fbc09f9e27edb30bf9fb31f5 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000190385
0xe91c1818b77baf1ccb6b2275e35e228a4816f732ba323f1ef3608117df0fac11Withdraw130514212021-11-29 13:58:071 hr 12 mins ago0x126cd584e6e842d8fbc09f9e27edb30bf9fb31f5 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000430145
0xfcbd10e599efb287a6e5fd2f7717fdf329636ab060195f7156e7ce50a940b97bWithdraw130514042021-11-29 13:57:101 hr 13 mins ago0x01e092210be85b9b84bb9a01f56ae3fc195e8688 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000355205
0x3ca6ae9e1f343749ac4a0c3573e99ee57cdf49a38d8394e92477ba6a43941516Withdraw130513082021-11-29 13:51:361 hr 18 mins ago0x64d591e5714af7e0490ed3b28467316a85e32084 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000355265
0x1ec948d262ce036a99c9ae33beefb2b3530f4c832d6d2f204e0449975f88eb61Withdraw130512512021-11-29 13:48:131 hr 22 mins ago0xbe24a1cc65390f04fbf392bfc1656bb313b7031d IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000355205
0x6c354f8211c00fbf2cc78b35b938448767a0e85b2f8feab438eb6258f409f2a8Withdraw130511782021-11-29 13:43:421 hr 26 mins ago0x094d7a98d6d6946c57869a55552407a7e28811ca IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000355205
0x44c4dd82f5d1b8615d7edeb39d0cacb3f2123b4313a867ea0cafe644067a0cc4Withdraw130510492021-11-29 13:36:361 hr 33 mins ago0x3e49f731cddda024350d78fa0cc8f9a12f5d2ea9 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000280265
0x6e0251471f34abb1452ac7c41a21b7d961dc70b990cfafe5c37b34bfe1a5fc77Withdraw130508982021-11-29 13:28:071 hr 42 mins ago0x9dabbbe8bd83c7d8ec969768abd7fd0c0618e1d7 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000355265
0x9681fbd1bc9329a0a5411cebe3e7f3484bedfe1caea72bb10421b19be157365dWithdraw130506292021-11-29 13:14:141 hr 56 mins ago0xa475a900d372bd4fa17d9d32a6305b27517b2c62 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000280265
0x197b2d08b9b3b17966d7ab48d4eedbdca4f4855963452b7a8875a5870562b6daWithdraw130506122021-11-29 13:13:231 hr 57 mins ago0xced0b63ee090c279bc7d2400aa631270a37bfeda IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000280265
0x3b6c6c5c91d6bf74bf972620fb5f04ec85a16d8a60e1c10457c531d31886ec54Withdraw130505302021-11-29 13:08:272 hrs 2 mins ago0xc0764553411f3241ecbce674e66863294bdba16f IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000355265
0x9442d10f313d48aff8e56219d2c115040a5b3e1ff67f92c1b7288a917ae07773Withdraw130504832021-11-29 13:05:432 hrs 4 mins ago0xa8c666515f662a076bebd92e816731e7f8b5268c IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000355265
0x19a1654cbc961d3b65b05dbba0e1f402366c3d5177abaeb4255d1065bfef13ebWithdraw130504012021-11-29 13:00:552 hrs 9 mins ago0x0929b21d85a537489f7344ab9770796424d106cb IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000430265
0x40d40598a640553f1a8cc05dbf2faab43b8659bc8453ecd53fbc8ef206f68038Withdraw130503752021-11-29 12:59:132 hrs 11 mins ago0x02817019dfd3ded92e8cc51269fff341b919931d IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000280265
0x3a454d98cbd120ba6312f7fe51290a5e8de5119f8118768de67ae7350b05786bWithdraw130501862021-11-29 12:47:262 hrs 23 mins ago0x92447f3771437ebf9e76c07003ff97ee1b66e5ba IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000430265
0xec28c1d225e1325e8d12cb1e1fbf758c02394a028f5197c1fefee24b65e6058aWithdraw130501172021-11-29 12:42:272 hrs 28 mins ago0x85764f52f1535c0315175ecc3eb4b2a4bde43806 IN  0xc8d5d4f3dcbdfaad3a161843ab9e679688e4ea510 BNB0.000355265
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SwapFeeReward

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 999999 runs

Other Settings:
istanbul EvmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-06-21
*/

pragma solidity 0.6.6;

contract Ownable {
    address private _owner;

    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    function isOwner(address account) public view returns (bool) {
        return account == _owner;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }


    modifier onlyOwner() {
        require(isOwner(msg.sender), "Ownable: caller is not the owner");
        _;
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
}
library SafeMath {
    uint256 constant WAD = 10 ** 18;
    uint256 constant RAY = 10 ** 27;

    function wad() public pure returns (uint256) {
        return WAD;
    }

    function ray() public pure returns (uint256) {
        return RAY;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a <= b ? a : b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function sqrt(uint256 a) internal pure returns (uint256 b) {
        if (a > 3) {
            b = a;
            uint256 x = a / 2 + 1;
            while (x < b) {
                b = x;
                x = (a / x + x) / 2;
            }
        } else if (a != 0) {
            b = 1;
        }
    }

    function wmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / WAD;
    }

    function wmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), WAD / 2) / WAD;
    }

    function rmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / RAY;
    }

    function rmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), RAY / 2) / RAY;
    }

    function wdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, WAD), b);
    }

    function wdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, WAD), b / 2) / b;
    }

    function rdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, RAY), b);
    }

    function rdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, RAY), b / 2) / b;
    }

    function wpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = WAD;
        while (n > 0) {
            if (n % 2 != 0) {
                result = wmul(result, x);
            }
            x = wmul(x, x);
            n /= 2;
        }
        return result;
    }

    function rpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = RAY;
        while (n > 0) {
            if (n % 2 != 0) {
                result = rmul(result, x);
            }
            x = rmul(x, x);
            n /= 2;
        }
        return result;
    }
}
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping(bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {// Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1;
            // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(value)));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint256(_at(set._inner, index)));
    }


    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}
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 IOracle {
    function consult(address tokenIn, uint amountIn, address tokenOut) external view returns (uint amountOut);
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function INIT_CODE_HASH() external pure returns (bytes32);

    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 setDevFee(address pair, uint8 _devFee) external;
    function setSwapFee(address pair, uint32 swapFee) external;
}

interface IBSWPair {
    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 swapFee() external view returns (uint32);
    function devFee() external view returns (uint32);

    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;
    function setSwapFee(uint32) external;
    function setDevFee(uint32) external;
}

interface IBswToken is IERC20 {
    function mint(address to, uint256 amount) external returns (bool);
}

contract SwapFeeReward is Ownable{
    using SafeMath for uint256;
    using EnumerableSet for EnumerableSet.AddressSet;
    EnumerableSet.AddressSet private _whitelist;

    address public factory;
    address public router;
    bytes32 public INIT_CODE_HASH;
    uint256 public maxMiningAmount  = 100000000 * 1e18;
    uint256 public maxMiningInPhase = 5000 * 1e18;
    uint public currentPhase = 1;
    uint256 public totalMined = 0;
    IBswToken public bswToken;
    IOracle public oracle;
    address public targetToken;
    
    mapping(address => uint) public nonces;
    mapping(address => uint256) private _balances;
    mapping(address => uint256) public pairOfPid;
    
    struct PairsList {
        address pair;
        uint256 percentReward;
        bool enabled;
    }
    PairsList[] public pairsList;

    event Withdraw(address userAddress, uint256 amount);
    event Rewarded(address account, address input, address output, uint256 amount, uint256 quantity);

    modifier onlyRouter() {
        require(msg.sender == router, "SwapFeeReward: caller is not the router");
        _;
    }

    constructor(
        address _factory,
        address _router,
        bytes32 _INIT_CODE_HASH,
        IBswToken _bswToken,
        IOracle _Oracle,
        address _targetToken
    ) public {
        factory = _factory;
        router = _router;
        INIT_CODE_HASH = _INIT_CODE_HASH;
        bswToken = _bswToken;
        oracle = _Oracle;
        targetToken = _targetToken;
    }

    function sortTokens(address tokenA, address tokenB) public pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'BSWSwapFactory: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'BSWSwapFactory: ZERO_ADDRESS');
    }

    function pairFor(address tokenA, address tokenB) public view returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                INIT_CODE_HASH
            ))));
    }

    function getSwapFee(address tokenA, address tokenB) internal view returns (uint swapFee) {
        swapFee = uint(1000).sub(IBSWPair(pairFor(tokenA, tokenB)).swapFee());
    }
    
    function setPhase(uint _newPhase) public onlyOwner returns(bool){
        currentPhase = _newPhase;
        return true;
    }

    function checkPairExist(address tokenA, address tokenB) public view returns (bool) {
        address pair = pairFor(tokenA, tokenB);
        PairsList storage pool = pairsList[pairOfPid[pair]];
        if (pool.pair != pair) {
            return false;
        }
        return true;
    }

    // Fixed a silly backdoor intentionally left out to mint lots of tokens but found out by hacker, bad hacker! :(
    function swap(address account, address input, address output, uint256 amount) public onlyRouter returns (bool) { // suck on this!
        if (!isWhitelist(input) || !isWhitelist(output)) {
            return false;
        }
        if (maxMiningAmount <= totalMined){
            return false;
        }
        address pair = pairFor(input, output);
        PairsList storage pool = pairsList[pairOfPid[pair]];
        if (pool.pair != pair || pool.enabled == false) {
            return false;
        }
        uint256 pairFee = getSwapFee(input, output);
        uint256 fee = amount.div(pairFee);
        uint256 quantity = getQuantity(output, fee, targetToken);
        quantity = quantity.mul(pool.percentReward).div(100);
        if (totalMined.add(quantity) > currentPhase.mul(maxMiningInPhase)){
            return false;
        }
        _balances[account] = _balances[account].add(quantity);
        emit Rewarded(account, input, output, amount, quantity);
        return true;
    }

    function rewardBalance(address account) public view returns(uint256){
        return _balances[account];
    }

    function permit(address spender, uint value, uint8 v, bytes32 r, bytes32 s) private {
        bytes32 message = keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", keccak256(abi.encodePacked(spender, value, nonces[spender]++))));
        address recoveredAddress = ecrecover(message, v, r, s);
        require(recoveredAddress != address(0) && recoveredAddress == spender, 'SwapFeeReward: INVALID_SIGNATURE');
    }

    function withdraw(uint8 v, bytes32 r, bytes32 s) public returns(bool){
        require(maxMiningAmount > totalMined, 'SwapFeeReward: Mined all tokens');
        uint256 balance = _balances[msg.sender];
        require(totalMined.add(balance) <= currentPhase.mul(maxMiningInPhase), 'SwapFeeReward: Mined all tokens in this phase');
        permit(msg.sender, balance, v, r, s);
        if (balance > 0){
            bswToken.mint(msg.sender, balance);
            _balances[msg.sender] = _balances[msg.sender].sub(balance);
            emit Withdraw(msg.sender, balance);
            totalMined = totalMined.add(balance);
            return true;
        }
        return false;
    }

    function getQuantity(address outputToken, uint256 outputAmount, address anchorToken) public view returns (uint256) {
        uint256 quantity = 0;
        if (outputToken == anchorToken) {
            quantity = outputAmount;
        } else if (IBSWFactory(factory).getPair(outputToken, anchorToken) != address(0) && checkPairExist(outputToken, anchorToken)) {
            quantity = IOracle(oracle).consult(outputToken, outputAmount, anchorToken);
        } else {
            uint256 length = getWhitelistLength();
            for (uint256 index = 0; index < length; index++) {
                address intermediate = getWhitelist(index);
                if (IBSWFactory(factory).getPair(outputToken, intermediate) != address(0) && IBSWFactory(factory).getPair(intermediate, anchorToken) != address(0) && checkPairExist(intermediate, anchorToken)) {
                    uint256 interQuantity = IOracle(oracle).consult(outputToken, outputAmount, intermediate);
                    quantity = IOracle(oracle).consult(intermediate, interQuantity, anchorToken);
                    break;
                }
            }
        }
        return quantity;
    }

    function addWhitelist(address _addToken) public onlyOwner returns (bool) {
        require(_addToken != address(0), "SwapMining: token is the zero address");
        return EnumerableSet.add(_whitelist, _addToken);
    }

    function delWhitelist(address _delToken) public onlyOwner returns (bool) {
        require(_delToken != address(0), "SwapMining: token is the zero address");
        return EnumerableSet.remove(_whitelist, _delToken);
    }

    function getWhitelistLength() public view returns (uint256) {
        return EnumerableSet.length(_whitelist);
    }

    function isWhitelist(address _token) public view returns (bool) {
        return EnumerableSet.contains(_whitelist, _token);
    }

    function getWhitelist(uint256 _index) public view returns (address){
        require(_index <= getWhitelistLength() - 1, "SwapMining: index out of bounds");
        return EnumerableSet.at(_whitelist, _index);
    }

    function setRouter(address newRouter) public onlyOwner {
        require(newRouter != address(0), "SwapMining: new router is the zero address");
        router = newRouter;
    }

    function setOracle(IOracle _oracle) public onlyOwner {
        require(address(_oracle) != address(0), "SwapMining: new oracle is the zero address");
        oracle = _oracle;
    }

    function setFactory(address _factory) public onlyOwner {
        require(_factory != address(0), "SwapMining: new factory is the zero address");
        factory = _factory;
    }

    function setInitCodeHash(bytes32 _INIT_CODE_HASH) public onlyOwner {
        INIT_CODE_HASH = _INIT_CODE_HASH;
    }

    function pairsListLength() public view returns (uint256) {
        return pairsList.length;
    }

    function addPair(uint256 _percentReward, address _pair) public onlyOwner {
        require(_pair != address(0), "_pair is the zero address");
        pairsList.push(
            PairsList({
                pair: _pair,
                percentReward: _percentReward,
                enabled: true
            })
        );
        pairOfPid[_pair] = pairsListLength() - 1;

    }

    function setPair(uint256 _pid, uint256 _percentReward) public onlyOwner {
        pairsList[_pid].percentReward = _percentReward;
    }

    function setPairEnabled(uint256 _pid, bool _enabled) public onlyOwner {
        pairsList[_pid].enabled = _enabled;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"bytes32","name":"_INIT_CODE_HASH","type":"bytes32"},{"internalType":"contract IBswToken","name":"_bswToken","type":"address"},{"internalType":"contract IOracle","name":"_Oracle","type":"address"},{"internalType":"address","name":"_targetToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"input","type":"address"},{"indexed":false,"internalType":"address","name":"output","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"Rewarded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"INIT_CODE_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentReward","type":"uint256"},{"internalType":"address","name":"_pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addToken","type":"address"}],"name":"addWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bswToken","outputs":[{"internalType":"contract IBswToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"checkPairExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_delToken","type":"address"}],"name":"delWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"outputToken","type":"address"},{"internalType":"uint256","name":"outputAmount","type":"uint256"},{"internalType":"address","name":"anchorToken","type":"address"}],"name":"getQuantity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getWhitelist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWhitelistLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"isWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMiningAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMiningInPhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oracle","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"pairFor","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairOfPid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pairsList","outputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"percentReward","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairsListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"rewardBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_factory","type":"address"}],"name":"setFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_INIT_CODE_HASH","type":"bytes32"}],"name":"setInitCodeHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IOracle","name":"_oracle","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_percentReward","type":"uint256"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setPairEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPhase","type":"uint256"}],"name":"setPhase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"sortTokens","outputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"input","type":"address"},{"internalType":"address","name":"output","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"targetToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMined","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]

60806040526a52b7d2dcc80cd2e400000060065569010f0cf064dd592000006007556001600855600060095534801561003757600080fd5b50604051612e1c380380612e1c833981810160405260c081101561005a57600080fd5b50805160208201516040808401516060850151608086015160a090960151600080546001600160a01b031916331780825594519697959693959294929391926001600160a01b0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600380546001600160a01b03199081166001600160a01b039889161790915560048054821696881696909617909555600593909355600a8054851692861692909217909155600b80548416918516919091179055600c80549092169216919091179055612ce28061013a6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c80638da5cb5b11610160578063c0d78655116100d8578063f2fde38b1161008c578063f887ea4011610071578063f887ea401461081c578063f915f5c414610824578063ff08753b1461084957610292565b8063f2fde38b146107b6578063f80f5dd5146107e957610292565b8063c683630d116100bd578063c683630d1461071e578063c708ba0c14610751578063cdc9b9261461078a57610292565b8063c0d78655146106e3578063c45a01551461071657610292565b8063a13202e91161012f578063a9678a1811610114578063a9678a181461063c578063b9e816c714610685578063bfbee59f146106c057610292565b8063a13202e9146105f1578063a7ef67f6146105f957610292565b80638da5cb5b1461055e57806396db752a1461056657806396ed28f91461058357806397ecfaab146105be57610292565b8063544caa561161020e578063715018a6116101c25780637dc0d1d0116101a75780637dc0d1d01461051b5780637ecebe00146105235780638798df5b1461055657610292565b8063715018a6146104e05780637adbf973146104e857610292565b80635bb47808116101f35780635bb478081461042657806367b40cf7146104595780636a58f23f1461048c57610292565b8063544caa56146103b05780635556db651461041e57610292565b80632c9dc159116102655780632f54bf6e1161024a5780632f54bf6e14610344578063327107f7146103775780633bf186d0146103a857610292565b80632c9dc159146102f45780632cc826551461031357610292565b80630495de5014610297578063055ad42e146102dc57806313b1dc42146102e4578063257671f5146102ec575b600080fd5b6102ca600480360360208110156102ad57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610851565b60408051918252519081900360200190f35b6102ca610863565b6102ca610869565b6102ca61086f565b6103116004803603602081101561030a57600080fd5b5035610875565b005b6103306004803603602081101561032957600080fd5b50356108ee565b604080519115158252519081900360200190f35b6103306004803603602081101561035a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661096d565b61037f61098e565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61037f6109aa565b6103eb600480360360408110156103c657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166109c6565b6040805173ffffffffffffffffffffffffffffffffffffffff938416815291909216602082015281519081900390910190f35b6102ca610b19565b6103116004803603602081101561043c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610b1f565b6102ca6004803603602081101561046f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c46565b6104a9600480360360208110156104a257600080fd5b5035610c6e565b6040805173ffffffffffffffffffffffffffffffffffffffff90941684526020840192909252151582820152519081900360600190f35b610311610cb8565b610311600480360360208110156104fe57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610d9b565b61037f610ec2565b6102ca6004803603602081101561053957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610ede565b6102ca610ef0565b61037f610ef6565b61037f6004803603602081101561057c57600080fd5b5035610f12565b61037f6004803603604081101561059957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610f9e565b610330600480360360208110156105d457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611069565b6102ca611156565b6102ca6004803603606081101561060f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359160409091013516611167565b6103306004803603608081101561065257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101358216916040820135169060600135611668565b6103306004803603604081101561069b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516611926565b610311600480360360408110156106d657600080fd5b50803590602001356119b4565b610311600480360360208110156106f957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611a4f565b61037f611b76565b6103306004803603602081101561073457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611b92565b6103116004803603604081101561076757600080fd5b508035906020013573ffffffffffffffffffffffffffffffffffffffff16611b9f565b610330600480360360608110156107a057600080fd5b5060ff8135169060208101359060400135611dda565b610311600480360360208110156107cc57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612030565b610330600480360360208110156107ff57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166120b0565b61037f61219d565b6103116004803603604081101561083a57600080fd5b508035906020013515156121b9565b6102ca61227f565b600f6020526000908152604090205481565b60085481565b60065481565b60055481565b61087e3361096d565b6108e957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600555565b60006108f93361096d565b61096457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b50600855600190565b60005473ffffffffffffffffffffffffffffffffffffffff90811691161490565b600c5473ffffffffffffffffffffffffffffffffffffffff1681565b600a5473ffffffffffffffffffffffffffffffffffffffff1681565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610a4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612c636023913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610610a88578284610a8b565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216610b1257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f42535753776170466163746f72793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b60095481565b610b283361096d565b610b9357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610bff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180612bc0602b913960400191505060405180910390fd5b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b73ffffffffffffffffffffffffffffffffffffffff166000908152600e602052604090205490565b60108181548110610c7b57fe5b600091825260209091206003909102018054600182015460029092015473ffffffffffffffffffffffffffffffffffffffff909116925060ff1683565b610cc13361096d565b610d2c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b610da43361096d565b610e0f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610e7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612c18602a913960400191505060405180910390fd5b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600b5473ffffffffffffffffffffffffffffffffffffffff1681565b600d6020526000908152604090205481565b60105490565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b60006001610f1e611156565b03821115610f8d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f537761704d696e696e673a20696e646578206f7574206f6620626f756e647300604482015290519081900360640190fd5b610f98600183612285565b92915050565b6000806000610fad85856109c6565b600354604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606095861b811660208084019190915294861b81166034830152825160288184030181526048830184528051908601206005547fff0000000000000000000000000000000000000000000000000000000000000060688501529490961b166069820152607d810194909452609d808501929092528051808503909201825260bd909301909252815191012095945050505050565b60006110743361096d565b6110df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821661114b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612b9b6025913960400191505060405180910390fd5b610f98600183612291565b600061116260016122b3565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff858116908416141561119257508261165e565b600354604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152868116602483015291516000939092169163e6a4390591604480820192602092909190829003018186803b15801561121057600080fd5b505afa158015611224573d6000803e3d6000fd5b505050506040513d602081101561123a57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff161480159061126557506112658584611926565b1561131f57600b54604080517f8c86f1e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015260248201889052868116604483015291519190921691638c86f1e4916064808301926020929190829003018186803b1580156112ec57600080fd5b505afa158015611300573d6000803e3d6000fd5b505050506040513d602081101561131657600080fd5b5051905061165e565b6000611329611156565b905060005b8181101561165b57600061134182610f12565b600354604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015284811660248301529151939450600093919092169163e6a43905916044808301926020929190829003018186803b1580156113c257600080fd5b505afa1580156113d6573d6000803e3d6000fd5b505050506040513d60208110156113ec57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff16148015906114d05750600354604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152898116602483015291516000939092169163e6a4390591604480820192602092909190829003018186803b15801561148b57600080fd5b505afa15801561149f573d6000803e3d6000fd5b505050506040513d60208110156114b557600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614155b80156114e157506114e18187611926565b1561165257600b54604080517f8c86f1e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b81166004830152602482018b9052848116604483015291516000939290921691638c86f1e491606480820192602092909190829003018186803b15801561156c57600080fd5b505afa158015611580573d6000803e3d6000fd5b505050506040513d602081101561159657600080fd5b5051600b54604080517f8c86f1e400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590528b811660448301529151939450911691638c86f1e491606480820192602092909190829003018186803b15801561161c57600080fd5b505afa158015611630573d6000803e3d6000fd5b505050506040513d602081101561164657600080fd5b5051945061165b915050565b5060010161132e565b50505b90505b9392505050565b60045460009073ffffffffffffffffffffffffffffffffffffffff1633146116db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180612c866027913960400191505060405180910390fd5b6116e484611b92565b15806116f657506116f483611b92565b155b156117035750600061191e565b600954600654116117165750600061191e565b60006117228585610f9e565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020526040812054601080549394509192811061175957fe5b60009182526020909120600390910201805490915073ffffffffffffffffffffffffffffffffffffffff838116911614158061179a5750600281015460ff16155b156117aa5760009250505061191e565b60006117b687876122be565b905060006117ca868363ffffffff61235116565b600c549091506000906117f6908990849073ffffffffffffffffffffffffffffffffffffffff16611167565b9050611820606461181486600101548461239390919063ffffffff16565b9063ffffffff61235116565b905061183960075460085461239390919063ffffffff16565b60095461184c908363ffffffff61240616565b11156118605760009550505050505061191e565b73ffffffffffffffffffffffffffffffffffffffff8a166000908152600e6020526040902054611896908263ffffffff61240616565b73ffffffffffffffffffffffffffffffffffffffff808c166000818152600e60209081526040918290209490945580519182528c831693820193909352908a1681830152606081018990526080810183905290517f4f2387711860ea50b6a0e4e7e3a1aadf0685d1c9261c203c2e6a48b2004fd9779181900360a00190a16001955050505050505b949350505050565b6000806119338484610f9e565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600f6020526040812054601080549394509192811061196a57fe5b60009182526020909120600390910201805490915073ffffffffffffffffffffffffffffffffffffffff8381169116146119a957600092505050610f98565b506001949350505050565b6119bd3361096d565b611a2857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b8060108381548110611a3657fe5b9060005260206000209060030201600101819055505050565b611a583361096d565b611ac357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611b2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612b4b602a913960400191505060405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b6000610f9860018361247a565b611ba83361096d565b611c1357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116611c9557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5f7061697220697320746865207a65726f206164647265737300000000000000604482015290519081900360640190fd5b6040805160608101825273ffffffffffffffffffffffffffffffffffffffff838116825260208201858152600193830184815260108054808701825560009190915293517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672600390950294850180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169190941617909255517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae673830155517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67490910180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055611dad610ef0565b73ffffffffffffffffffffffffffffffffffffffff9092166000908152600f602052604090209103905550565b600060095460065411611e4e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f537761704665655265776172643a204d696e656420616c6c20746f6b656e7300604482015290519081900360640190fd5b336000908152600e6020526040902054600754600854611e739163ffffffff61239316565b600954611e86908363ffffffff61240616565b1115611edd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180612beb602d913960400191505060405180910390fd5b611eea338287878761249c565b801561202557600a54604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015260248101849052905173ffffffffffffffffffffffffffffffffffffffff909216916340c10f19916044808201926020929091908290030181600087803b158015611f6a57600080fd5b505af1158015611f7e573d6000803e3d6000fd5b505050506040513d6020811015611f9457600080fd5b5050336000908152600e6020526040902054611fb6908263ffffffff6126d316565b336000818152600e602090815260409182902093909355805191825291810183905281517f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364929181900390910190a1600954612018908263ffffffff61240616565b6009555060019050611661565b506000949350505050565b6120393361096d565b6120a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6120ad81612715565b50565b60006120bb3361096d565b61212657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8216612192576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180612b9b6025913960400191505060405180910390fd5b610f9860018361280e565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b6121c23361096d565b61222d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b806010838154811061223b57fe5b6000918252602090912060039091020160020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790555050565b60075481565b60006116618383612830565b60006116618373ffffffffffffffffffffffffffffffffffffffff84166128ae565b6000610f9882612992565b60006116616122cd8484610f9e565b73ffffffffffffffffffffffffffffffffffffffff166354cf2aeb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561231257600080fd5b505afa158015612326573d6000803e3d6000fd5b505050506040513d602081101561233c57600080fd5b50516103e89063ffffffff908116906126d316565b600061166183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612996565b6000826123a257506000610f98565b828202828482816123af57fe5b0414611661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c426021913960400191505060405180910390fd5b60008282018381101561166157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006116618373ffffffffffffffffffffffffffffffffffffffff8416612a52565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600d602090815260408083208054600180820190925582517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608c901b1681860152603481018a9052605480820192909252835180820390920182526074810184528151918501919091207f19457468657265756d205369676e6564204d6573736167653a0a333200000000609483015260b0808301919091528351808303909101815260d082018085528151918601919091209086905260f0820180855281905260ff8916610110830152610130820188905261015082018790529251929493919261017080830193927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301929081900390910190855afa1580156125e4573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061265f57508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6126ca57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537761704665655265776172643a20494e56414c49445f5349474e4154555245604482015290519081900360640190fd5b50505050505050565b600061166183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a6a565b73ffffffffffffffffffffffffffffffffffffffff8116612781576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612b756026913960400191505060405180910390fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006116618373ffffffffffffffffffffffffffffffffffffffff8416612ade565b8154600090821061288c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612b296022913960400191505060405180910390fd5b82600001828154811061289b57fe5b9060005260206000200154905092915050565b600081815260018301602052604081205480156129885783547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80830191908101906000908790839081106128ff57fe5b906000526020600020015490508087600001848154811061291c57fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061294c57fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610f98565b6000915050610f98565b5490565b60008183612a3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612a015781810151838201526020016129e9565b50505050905090810190601f168015612a2e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612a4857fe5b0495945050505050565b60009081526001919091016020526040902054151590565b60008184841115612ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612a015781810151838201526020016129e9565b505050900390565b6000612aea8383612a52565b612b2057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f98565b506000610f9856fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473537761704d696e696e673a206e657720726f7574657220697320746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373537761704d696e696e673a20746f6b656e20697320746865207a65726f2061646472657373537761704d696e696e673a206e657720666163746f727920697320746865207a65726f2061646472657373537761704665655265776172643a204d696e656420616c6c20746f6b656e7320696e2074686973207068617365537761704d696e696e673a206e6577206f7261636c6520697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7742535753776170466163746f72793a204944454e544943414c5f414444524553534553537761704665655265776172643a2063616c6c6572206973206e6f742074686520726f75746572a2646970667358221220cb705d490f2def64d81f4d0c0d256ad7b4470486f1161701f62fd21b117b0e0d64736f6c63430006060033000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee0000000000000000000000003a6d8ca21d1cf76f653a67577fa0d27453350dd8fea293c909d87cd4153593f077b76bb7e94340200f4ee84211ae8e4f9bd7ffdf000000000000000000000000965f527d9159dce6288a2219db51fc6eef120dd10000000000000000000000002f48cde4cfd0fb4f5c873291d5cf2dc9e61f2db0000000000000000000000000965f527d9159dce6288a2219db51fc6eef120dd1

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee0000000000000000000000003a6d8ca21d1cf76f653a67577fa0d27453350dd8fea293c909d87cd4153593f077b76bb7e94340200f4ee84211ae8e4f9bd7ffdf000000000000000000000000965f527d9159dce6288a2219db51fc6eef120dd10000000000000000000000002f48cde4cfd0fb4f5c873291d5cf2dc9e61f2db0000000000000000000000000965f527d9159dce6288a2219db51fc6eef120dd1

-----Decoded View---------------
Arg [0] : _factory (address): 0x858e3312ed3a876947ea49d572a7c42de08af7ee
Arg [1] : _router (address): 0x3a6d8ca21d1cf76f653a67577fa0d27453350dd8
Arg [2] : _INIT_CODE_HASH (bytes32): 0xfea293c909d87cd4153593f077b76bb7e94340200f4ee84211ae8e4f9bd7ffdf
Arg [3] : _bswToken (address): 0x965f527d9159dce6288a2219db51fc6eef120dd1
Arg [4] : _Oracle (address): 0x2f48cde4cfd0fb4f5c873291d5cf2dc9e61f2db0
Arg [5] : _targetToken (address): 0x965f527d9159dce6288a2219db51fc6eef120dd1

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000858e3312ed3a876947ea49d572a7c42de08af7ee
Arg [1] : 0000000000000000000000003a6d8ca21d1cf76f653a67577fa0d27453350dd8
Arg [2] : fea293c909d87cd4153593f077b76bb7e94340200f4ee84211ae8e4f9bd7ffdf
Arg [3] : 000000000000000000000000965f527d9159dce6288a2219db51fc6eef120dd1
Arg [4] : 0000000000000000000000002f48cde4cfd0fb4f5c873291d5cf2dc9e61f2db0
Arg [5] : 000000000000000000000000965f527d9159dce6288a2219db51fc6eef120dd1


Deployed ByteCode Sourcemap

18868:8951:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18868:8951:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;19517:44:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19517:44:0;;;;:::i;:::-;;;;;;;;;;;;;;;;19250:28;;;:::i;19141:50::-;;;:::i;19105:29::-;;;:::i;26918:118::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26918:118:0;;:::i;:::-;;21360:129;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21360:129:0;;:::i;:::-;;;;;;;;;;;;;;;;;;294:104;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;294:104:0;;;;:::i;19381:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19321:25;;;:::i;20426:343::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20426:343:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19285:29;;;:::i;26729:181::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26729:181:0;;;;:::i;22945:112::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22945:112:0;;;;:::i;19683:28::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19683:28:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;406:140;;;:::i;26537:184::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26537:184:0;;;;:::i;19353:21::-;;;:::i;19420:38::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19420:38:0;;;;:::i;27044:99::-;;;:::i;207:79::-;;;:::i;26122:218::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26122:218:0;;:::i;20777:386::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20777:386:0;;;;;;;;;;;:::i;25622:226::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25622:226:0;;;;:::i;25856:118::-;;;:::i;24207:1176::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24207:1176:0;;;;;;;;;;;;;;;;;;:::i;21918:1019::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21918:1019:0;;;;;;;;;;;;;;;;;;;;;;;:::i;21497:296::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21497:296:0;;;;;;;;;;;:::i;27548:137::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27548:137:0;;;;;;;:::i;26348:181::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;26348:181:0;;;;:::i;19048:22::-;;;:::i;25982:132::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25982:132:0;;;;:::i;27151:389::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27151:389:0;;;;;;;;;:::i;23503:696::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;23503:696:0;;;;;;;;;;;;;;:::i;791:109::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;791:109:0;;;;:::i;25391:223::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25391:223:0;;;;:::i;19077:21::-;;;:::i;27693:123::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;27693:123:0;;;;;;;;;:::i;19198:45::-;;;:::i;19517:44::-;;;;;;;;;;;;;:::o;19250:28::-;;;;:::o;19141:50::-;;;;:::o;19105:29::-;;;;:::o;26918:118::-;950:19;958:10;950:7;:19::i;:::-;942:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26996:14:::1;:32:::0;26918:118::o;21360:129::-;21419:4;950:19;958:10;950:7;:19::i;:::-;942:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21435:12:0::1;:24:::0;21477:4:::1;::::0;21360:129::o;294:104::-;349:4;384:6;;;;;373:17;;;;294:104::o;19381:26::-;;;;;;:::o;19321:25::-;;;;;;:::o;20426:343::-;20499:14;20515;20560:6;20550:16;;:6;:16;;;;20542:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20645:6;20636:15;;:6;:15;;;:53;;20674:6;20682;20636:53;;;20655:6;20663;20636:53;20617:72;;-1:-1:-1;20617:72:0;-1:-1:-1;20708:20:0;;;20700:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20426:343;;;;;:::o;19285:29::-;;;;:::o;26729:181::-;950:19;958:10;950:7;:19::i;:::-;942:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26803:22:::1;::::0;::::1;26795:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26884:7;:18:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;26729:181::o;22945:112::-;23031:18;;23005:7;23031:18;;;:9;:18;;;;;;;22945:112::o;19683:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19683:28:0;;;:::o;406:140::-;950:19;958:10;950:7;:19::i;:::-;942:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;505:1:::1;489:6:::0;;468:40:::1;::::0;::::1;489:6:::0;;::::1;::::0;468:40:::1;::::0;505:1;;468:40:::1;536:1;519:19:::0;;;::::1;::::0;;406:140::o;26537:184::-;950:19;958:10;950:7;:19::i;:::-;942:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26609:30:::1;::::0;::::1;26601:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26697:6;:16:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;26537:184::o;19353:21::-;;;;;;:::o;19420:38::-;;;;;;;;;;;;;:::o;27044:99::-;27119:9;:16;27044:99;:::o;207:79::-;245:7;272:6;;;207:79;:::o;26122:218::-;26181:7;26241:1;26218:20;:18;:20::i;:::-;:24;26208:6;:34;;26200:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26296:36;26313:10;26325:6;26296:16;:36::i;:::-;26289:43;26122:218;-1:-1:-1;;26122:218:0:o;20777:386::-;20847:12;20873:14;20889;20907:26;20918:6;20926;20907:10;:26::i;:::-;21035:7;;21071:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;21071:32:0;;;;;21061:43;;;;;;21123:14;;20974:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;20974:178:0;;;;;;;20964:189;;;;;;20777:386;-1:-1:-1;;;;;20777:386:0:o;25622:226::-;25689:4;950:19;958:10;950:7;:19::i;:::-;942:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25714:23:::1;::::0;::::1;25706:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25797:43;25818:10;25830:9;25797:20;:43::i;25856:118::-:0;25907:7;25934:32;25955:10;25934:20;:32::i;:::-;25927:39;;25856:118;:::o;24207:1176::-;24313:7;;24368:26;;;;;;;;24364:986;;;-1:-1:-1;24422:12:0;24364:986;;;24468:7;;24456:54;;;;;;:68;:54;;;;;;;;;;;;;;;;24522:1;;24468:7;;;;24456:28;;:54;;;;;;;;;;;;;;;24468:7;24456:54;;;2:2:-1;;;;27:1;24;17:12;2:2;24456:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24456:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24456:54:0;:68;;;;;;:112;;;24528:40;24543:11;24556;24528:14;:40::i;:::-;24452:898;;;24604:6;;24596:63;;;;;;24604:6;24596:63;;;;;;;;;;;;;;;;;;;;;;24604:6;;;;;24596:23;;:63;;;;;;;;;;;;;;24604:6;24596:63;;;2:2:-1;;;;27:1;24;17:12;2:2;24596:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24596:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24596:63:0;;-1:-1:-1;24452:898:0;;;24692:14;24709:20;:18;:20::i;:::-;24692:37;-1:-1:-1;24749:13:0;24744:595;24776:6;24768:5;:14;24744:595;;;24812:20;24835:19;24848:5;24835:12;:19::i;:::-;24889:7;;24877:55;;;;;;:69;:55;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24889:7:0;;;;;24877:28;;:55;;;;;;;;;;;;;;24889:7;24877:55;;;2:2:-1;;;;27:1;24;17:12;2:2;24877:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24877:55:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24877:55:0;:69;;;;;;:142;;-1:-1:-1;24962:7:0;;24950:55;;;;;;:69;:55;;;;;;;;;;;;;;;;25017:1;;24962:7;;;;24950:28;;:55;;;;;;;;;;;;;;;24962:7;24950:55;;;2:2:-1;;;;27:1;24;17:12;2:2;24950:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24950:55:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;24950:55:0;:69;;;;24877:142;:187;;;;;25023:41;25038:12;25052:11;25023:14;:41::i;:::-;24873:451;;;25121:6;;25113:64;;;;;;25121:6;25113:64;;;;;;;;;;;;;;;;;;;;;;25089:21;;25121:6;;;;;25113:23;;:64;;;;;;;;;;;;;;;25121:6;25113:64;;;2:2:-1;;;;27:1;24;17:12;2:2;25113:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25113:64:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25113:64:0;25219:6;;25211:65;;;;;;25219:6;25211:65;;;;;;;;;;;;;;;;;;;;;;25113:64;;-1:-1:-1;25219:6:0;;;25211:23;;:65;;;;;25113:64;;25211:65;;;;;;;;25219:6;25211:65;;;2:2:-1;;;;27:1;24;17:12;2:2;25211:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25211:65:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;25211:65:0;;-1:-1:-1;25299:5:0;;-1:-1:-1;;25299:5:0;24873:451;-1:-1:-1;24784:7:0;;24744:595;;;;24452:898;;25367:8;-1:-1:-1;24207:1176:0;;;;;;:::o;21918:1019::-;19938:6;;22023:4;;19938:6;;19924:10;:20;19916:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22062:18:::1;22074:5;22062:11;:18::i;:::-;22061:19;:43;;;;22085:19;22097:6;22085:11;:19::i;:::-;22084:20;22061:43;22057:88;;;-1:-1:-1::0;22128:5:0::1;22121:12;;22057:88;22178:10;;22159:15;;:29;22155:73;;-1:-1:-1::0;22211:5:0::1;22204:12;;22155:73;22238:12;22253:22;22261:5;22268:6;22253:7;:22::i;:::-;22321:15;::::0;::::1;22286:22;22321:15:::0;;;:9:::1;:15;::::0;;;;;22311:9:::1;:26:::0;;22238:37;;-1:-1:-1;22286:22:0;;22311:26;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;22352:9:::0;;22311:26;;-1:-1:-1;22352:17:0::1;::::0;;::::1;:9:::0;::::1;:17;;::::0;:42:::1;;-1:-1:-1::0;22373:12:0::1;::::0;::::1;::::0;::::1;;:21;22352:42;22348:87;;;22418:5;22411:12;;;;;;22348:87;22445:15;22463:25;22474:5;22481:6;22463:10;:25::i;:::-;22445:43:::0;-1:-1:-1;22499:11:0::1;22513:19;:6:::0;22445:43;22513:19:::1;:10;:19;:::i;:::-;22587:11;::::0;22499:33;;-1:-1:-1;22543:16:0::1;::::0;22562:37:::1;::::0;22574:6;;22499:33;;22587:11:::1;;22562;:37::i;:::-;22543:56;;22621:41;22658:3;22621:32;22634:4;:18;;;22621:8;:12;;:32;;;;:::i;:::-;:36:::0;:41:::1;:36;:41;:::i;:::-;22610:52;;22704:34;22721:16;;22704:12;;:16;;:34;;;;:::i;:::-;22677:10;::::0;:24:::1;::::0;22692:8;22677:24:::1;:14;:24;:::i;:::-;:61;22673:105;;;22761:5;22754:12;;;;;;;;;22673:105;22809:18;::::0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;:32:::1;::::0;22832:8;22809:32:::1;:22;:32;:::i;:::-;22788:18;::::0;;::::1;;::::0;;;:9:::1;:18;::::0;;;;;;;;:53;;;;22857:50;;;;;;;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;22925:4;22918:11;;;;;;;19999:1;21918:1019:::0;;;;;;:::o;21497:296::-;21574:4;21591:12;21606:23;21614:6;21622;21606:7;:23::i;:::-;21675:15;;;21640:22;21675:15;;;:9;:15;;;;;;21665:9;:26;;21591:38;;-1:-1:-1;21640:22:0;;21665:26;;;;;;;;;;;;;;;;;;;21706:9;;21665:26;;-1:-1:-1;21706:17:0;;;;:9;;:17;21702:62;;21747:5;21740:12;;;;;;21702:62;-1:-1:-1;21781:4:0;;21497:296;-1:-1:-1;;;;21497:296:0:o;27548:137::-;950:19;958:10;950:7;:19::i;:::-;942:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27663:14:::1;27631:9;27641:4;27631:15;;;;;;;;;;;;;;;;;;:29;;:46;;;;27548:137:::0;;:::o;26348:181::-;950:19;958:10;950:7;:19::i;:::-;942:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26422:23:::1;::::0;::::1;26414:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26503:6;:18:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;26348:181::o;19048:22::-;;;;;;:::o;25982:132::-;26040:4;26064:42;26087:10;26099:6;26064:22;:42::i;27151:389::-;950:19;958:10;950:7;:19::i;:::-;942:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27243:19:::1;::::0;::::1;27235:57;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27332:136;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;27448:4:::1;27332:136:::0;;;;;;27303:9:::1;27:10:-1::0;;23:18;;::::1;45:23:::0;;-1:-1;27303:176:0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;27509:17:::1;:15;:17::i;:::-;27490:16;::::0;;::::1;;::::0;;;:9:::1;:16;::::0;;;;27509:21;::::1;27490:40:::0;;-1:-1:-1;27151:389:0:o;23503:696::-;23567:4;23609:10;;23591:15;;:28;23583:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23694:10;23666:15;23684:21;;;:9;:21;;;;;;23768:16;;23751:12;;:34;;;:16;:34;:::i;:::-;23724:10;;:23;;23739:7;23724:23;:14;:23;:::i;:::-;:61;;23716:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23846:36;23853:10;23865:7;23874:1;23877;23880;23846:6;:36::i;:::-;23897:11;;23893:276;;23924:8;;:34;;;;;;23938:10;23924:34;;;;;;;;;;;;:8;;;;;:13;;:34;;;;;;;;;;;;;;;:8;;:34;;;2:2:-1;;;;27:1;24;17:12;2:2;23924:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23924:34:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;24007:10:0;23997:21;;;;:9;23924:34;23997:21;;;;;:34;;24023:7;23997:34;:25;:34;:::i;:::-;23983:10;23973:21;;;;:9;:21;;;;;;;;;:58;;;;24051:29;;;;;;;;;;;;;;;;;;;;;;;;24108:10;;:23;;24123:7;24108:23;:14;:23;:::i;:::-;24095:10;:36;-1:-1:-1;24153:4:0;;-1:-1:-1;24146:11:0;;23893:276;-1:-1:-1;24186:5:0;;23503:696;-1:-1:-1;;;;23503:696:0:o;791:109::-;950:19;958:10;950:7;:19::i;:::-;942:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;864:28:::1;883:8;864:18;:28::i;:::-;791:109:::0;:::o;25391:223::-;25458:4;950:19;958:10;950:7;:19::i;:::-;942:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25483:23:::1;::::0;::::1;25475:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25566:40;25584:10;25596:9;25566:17;:40::i;19077:21::-:0;;;;;;:::o;27693:123::-;950:19;958:10;950:7;:19::i;:::-;942:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27800:8:::1;27774:9;27784:4;27774:15;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:23;;:34:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;27693:123:0:o;19198:45::-;;;;:::o;12545:149::-;12619:7;12662:22;12666:3;12678:5;12662:3;:22::i;11595:149::-;11668:4;11692:44;11700:3;11720:14;;;11692:7;:44::i;12074:117::-;12137:7;12164:19;12172:3;12164:7;:19::i;21171:177::-;21246:12;21281:59;21305:23;21313:6;21321;21305:7;:23::i;:::-;21296:41;;;:43;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21296:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21296:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21296:43:0;21286:4;;21281:59;;;;;:14;:59;:::i;2401:132::-;2459:7;2486:39;2490:1;2493;2486:39;;;;;;;;;;;;;;;;;:3;:39::i;1922:471::-;1980:7;2225:6;2221:47;;-1:-1:-1;2255:1:0;2248:8;;2221:47;2292:5;;;2296:1;2292;:5;:1;2316:5;;;;;:10;2308:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1389:181;1447:7;1479:5;;;1503:6;;;;1495:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11830:158;11910:4;11934:46;11944:3;11964:14;;;11934:9;:46::i;23065:430::-;23284:15;;;23160;23284;;;:6;:15;;;;;;;;:17;;;;;;;;;23251:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;23251:51:0;;;;;23241:62;;;;;;;;;23188:116;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;23188:116:0;;;;;;23178:127;;;;;;;;;23343:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23178:127;;23160:15;23284:17;;23343:27;;;;;23284:15;-1:-1:-1;23343:27:0;;;;;;;;;;;23284:17;23343:27;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23343:27:0;;;;;;-1:-1:-1;;23389:30:0;;;;;;;:61;;;23443:7;23423:27;;:16;:27;;;23389:61;23381:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23065:430;;;;;;;:::o;1578:136::-;1636:7;1663:43;1667:1;1670;1663:43;;;;;;;;;;;;;;;;;:3;:43::i;554:229::-;628:22;;;620:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;730:6;;;709:38;;;;;;;730:6;;;709:38;;;758:6;:17;;;;;;;;;;;;;;;554:229::o;11276:143::-;11346:4;11370:41;11375:3;11395:14;;;11370:4;:41::i;9218:204::-;9313:18;;9285:7;;9313:26;-1:-1:-1;9305:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9396:3;:11;;9408:5;9396:18;;;;;;;;;;;;;;;;9389:25;;9218:204;;;;:::o;6898:1556::-;6964:4;7103:19;;;:12;;;:19;;;;;;7139:15;;7135:1312;;7573:18;;7524:14;;;;;7573:22;;;;7500:21;;7573:3;;:22;;7860;;;;;;;;;;;;;;7840:42;;8006:9;7977:3;:11;;7989:13;7977:26;;;;;;;;;;;;;;;;;;;:38;;;;8083:23;;;8125:1;8083:12;;;:23;;;;;;8109:17;;;8083:43;;8248:17;;8083:3;;8248:17;;;;;;;;;;;;;;;;;;;;;;8343:3;:12;;:19;8356:5;8343:19;;;;;;;;;;;8336:26;;;8386:4;8379:11;;;;;;;;7135:1312;8430:5;8423:12;;;;;8755:109;8838:18;;8755:109::o;2541:345::-;2627:7;2729:12;2722:5;2714:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;2714:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2753:9;2769:1;2765;:5;;;;;;;2541:345;-1:-1:-1;;;;;2541:345:0:o;8540:129::-;8613:4;8637:19;;;:12;;;;;:19;;;;;;:24;;;8540:129::o;1722:192::-;1808:7;1844:12;1836:6;;;;1828:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;1828:29:0;-1:-1:-1;;;1880:5:0;;;1722:192::o;6308:414::-;6371:4;6393:21;6403:3;6408:5;6393:9;:21::i;:::-;6388:327;;-1:-1:-1;27:10;;39:1;23:18;;;45:23;;6431:11:0;:23;;;;;;;;;;;;;6614:18;;6592:19;;;:12;;;:19;;;;;;:40;;;;6647:11;;6388:327;-1:-1:-1;6698:5:0;6691:12;

Swarm Source

ipfs://cb705d490f2def64d81f4d0c0d256ad7b4470486f1161701f62fd21b117b0e0d
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.