Contract 0x1715c5B5091B05A36F229F7495913f4a1F307aA6 1

 

Contract Overview

Balance:
45.47836640290529551 BNB

BNB Value:
$22,003.34 (@ $483.82/BNB)

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x122067788b30d23238e4b893f2cff243c090a143b0621d27c047b1f1b670c422Claim Dividend119179792021-10-19 21:01:073 hrs 39 mins ago0x32dab923e8a4b704980e88d408f57b7598e0c5e7 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.0001112
0x1bf4811fb9eb7db6bf9d94ddc6379317bd7216b44586d27b2f2663bd9f73de4dClaim Dividend119145312021-10-19 17:44:036 hrs 56 mins ago0x385dea237e900eca3ef6982ee770474440de6c88 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0xeb01aff2cebab2e9adb05164888d367aeec9e4ceddf5be431295083ef6ab16c2Claim Dividend119117912021-10-19 15:23:539 hrs 16 mins ago0xf7114aea0f833f3b3a0df9474bdaf76696c2a09b IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0xf00e93b8cd989b6b2d171806fffe10294dcc8ef59f77512468335daa2a82d235Claim Dividend119098322021-10-19 13:43:4410 hrs 56 mins ago0x3a3e5a01be22c5a0a41ef927a06e2d954b652f9f IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0xc9f3d1a80af449bf53406b2d574bcca943d2cc50430a8ca453ddd833e873315fClaim Dividend119090612021-10-19 13:05:1011 hrs 35 mins ago0x619e9a67cc80925ceaefbe9bdef161ee3b0cfe0f IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0x49dce9f219f05efbc9035b7b06cc4376e018a64b989cf3c636b206dcd6825f76Claim Dividend118928732021-10-18 23:32:141 day 1 hr ago0x619e9a67cc80925ceaefbe9bdef161ee3b0cfe0f IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0x104c56732be81632c94fad7d7914542f7fb46dcaa840e1b33b62a801a5889f5fClaim Dividend118796792021-10-18 12:27:021 day 12 hrs ago0xf7114aea0f833f3b3a0df9474bdaf76696c2a09b IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0xfccb2963aac30f62465413a6f0d3c4b69a60ff087187b14d8c36dfd89bef22d1Claim Dividend118770422021-10-18 10:14:331 day 14 hrs ago0x042527e109303e617cf432710f415d29c3896b55 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.0001112
0x84c78c6944a4c6a5259d384439a1e0078e2228a282267467421ba57a71d6e3b0Claim Dividend118649012021-10-18 0:06:112 days 34 mins ago0x0b72e84e9503e700570a0fb23be0f252058d2e45 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.00013963
0xce90cad9a0036e2c56cd30f9bfaeec17ad1fda062fbc59d98c6f3584b632518aClaim Dividend118600562021-10-17 20:02:132 days 4 hrs ago0x619e9a67cc80925ceaefbe9bdef161ee3b0cfe0f IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0xf36212c0a1c8a9551b63b0370e4fd6375d5caae66edd70bc6618312aa381f811Claim Dividend118527452021-10-17 13:53:502 days 10 hrs ago0x1ded9b87e802e38e1a618ac9f2d05993450706ed IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0xdc43676d3a699a22ee6df5cad8e63f3fbe4b8a60d0cc5ba8e62aacee473c9272Claim Dividend118494362021-10-17 11:05:062 days 13 hrs ago0xa4a91638919a45a0b485dbb57d6bfdea9051b129 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.00013963
0x6311057550443b7238194d39396bb202dc3d62ab2a4fb298df53f7202bad3d9bClaim Dividend118494292021-10-17 11:04:452 days 13 hrs ago0xa4a91638919a45a0b485dbb57d6bfdea9051b129 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0xbe89bd0a6d81755cd7420ec017ac4b438f20e227972969a7ea43dd0800cf40bdClaim Dividend118440922021-10-17 6:37:542 days 18 hrs ago0x619e9a67cc80925ceaefbe9bdef161ee3b0cfe0f IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0x739f626d1e3afe7b8f28133bd097f50b8c0fabe65922cbde22d2ea05380f916bClaim Dividend118429712021-10-17 5:41:512 days 18 hrs ago0xd5069e1dba91e82530da07d784387d022f26b652 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.00013963
0xf12329396474a548fe3d4026e7166ce1fff607971ff2e4c4baabc3695eb8dc64Claim Dividend118428652021-10-17 5:36:332 days 19 hrs ago0xd5069e1dba91e82530da07d784387d022f26b652 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.00013963
0xfc8c3c1eb9b8088689fd399c8107cd1e65e69be537b60dec8ad90b97146f2b1bClaim Dividend118428272021-10-17 5:34:392 days 19 hrs ago0xd5069e1dba91e82530da07d784387d022f26b652 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0xbc0784372689daf1e6b05796b3a12845605ba231058c1456ba217e239369dff5Claim Dividend118367132021-10-17 0:28:533 days 11 mins ago0x619e9a67cc80925ceaefbe9bdef161ee3b0cfe0f IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0xbead218586f3385bd3fc3d091cd2b82d4e6d0735b07c260baec2831d942e91eaClaim Dividend118329532021-10-16 21:20:413 days 3 hrs ago0xd77377f983086385a3ed11b2f5ee97d271898757 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.0001112
0xe851d0974e66ac60ed439d6b18e4f36312ab23ef2062f74d32b1c0f40df12989Claim Dividend118321862021-10-16 20:42:203 days 3 hrs ago0xf35fa4d42b084121691b1e49ee7bd0e1174d3264 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000457045
0x3e03acac4a05c122566b0e55cd5d28aa287dc95949afa5d1ed3731bd469feda9Claim Dividend118284012021-10-16 17:30:083 days 7 hrs ago0x10870c02b4650e694188ace8baababfd8908cdb2 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.0001112
0xdfc4fa01873147ea93755a6e3206c9e757aa76b065836090a9712d9a392c5378Claim Dividend118283472021-10-16 17:27:263 days 7 hrs ago0x619e9a67cc80925ceaefbe9bdef161ee3b0cfe0f IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0xb227540e4a6e1142deb0f2cecd69b66b5a20b85163ff768d436ce911ba324d0bClaim Dividend118184642021-10-16 9:10:063 days 15 hrs ago0x29e6d907237515fcc89d0e15e31c51d895a629a2 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.000307045
0xdddfdfaf050ff99d4a24490007c17db479bc9f0c46c695e4e658277ef4208ba8Claim Dividend118158812021-10-16 7:00:023 days 17 hrs ago0x5a160711f9f6e2a3f22aa0e3da598cf24b99a626 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.0001112
0x48c51118d612be5635896aab8602c316f587049fb833b2c43719ade344741d6eClaim Dividend118042112021-10-15 21:13:334 days 3 hrs ago0xf7cae367181fe42b91b7ca0d6c7028cea1d9e934 IN  0x1715c5b5091b05a36f229f7495913f4a1f307aa60 BNB0.0001112
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x5935f7b76a394b955a3556e6e671b56b74ac518dc0af70c9f7d579bd88c2a078119219522021-10-20 0:21:0619 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60xf28b1737f41fa16e755a15284b180a2a2d79e91d0.00057393504352256 BNB
0x5935f7b76a394b955a3556e6e671b56b74ac518dc0af70c9f7d579bd88c2a078119219522021-10-20 0:21:0619 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x07fd68733cb6bd6429c20e86bb3f132bc6ae1e6f0.000820632861884756 BNB
0x5935f7b76a394b955a3556e6e671b56b74ac518dc0af70c9f7d579bd88c2a078119219522021-10-20 0:21:0619 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x8409c0991dd52c7be2f4f7ba9f6616b12e2c05330.000918293437973638 BNB
0x5935f7b76a394b955a3556e6e671b56b74ac518dc0af70c9f7d579bd88c2a078119219522021-10-20 0:21:0619 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x8fcbcb33407ed57d742601927aabf7928522c1cb0.001129927678421535 BNB
0x5935f7b76a394b955a3556e6e671b56b74ac518dc0af70c9f7d579bd88c2a078119219522021-10-20 0:21:0619 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x7758bb0538fe9cc1ad7dfff8440f597b1870182b0.001643531168613142 BNB
0x5935f7b76a394b955a3556e6e671b56b74ac518dc0af70c9f7d579bd88c2a078119219522021-10-20 0:21:0619 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x6c010e0ddadbee7b0db58c98fcdef6afe01c3ea90.002314715290095593 BNB
0x5935f7b76a394b955a3556e6e671b56b74ac518dc0af70c9f7d579bd88c2a078119219522021-10-20 0:21:0619 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60xe35e314052bc1887b98d9899559eb95a0083756c0.000596275858723348 BNB
0x5935f7b76a394b955a3556e6e671b56b74ac518dc0af70c9f7d579bd88c2a078119219522021-10-20 0:21:0619 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x7858f547bc89d98350257da54e8786310ffb4db90.000599533142510262 BNB
0x60a5d6654fbb2a7a84340386a4209a42a1566323f20f680f7f27bce8a2907626119216842021-10-20 0:07:4132 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x9e898d2838706de3dcc6d2cc9d4da9e3889ecbbb0.0005828666059857 BNB
0x60a5d6654fbb2a7a84340386a4209a42a1566323f20f680f7f27bce8a2907626119216842021-10-20 0:07:4132 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x959b6c8d5daf52b1f8c7b6efa1252b2b5f3d7f5d0.003232767472099728 BNB
0x60a5d6654fbb2a7a84340386a4209a42a1566323f20f680f7f27bce8a2907626119216842021-10-20 0:07:4132 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x8daa32d200d02796f488d0b4164ee29bf76215c10.000716181034234148 BNB
0x60a5d6654fbb2a7a84340386a4209a42a1566323f20f680f7f27bce8a2907626119216842021-10-20 0:07:4132 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x47b2de6b05229ffed1bac03255f85a92dd372bf20.000553723269872321 BNB
0x60a5d6654fbb2a7a84340386a4209a42a1566323f20f680f7f27bce8a2907626119216842021-10-20 0:07:4132 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60xe2fa3fac7d2962deb664eb87ab2cb134b280fc620.026824736717080423 BNB
0x60a5d6654fbb2a7a84340386a4209a42a1566323f20f680f7f27bce8a2907626119216842021-10-20 0:07:4132 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60xa9dbd347c7cd9603381be3970d68af53a85271240.001641620563629629 BNB
0x60a5d6654fbb2a7a84340386a4209a42a1566323f20f680f7f27bce8a2907626119216842021-10-20 0:07:4132 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60xe686d3f140991a4241d4e79aa4c5737cbbff1c210.000553158809027711 BNB
0x60a5d6654fbb2a7a84340386a4209a42a1566323f20f680f7f27bce8a2907626119216842021-10-20 0:07:4132 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60xb68b098b111a929b53741e9f560ab4a17197bc4f0.00158098168203136 BNB
0xb996bcb5f1eb5ad1a13dca4c034b820aebd3143e029e00d70a1a69d00db3c38f119213372021-10-19 23:50:2050 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x39bac5f519f0dfb72d2a8d80b3fb52d95b7814080.000042076356466655 BNB
0xb80e8ab41a51e55b5da5122b4bed69965cdd8dc7ccf2810d0bb3c462694f00cf119204792021-10-19 23:06:481 hr 33 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x18976989ae087776a8840acc0f2a1e5163c0216d0.000407947737045899 BNB
0xb80e8ab41a51e55b5da5122b4bed69965cdd8dc7ccf2810d0bb3c462694f00cf119204792021-10-19 23:06:481 hr 33 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x61ef014259c0aa1889d82fae706edc9aad4dae820.012681567661588334 BNB
0xb80e8ab41a51e55b5da5122b4bed69965cdd8dc7ccf2810d0bb3c462694f00cf119204792021-10-19 23:06:481 hr 33 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60xb489ca93bff61e46f60bd512ce1fed5b3770acb40.000571021765693018 BNB
0xb80e8ab41a51e55b5da5122b4bed69965cdd8dc7ccf2810d0bb3c462694f00cf119204792021-10-19 23:06:481 hr 33 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60xfe697f601843c4abea1653c3106342aab049f82b0.000567609620978018 BNB
0xb80e8ab41a51e55b5da5122b4bed69965cdd8dc7ccf2810d0bb3c462694f00cf119204792021-10-19 23:06:481 hr 33 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x504ad23cfe8f269f02b789490eb7932d2296ad650.00076220305845 BNB
0xb80e8ab41a51e55b5da5122b4bed69965cdd8dc7ccf2810d0bb3c462694f00cf119204792021-10-19 23:06:481 hr 33 mins ago SuperFuel: SFUEL Token 0x1715c5b5091b05a36f229f7495913f4a1f307aa60.199547913674946367 BNB
0xb80e8ab41a51e55b5da5122b4bed69965cdd8dc7ccf2810d0bb3c462694f00cf119204792021-10-19 23:06:481 hr 33 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x18976989ae087776a8840acc0f2a1e5163c0216d0.001431195272254225 BNB
0x0cc3f4644215b9e2b38d48b316d8bdc63473fd8cf8bd412e967ef7e696f2c3e8119202522021-10-19 22:55:271 hr 45 mins ago 0x1715c5b5091b05a36f229f7495913f4a1f307aa60x257ab60c083bf5673a92f6d4b318994265d5c7c20.000373109177779584 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SuperFuelReflector

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 17 : SuperFuelReflector.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0;

import '@pancakeswap/pancake-swap-lib/contracts/math/SafeMath.sol';
import '@pancakeswap/pancake-swap-lib/contracts/utils/Address.sol';
import '@pancakeswap/pancake-swap-lib/contracts/GSN/Context.sol';
import '@pancakeswap/pancake-swap-lib/contracts/token/BEP20/IBEP20.sol';
import "./interfaces/ISuperFuelReflector.sol";
import "./utils/LPSwapSupport.sol";
import "./utils/AuthorizedListExt.sol";
import "./utils/LockableFunction.sol";

contract SuperFuelReflector is ISuperFuelReflector, LPSwapSupport, AuthorizedListExt, LockableFunction {
    using Address for address;
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IBEP20 public rewardsToken;
    RewardType private rewardType;
    RewardInfo private rewardTokenInfo;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    mapping (address => bool) isExcludedFromDividends;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;
    uint256 private defaultDecimals = 10 ** 18;

    uint256 public minPeriod = 30 seconds;
    uint256 public minDistribution = 1;

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    constructor (address superFuel, address _router, address _rewardsToken) AuthorizedListExt(true) public {
        updateRouter(_router);
        minSpendAmount = 0;
        maxSpendAmount = 100 ether;

        if(_rewardsToken == address(0)){
            rewardType = RewardType.CURRENCY;
            rewardTokenInfo.name = "BNB";
            rewardTokenInfo.rewardAddress = address(0);
            rewardTokenInfo.decimals = defaultDecimals;
        } else {
            rewardType = RewardType.TOKEN;
            rewardsToken = IBEP20(_rewardsToken);
            rewardTokenInfo.name = rewardsToken.name();
            rewardTokenInfo.rewardAddress = _rewardsToken;
            rewardTokenInfo.decimals = 10 ** uint256(rewardsToken.decimals());
        }
        isExcludedFromDividends[superFuel] = true;
        isExcludedFromDividends[address(this)] = true;
        isExcludedFromDividends[deadAddress] = true;

        address owner1 = address(0x8427F4702831667Fd58Fb5a652F1c795e2B8E942);
        address owner2 = address(0xa4a91638919a45A0B485DBb57D6BFdeA9051B129);
        authorizedCaller[owner1] = true;
        authorizedCaller[owner2] = true;

        authorizedCaller[superFuel] = true;
        _owner = superFuel;
    }

    function rewardCurrency() public view override returns(string memory){
        return rewardTokenInfo.name;
    }

    function excludeFromReward(address shareholder, bool shouldExclude) external override onlyOwner {
        isExcludedFromDividends[shareholder] = shouldExclude;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override authorized {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyOwner {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    receive() external payable{
        if(!inSwap)
            swap();
    }

    function deposit() external payable override onlyOwner {
        if(!inSwap)
            swap();
    }

    function swap() lockTheSwap private {
        uint256 amount;
        if(rewardType == RewardType.TOKEN) {
            uint256 contractBalance = address(this).balance;
            uint256 balanceBefore = rewardsToken.balanceOf(address(this));

            swapCurrencyForTokensAdv(address(rewardsToken), contractBalance, address(this));

            amount = rewardsToken.balanceOf(address(this)).sub(balanceBefore);
        } else {
            amount = msg.value;
        }

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function setRewardToCurrency(bool andSwap) external override authorized {
        require(rewardType != RewardType.CURRENCY, "Rewards already set to reflect currency");
        if(!inSwap)
            resetToCurrency(andSwap);
    }

    function resetToCurrency(bool andSwap) private lockTheSwap {
        uint256 contractBalance = rewardsToken.balanceOf(address(this));
        if(contractBalance > rewardTokenInfo.decimals && andSwap)
            swapTokensForCurrencyAdv(address(rewardsToken), contractBalance, address(this));
        rewardsToken = IBEP20(0);
        totalDividends = address(this).balance;
        dividendsPerShare = dividendsPerShareAccuracyFactor.mul(totalDividends).div(totalShares);

        rewardTokenInfo.name = "BNB";
        rewardTokenInfo.rewardAddress = address(0);
        rewardTokenInfo.decimals = defaultDecimals;

        rewardType = RewardType.CURRENCY;
    }

    function setRewardToToken(address _tokenAddress, bool andSwap) external override authorized {
        require(rewardType != RewardType.TOKEN || _tokenAddress != address(rewardsToken), "Rewards already set to reflect this token");
        if(!inSwap)
            resetToToken(_tokenAddress, andSwap);
    }

    function resetToToken(address _tokenAddress, bool andSwap) private lockTheSwap {
        uint256 contractBalance;
        if(rewardType == RewardType.TOKEN && andSwap){
            contractBalance = rewardsToken.balanceOf(address(this));
            if(contractBalance > rewardTokenInfo.decimals)
                swapTokensForCurrencyAdv(address(rewardsToken), contractBalance, address(this));
        }
        contractBalance = address(this).balance;
        swapCurrencyForTokensAdv(_tokenAddress, contractBalance, address(this));

        rewardsToken = IBEP20(payable(_tokenAddress));
        totalDividends = rewardsToken.balanceOf(address(this));
        dividendsPerShare = dividendsPerShareAccuracyFactor.mul(totalDividends).div(totalShares);

        rewardTokenInfo.name = rewardsToken.name();
        rewardTokenInfo.rewardAddress = _tokenAddress;
        rewardTokenInfo.decimals = 10 ** uint256(rewardsToken.decimals());

        rewardType = RewardType.TOKEN;
    }

    function _approve(address, address, uint256) internal override {
        require(false);
    }

    function process(uint256 gas) external override onlyOwner {
        if(!locked){
            _process(gas);
        }
    }
    function _process(uint256 gas) private lockFunction {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
            && getUnpaidEarnings(shareholder) > minDistribution && !isExcludedFromDividends[shareholder];
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0 || isExcludedFromDividends[shareholder]){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
            totalDistributed = totalDistributed.add(amount);

            if(rewardType == RewardType.TOKEN){
                rewardsToken.transfer(shareholder, amount);
            } else {
                shareholder.call{value: amount}("");
            }
        }
    }

    function claimDividend() external {
        distributeDividend(msg.sender);
    }

    function claimDividendFor(address shareholder) external override onlyOwner {
        distributeDividend(shareholder);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

}

File 2 of 17 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.4.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, 'SafeMath: addition overflow');

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, 'SafeMath: subtraction overflow');
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    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;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, 'SafeMath: division by zero');
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, 'SafeMath: modulo by zero');
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

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

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

File 3 of 17 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.2;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, 'Address: insufficient balance');

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}('');
        require(success, 'Address: unable to send value, recipient may have reverted');
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, 'Address: low-level call failed');
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, 'Address: insufficient balance for call');
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), 'Address: call to non-contract');

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: weiValue}(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 4 of 17 : Context.sol
// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity >=0.4.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor() internal {}

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 5 of 17 : IBEP20.sol
// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity >=0.4.0;

interface IBEP20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the token decimals.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the token symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the token name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address _owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 6 of 17 : ISuperFuelReflector.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0;

import "./IBaseDistributor.sol";
import "../utils/AuthorizedList.sol";

interface ISuperFuelReflector is IBaseDistributor, IAuthorizedListExt, IAuthorizedList {

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function process(uint256 gas) external;

    function setRewardToCurrency(bool andSwap) external;
    function setRewardToToken(address _tokenAddress, bool andSwap) external;
    function excludeFromReward(address shareholder, bool shouldExclude) external;
    function claimDividendFor(address shareholder) external;
}

File 7 of 17 : LPSwapSupport.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0;

/**
There are far too many uses for the LP swapping pool.
Rather than rewrite them, this contract performs them for us and uses both generic and specific calls.
-The Dev
*/
import '@pancakeswap/pancake-swap-lib/contracts/token/BEP20/IBEP20.sol';
import '@pancakeswap/pancake-swap-lib/contracts/math/SafeMath.sol';
import '@pancakeswap-libs/pancake-swap-core/contracts/interfaces/IPancakePair.sol';
import '@pancakeswap-libs/pancake-swap-core/contracts/interfaces/IPancakeFactory.sol';
import 'pancakeswap-peripheral/contracts/interfaces/IPancakeRouter02.sol';
import "./AuthorizedList.sol";

abstract contract LPSwapSupport is AuthorizedList {
    using SafeMath for uint256;
    event UpdateRouter(address indexed newAddress, address indexed oldAddress);
    event UpdatePair(address indexed newAddress, address indexed oldAddress);
    event UpdateLPReceiver(address indexed newAddress, address indexed oldAddress);
    event SwapAndLiquifyEnabledUpdated(bool enabled);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 currencyReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    bool internal inSwap;
    bool public swapsEnabled = true;

    uint256 public minSpendAmount = 0.001 ether;
    uint256 public maxSpendAmount = 1 ether;

    IPancakeRouter02 public pancakeRouter;
    address public pancakePair;
    address public liquidityReceiver = deadAddress;
    address public deadAddress = 0x000000000000000000000000000000000000dEaD;

    function _approve(address owner, address spender, uint256 tokenAmount) internal virtual;

    function updateRouter(address newAddress) public authorized {
        require(newAddress != address(pancakeRouter), "The router is already set to this address");
        emit UpdateRouter(newAddress, address(pancakeRouter));
        pancakeRouter = IPancakeRouter02(newAddress);
    }

    function updateLiquidityReceiver(address receiverAddress) external onlyOwner{
        require(receiverAddress != liquidityReceiver, "LP is already sent to that address");
        emit UpdateLPReceiver(receiverAddress, liquidityReceiver);
        liquidityReceiver = receiverAddress;
    }

    function updateRouterAndPair(address newAddress) public virtual authorized {
        if(newAddress != address(pancakeRouter)){
            updateRouter(newAddress);
        }
        address _pancakeswapV2Pair = IPancakeFactory(pancakeRouter.factory()).createPair(address(this), pancakeRouter.WETH());
        if(_pancakeswapV2Pair != pancakePair){
            updateLPPair(_pancakeswapV2Pair);
        }
    }

    function updateLPPair(address newAddress) public virtual authorized {
        require(newAddress != pancakePair, "The LP Pair is already set to this address");
        emit UpdatePair(newAddress, pancakePair);
        pancakePair = newAddress;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public authorized {
        swapsEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function swapAndLiquify(uint256 tokens) internal {
        // split the contract balance into halves
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for
        swapTokensForCurrency(half);

        // how much did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForCurrency(uint256 tokenAmount) internal {
        swapTokensForCurrencyAdv(address(this), tokenAmount, address(this));
    }

    function swapTokensForCurrencyAdv(address tokenAddress, uint256 tokenAmount, address destination) internal {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = tokenAddress;
        path[1] = pancakeRouter.WETH();

        if(tokenAddress != address(this)){
            IBEP20(tokenAddress).approve(address(pancakeRouter), tokenAmount);
        } else {
            _approve(address(this), address(pancakeRouter), tokenAmount);
        }

        // make the swap
        pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            destination,
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 cAmount) private {

        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(pancakeRouter), tokenAmount);

        // add the liquidity
        pancakeRouter.addLiquidityETH{value: cAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityReceiver,
            block.timestamp
        );
    }

    function swapCurrencyForTokens(uint256 amount) internal {
        swapCurrencyForTokensAdv(address(this), amount, address(this));
    }

    function swapCurrencyForTokensAdv(address tokenAddress, uint256 amount, address destination) internal {
        // generate the pair path of token
        address[] memory path = new address[](2);
        path[0] = pancakeRouter.WETH();
        path[1] = tokenAddress;
        if(amount > address(this).balance){
            amount = address(this).balance;
        }
        if(amount > maxSpendAmount){
            amount = maxSpendAmount;
        }
        if(amount < minSpendAmount) {return;}

        // make the swap
        pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            destination,
            block.timestamp.add(400)
        );
    }

    function updateSwapRange(uint256 minAmount, uint256 maxAmount) external authorized {
        require(minAmount <= maxAmount, "Minimum must be less than maximum");
        minSpendAmount = minAmount;
        maxSpendAmount = maxAmount;
    }
}

File 8 of 17 : AuthorizedListExt.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

import "../interfaces/IAuthorizedList.sol";
import "./AuthorizedList.sol";

contract AuthorizedListExt is IAuthorizedListExt, AuthorizedList {
    bool private multiAuth;

    constructor(bool allowNonOwnerAuths) public AuthorizedList() {
        multiAuth = allowNonOwnerAuths;
    }

    function authorizeByAuthorized(address authAddress) external virtual override authorized {
        require(multiAuth, "Option not set to allow this function");
        authorizedCaller[authAddress] = true;
        emit AuthorizationUpdated(authAddress, true);
    }
}

File 9 of 17 : LockableFunction.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

abstract contract LockableFunction {
    bool internal locked;

    modifier lockFunction {
        locked = true;
        _;
        locked = false;
    }
}

File 10 of 17 : IBaseDistributor.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

interface IBaseDistributor {
    enum RewardType{
        TOKEN,
        CURRENCY
    }

    struct RewardInfo{
        string name;
        address rewardAddress;
        uint256 decimals;
    }

    function deposit() external payable;
    function rewardCurrency() external view returns(string memory);

}

File 11 of 17 : AuthorizedList.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

import '@pancakeswap/pancake-swap-lib/contracts/GSN/Context.sol';
import '@pancakeswap/pancake-swap-lib/contracts/utils/Address.sol';
import "./Ownable.sol";
import "../interfaces/IAuthorizedList.sol";

contract AuthorizedList is IAuthorizedList, Context, Ownable
{
    using Address for address;

    event AuthorizationUpdated(address indexed user, bool authorized);
    event AuthorizationRenounced(address indexed user);

    mapping(address => bool) internal authorizedCaller;

    modifier authorized() {
        require(authorizedCaller[_msgSender()] || _msgSender() == _owner, "You are not authorized to use this function");
        require(_msgSender() != address(0), "Zero address is not a valid caller");
        _;
    }

    constructor() public Ownable() {
        authorizedCaller[_msgSender()] = true;
    }

    function authorizeCaller(address authAddress, bool shouldAuthorize) external virtual override onlyOwner {
        authorizedCaller[authAddress] = shouldAuthorize;
        emit AuthorizationUpdated(authAddress, shouldAuthorize);
    }

    function renounceAuthorization() external authorized {
        authorizedCaller[_msgSender()] = false;
        emit AuthorizationRenounced(_msgSender());
    }
}

File 12 of 17 : Ownable.sol
// SPDX-License-Identifier: MIT

import '@pancakeswap/pancake-swap-lib/contracts/GSN/Context.sol';

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
pragma solidity >=0.6.0;
abstract contract Ownable is Context {
    address public _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() internal {
        _owner = _msgSender();
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
    * @dev Leaves the contract without owner. It will not be possible to call
    * `onlyOwner` functions anymore. Can only be called by the current owner.
    *
    * NOTE: Renouncing ownership will leave the contract without an owner,
    * thereby removing any functionality that is only available to the owner.
    */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
        _previousOwner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
        _previousOwner = newOwner;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is not unlockable yet");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

File 13 of 17 : IAuthorizedList.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

interface IAuthorizedList {
    function authorizeCaller(address authAddress, bool shouldAuthorize) external;
}

interface IAuthorizedListExt {
    function authorizeByAuthorized(address authAddress) external;
}

File 14 of 17 : IPancakePair.sol
pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

File 15 of 17 : IPancakeFactory.sol
pragma solidity >=0.5.0;

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

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

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

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

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

File 16 of 17 : IPancakeRouter02.sol
pragma solidity >=0.6.2;

import './IPancakeRouter01.sol';

interface IPancakeRouter02 is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

File 17 of 17 : IPancakeRouter01.sol
pragma solidity >=0.6.2;

interface IPancakeRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 100
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"superFuel","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_rewardsToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"}],"name":"AuthorizationRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"authorized","type":"bool"}],"name":"AuthorizationUpdated","type":"event"},{"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":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"currencyReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateLPReceiver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdatePair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateRouter","type":"event"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"authAddress","type":"address"}],"name":"authorizeByAuthorized","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"authAddress","type":"address"},{"internalType":"bool","name":"shouldAuthorize","type":"bool"}],"name":"authorizeCaller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"claimDividendFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"dividendsPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsPerShareAccuracyFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"},{"internalType":"bool","name":"shouldExclude","type":"bool"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSpendAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSpendAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeRouter","outputs":[{"internalType":"contract IPancakeRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"process","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceAuthorization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardCurrency","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IBEP20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"andSwap","type":"bool"}],"name":"setRewardToCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"bool","name":"andSwap","type":"bool"}],"name":"setRewardToToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","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":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateLPPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiverAddress","type":"address"}],"name":"updateLiquidityReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minAmount","type":"uint256"},{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"updateSwapRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526004805461ff00191661010017905566038d7ea4c68000600555670de0b6b3a76400006006819055600a8054600980546001600160a01b03199081166001600160a01b038416179091551661dead1790556ec097ce7bc90715b34b9f1000000000601955601a55601e601b556001601c553480156200008257600080fd5b5060405162003c8938038062003c8983398181016040526060811015620000a857600080fd5b50805160208201516040909201519091906001620000c562000487565b600080546001600160a01b0319166001600160a01b0392909216919091178155600190600390620000f562000487565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055600a805460ff60a01b1916600160a01b9215159290920291909117905562000145826200048b565b600060055568056bc75e2d631000006006556001600160a01b038116620001c257600c805460ff60a01b1916600160a01b1790556040805180820190915260038082526221272160e91b6020909201918252620001a591600d916200061b565b50600e80546001600160a01b0319169055601a54600f55620003bf565b600c80546001600160a81b0319166001600160a01b038381169190911791829055604080516306fdde0360e01b8152905192909116916306fdde0391600480820192600092909190829003018186803b1580156200021f57600080fd5b505afa15801562000234573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156200025e57600080fd5b81019080805160405193929190846401000000008211156200027f57600080fd5b9083019060208201858111156200029557600080fd5b8251640100000000811182820188101715620002b057600080fd5b82525081516020918201929091019080838360005b83811015620002df578181015183820152602001620002c5565b50505050905090810190601f1680156200030d5780820380516001836020036101000a031916815260200191505b50604052505081516200032892600d9250602001906200061b565b50600e80546001600160a01b0319166001600160a01b0383811691909117909155600c546040805163313ce56760e01b81529051919092169163313ce567916004808301926020929190829003018186803b1580156200038757600080fd5b505afa1580156200039c573d6000803e3d6000fd5b505050506040513d6020811015620003b357600080fd5b505160ff16600a0a600f555b50506001600160a01b0390811660008181526013602090815260408083208054600160ff1991821681179092553085528285208054821683179055600a549096168452818420805487168217905560039092527ff8a2b5dc1b27d4c5d7a3db0c412e53f2e9d0dceade3ea2d007e359e020c6bd7980548616831790557f4079d7c6d1d0b1fb7055d8e6eacca1631de2dec02800041771499dbdcc2699ea8054861683179055838352822080549094161790925581546001600160a01b031916179055620006b7565b3390565b600360006200049962000487565b6001600160a01b0316815260208101919091526040016000205460ff1680620004de57506000546001600160a01b0316620004d362000487565b6001600160a01b0316145b6200051b5760405162461bcd60e51b815260040180806020018281038252602b81526020018062003c35602b913960400191505060405180910390fd5b60006200052762000487565b6001600160a01b031614156200056f5760405162461bcd60e51b815260040180806020018281038252602281526020018062003c136022913960400191505060405180910390fd5b6007546001600160a01b0382811691161415620005be5760405162461bcd60e51b815260040180806020018281038252602981526020018062003c606029913960400191505060405180910390fd5b6007546040516001600160a01b03918216918316907f2c6fb4d5ff9fad6ecf2e09cd64cbc9aad92a8b9d2cc0e5c3ddef9b529b0b5ffd90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200065e57805160ff19168380011785556200068e565b828001600101855582156200068e579182015b828111156200068e57825182559160200191906001019062000671565b506200069c929150620006a0565b5090565b5b808211156200069c5760008155600101620006a1565b61354c80620006c76000396000f3fe6080604052600436106102605760003560e01c8063b8544dd711610144578063e2d2e219116100b6578063efca2eed1161007a578063efca2eed14610828578063f0fc6bca1461083d578063f2fde38b14610852578063fcc55e5814610885578063ffb2c479146108c0578063ffd49c84146108ea57610279565b8063e2d2e2191461074a578063e51b644a1461075f578063ed9a48ba14610792578063eda4763f146107c5578063edf35253146107f557610279565b8063c851cc3211610108578063c851cc32146105f5578063ce7c2ac214610628578063d0e30db014610679578063d1af0c7d14610681578063d6c7cc8b14610696578063dd4670641461072057610279565b8063b8544dd714610561578063b8c9d25c14610576578063c05e93601461058b578063c21ebd07146105b4578063c49b9a80146105c957610279565b80635528ebd7116101dd578063997664d7116101a1578063997664d71461049f578063a69df4b5146104b4578063b2bdfa7b146104c9578063b6742021146104de578063b68a0d2514610511578063b6c523241461054c57610279565b80635528ebd714610401578063715018a6146104345780637b3d5642146104495780638da5cb5b1461045e5780638f7c9f8c1461047357610279565b80632d48e896116102245780632d48e8961461035757806335c6f9bc146103875780633a98ef39146103c25780634184c919146103d75780634fab0ae8146103ec57610279565b806311ce023d1461027e57806314b6ca96146102a5578063264d26dd146102de57806327c8f8351461030f57806328fd31981461032457610279565b366102795760045460ff16610277576102776108ff565b005b600080fd5b34801561028a57600080fd5b50610293610a99565b60408051918252519081900360200190f35b3480156102b157600080fd5b50610277600480360360408110156102c857600080fd5b506001600160a01b038135169060200135610a9f565b3480156102ea57600080fd5b506102f3610c05565b604080516001600160a01b039092168252519081900360200190f35b34801561031b57600080fd5b506102f3610c14565b34801561033057600080fd5b506102936004803603602081101561034757600080fd5b50356001600160a01b0316610c23565b34801561036357600080fd5b506102776004803603604081101561037a57600080fd5b5080359060200135610caf565b34801561039357600080fd5b50610277600480360360408110156103aa57600080fd5b506001600160a01b0381351690602001351515610d93565b3480156103ce57600080fd5b50610293610e16565b3480156103e357600080fd5b50610293610e1c565b3480156103f857600080fd5b50610293610e22565b34801561040d57600080fd5b506102776004803603602081101561042457600080fd5b50356001600160a01b0316610e28565b34801561044057600080fd5b50610277610fa7565b34801561045557600080fd5b50610293611043565b34801561046a57600080fd5b506102f3611049565b34801561047f57600080fd5b506102776004803603602081101561049657600080fd5b50351515611058565b3480156104ab57600080fd5b5061029361119e565b3480156104c057600080fd5b506102776111a4565b3480156104d557600080fd5b506102f3611292565b3480156104ea57600080fd5b506102776004803603602081101561050157600080fd5b50356001600160a01b03166112a1565b34801561051d57600080fd5b506102776004803603604081101561053457600080fd5b506001600160a01b0381351690602001351515611526565b34801561055857600080fd5b50610293611683565b34801561056d57600080fd5b50610277611689565b34801561058257600080fd5b506102f36117d7565b34801561059757600080fd5b506105a06117e6565b604080519115158252519081900360200190f35b3480156105c057600080fd5b506102f36117f4565b3480156105d557600080fd5b50610277600480360360208110156105ec57600080fd5b50351515611803565b34801561060157600080fd5b506102776004803603602081101561061857600080fd5b50356001600160a01b031661192b565b34801561063457600080fd5b5061065b6004803603602081101561064b57600080fd5b50356001600160a01b0316611aae565b60408051938452602084019290925282820152519081900360600190f35b610277611acf565b34801561068d57600080fd5b506102f3611b3b565b3480156106a257600080fd5b506106ab611b4a565b6040805160208082528351818301528351919283929083019185019080838360005b838110156106e55781810151838201526020016106cd565b50505050905090810190601f1680156107125780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561072c57600080fd5b506102776004803603602081101561074357600080fd5b5035611be0565b34801561075657600080fd5b50610293611c7e565b34801561076b57600080fd5b506102776004803603602081101561078257600080fd5b50356001600160a01b0316611c84565b34801561079e57600080fd5b50610277600480360360208110156107b557600080fd5b50356001600160a01b0316611e07565b3480156107d157600080fd5b50610277600480360360408110156107e857600080fd5b5080359060200135611f09565b34801561080157600080fd5b506102776004803603602081101561081857600080fd5b50356001600160a01b031661202c565b34801561083457600080fd5b5061029361208d565b34801561084957600080fd5b50610277612093565b34801561085e57600080fd5b506102776004803603602081101561087557600080fd5b50356001600160a01b031661209c565b34801561089157600080fd5b50610277600480360360408110156108a857600080fd5b506001600160a01b038135169060200135151561218c565b3480156108cc57600080fd5b50610277600480360360208110156108e357600080fd5b5035612244565b3480156108f657600080fd5b506102936122b6565b6004805460ff19166001179055600080600c54600160a01b900460ff16600181111561092757fe5b1415610a4f57600c54604080516370a0823160e01b8152306004820152905147926000926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561097d57600080fd5b505afa158015610991573d6000803e3d6000fd5b505050506040513d60208110156109a757600080fd5b5051600c549091506109c3906001600160a01b031683306122bc565b600c54604080516370a0823160e01b81523060048201529051610a469284926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b158015610a1457600080fd5b505afa158015610a28573d6000803e3d6000fd5b505050506040513d6020811015610a3e57600080fd5b5051906124a6565b92505050610a52565b50345b601654610a5f90826124f1565b601655601554601954610a8991610a8091610a7a908561254b565b906125a4565b601854906124f1565b601855506004805460ff19169055565b60195481565b610aa76125e6565b6000546001600160a01b03908116911614610af7576040805162461bcd60e51b81526020600482018190526024820152600080516020613460833981519152604482015290519081900360640190fd5b6001600160a01b03821660009081526014602052604090205415610b1e57610b1e826125ea565b600081118015610b4457506001600160a01b038216600090815260146020526040902054155b15610b5757610b52826127ca565b610b8a565b80158015610b7c57506001600160a01b03821660009081526014602052604090205415155b15610b8a57610b8a8261282b565b6001600160a01b038216600090815260146020526040902054601554610bbb918391610bb5916124a6565b906124f1565b6015556001600160a01b0382166000908152601460205260409020819055610be281612918565b6001600160a01b0390921660009081526014602052604090206001019190915550565b6009546001600160a01b031681565b600a546001600160a01b031681565b6001600160a01b038116600090815260146020526040812054610c4857506000610caa565b6001600160a01b038216600090815260146020526040812054610c6a90612918565b6001600160a01b038416600090815260146020526040902060010154909150808211610c9b57600092505050610caa565b610ca582826124a6565b925050505b919050565b60036000610cbb6125e6565b6001600160a01b0316815260208101919091526040016000205460ff1680610cfd57506000546001600160a01b0316610cf26125e6565b6001600160a01b0316145b610d385760405162461bcd60e51b815260040180806020018281038252602b8152602001806134a0602b913960400191505060405180910390fd5b6000610d426125e6565b6001600160a01b03161415610d885760405162461bcd60e51b81526004018080602001828103825260228152602001806133896022913960400191505060405180910390fd5b601b91909155601c55565b610d9b6125e6565b6000546001600160a01b03908116911614610deb576040805162461bcd60e51b81526020600482018190526024820152600080516020613460833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b60155481565b60055481565b601c5481565b60036000610e346125e6565b6001600160a01b0316815260208101919091526040016000205460ff1680610e7657506000546001600160a01b0316610e6b6125e6565b6001600160a01b0316145b610eb15760405162461bcd60e51b815260040180806020018281038252602b8152602001806134a0602b913960400191505060405180910390fd5b6000610ebb6125e6565b6001600160a01b03161415610f015760405162461bcd60e51b81526004018080602001828103825260228152602001806133896022913960400191505060405180910390fd5b600a54600160a01b900460ff16610f495760405162461bcd60e51b81526004018080602001828103825260258152602001806133646025913960400191505060405180910390fd5b6001600160a01b038116600081815260036020908152604091829020805460ff19166001908117909155825190815291517f2c59b8f31260880424e870332281eba93ddfef67e37d699cebe5a7ba89f7a8a69281900390910190a250565b610faf6125e6565b6000546001600160a01b03908116911614610fff576040805162461bcd60e51b81526020600482018190526024820152600080516020613460833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020613480833981519152908390a3600080546001600160a01b0319908116909155600180549091169055565b60065481565b6000546001600160a01b031690565b600360006110646125e6565b6001600160a01b0316815260208101919091526040016000205460ff16806110a657506000546001600160a01b031661109b6125e6565b6001600160a01b0316145b6110e15760405162461bcd60e51b815260040180806020018281038252602b8152602001806134a0602b913960400191505060405180910390fd5b60006110eb6125e6565b6001600160a01b031614156111315760405162461bcd60e51b81526004018080602001828103825260228152602001806133896022913960400191505060405180910390fd5b6001600c54600160a01b900460ff16600181111561114b57fe5b14156111885760405162461bcd60e51b815260040180806020018281038252602781526020018061340f6027913960400191505060405180910390fd5b60045460ff1661119b5761119b81612935565b50565b60165481565b6001546001600160a01b031633146111ed5760405162461bcd60e51b81526004018080602001828103825260238152602001806134f46023913960400191505060405180910390fd5b6002544211611243576040805162461bcd60e51b815260206004820152601e60248201527f436f6e7472616374206973206e6f7420756e6c6f636b61626c65207965740000604482015290519081900360640190fd5b600154600080546040516001600160a01b03938416939091169160008051602061348083398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b031681565b600360006112ad6125e6565b6001600160a01b0316815260208101919091526040016000205460ff16806112ef57506000546001600160a01b03166112e46125e6565b6001600160a01b0316145b61132a5760405162461bcd60e51b815260040180806020018281038252602b8152602001806134a0602b913960400191505060405180910390fd5b60006113346125e6565b6001600160a01b0316141561137a5760405162461bcd60e51b81526004018080602001828103825260228152602001806133896022913960400191505060405180910390fd5b6007546001600160a01b03828116911614611398576113988161192b565b6007546040805163c45a015560e01b815290516000926001600160a01b03169163c45a0155916004808301926020929190829003018186803b1580156113dd57600080fd5b505afa1580156113f1573d6000803e3d6000fd5b505050506040513d602081101561140757600080fd5b5051600754604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693309391169163ad5c464891600480820192602092909190829003018186803b15801561145957600080fd5b505afa15801561146d573d6000803e3d6000fd5b505050506040513d602081101561148357600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156114d557600080fd5b505af11580156114e9573d6000803e3d6000fd5b505050506040513d60208110156114ff57600080fd5b50516008549091506001600160a01b038083169116146115225761152281611c84565b5050565b600360006115326125e6565b6001600160a01b0316815260208101919091526040016000205460ff168061157457506000546001600160a01b03166115696125e6565b6001600160a01b0316145b6115af5760405162461bcd60e51b815260040180806020018281038252602b8152602001806134a0602b913960400191505060405180910390fd5b60006115b96125e6565b6001600160a01b031614156115ff5760405162461bcd60e51b81526004018080602001828103825260228152602001806133896022913960400191505060405180910390fd5b6000600c54600160a01b900460ff16600181111561161957fe5b1415806116345750600c546001600160a01b03838116911614155b61166f5760405162461bcd60e51b81526004018080602001828103825260298152602001806133156029913960400191505060405180910390fd5b60045460ff16611522576115228282612a78565b60025490565b600360006116956125e6565b6001600160a01b0316815260208101919091526040016000205460ff16806116d757506000546001600160a01b03166116cc6125e6565b6001600160a01b0316145b6117125760405162461bcd60e51b815260040180806020018281038252602b8152602001806134a0602b913960400191505060405180910390fd5b600061171c6125e6565b6001600160a01b031614156117625760405162461bcd60e51b81526004018080602001828103825260228152602001806133896022913960400191505060405180910390fd5b6000600360006117706125e6565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556117a06125e6565b6001600160a01b03167f920e415c98aa02ef5e7a82e76ad3e5550ba8c5beda365d8554123b90e9964ec160405160405180910390a2565b6008546001600160a01b031681565b600454610100900460ff1681565b6007546001600160a01b031681565b6003600061180f6125e6565b6001600160a01b0316815260208101919091526040016000205460ff168061185157506000546001600160a01b03166118466125e6565b6001600160a01b0316145b61188c5760405162461bcd60e51b815260040180806020018281038252602b8152602001806134a0602b913960400191505060405180910390fd5b60006118966125e6565b6001600160a01b031614156118dc5760405162461bcd60e51b81526004018080602001828103825260228152602001806133896022913960400191505060405180910390fd5b60048054821515610100810261ff00199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b600360006119376125e6565b6001600160a01b0316815260208101919091526040016000205460ff168061197957506000546001600160a01b031661196e6125e6565b6001600160a01b0316145b6119b45760405162461bcd60e51b815260040180806020018281038252602b8152602001806134a0602b913960400191505060405180910390fd5b60006119be6125e6565b6001600160a01b03161415611a045760405162461bcd60e51b81526004018080602001828103825260228152602001806133896022913960400191505060405180910390fd5b6007546001600160a01b0382811691161415611a515760405162461bcd60e51b81526004018080602001828103825260298152602001806134cb6029913960400191505060405180910390fd5b6007546040516001600160a01b03918216918316907f2c6fb4d5ff9fad6ecf2e09cd64cbc9aad92a8b9d2cc0e5c3ddef9b529b0b5ffd90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b60146020526000908152604090208054600182015460029092015490919083565b611ad76125e6565b6000546001600160a01b03908116911614611b27576040805162461bcd60e51b81526020600482018190526024820152600080516020613460833981519152604482015290519081900360640190fd5b60045460ff16611b3957611b396108ff565b565b600c546001600160a01b031681565b600d8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015611bd65780601f10611bab57610100808354040283529160200191611bd6565b820191906000526020600020905b815481529060010190602001808311611bb957829003601f168201915b5050505050905090565b611be86125e6565b6000546001600160a01b03908116911614611c38576040805162461bcd60e51b81526020600482018190526024820152600080516020613460833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020613480833981519152908290a350565b60185481565b60036000611c906125e6565b6001600160a01b0316815260208101919091526040016000205460ff1680611cd257506000546001600160a01b0316611cc76125e6565b6001600160a01b0316145b611d0d5760405162461bcd60e51b815260040180806020018281038252602b8152602001806134a0602b913960400191505060405180910390fd5b6000611d176125e6565b6001600160a01b03161415611d5d5760405162461bcd60e51b81526004018080602001828103825260228152602001806133896022913960400191505060405180910390fd5b6008546001600160a01b0382811691161415611daa5760405162461bcd60e51b815260040180806020018281038252602a815260200180613436602a913960400191505060405180910390fd5b6008546040516001600160a01b03918216918316907f2761a95c60ea350c03f8626225a98d3f2ec3157652944c749928643f8a8bc35790600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b611e0f6125e6565b6000546001600160a01b03908116911614611e5f576040805162461bcd60e51b81526020600482018190526024820152600080516020613460833981519152604482015290519081900360640190fd5b6009546001600160a01b0382811691161415611eac5760405162461bcd60e51b81526004018080602001828103825260228152602001806133cc6022913960400191505060405180910390fd5b6009546040516001600160a01b03918216918316907f2d80b0b16ebc329c69e0a7bb0f4da75aa482405c60e134862b2860bed95b791c90600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b60036000611f156125e6565b6001600160a01b0316815260208101919091526040016000205460ff1680611f5757506000546001600160a01b0316611f4c6125e6565b6001600160a01b0316145b611f925760405162461bcd60e51b815260040180806020018281038252602b8152602001806134a0602b913960400191505060405180910390fd5b6000611f9c6125e6565b6001600160a01b03161415611fe25760405162461bcd60e51b81526004018080602001828103825260228152602001806133896022913960400191505060405180910390fd5b808211156120215760405162461bcd60e51b81526004018080602001828103825260218152602001806133ab6021913960400191505060405180910390fd5b600591909155600655565b6120346125e6565b6000546001600160a01b03908116911614612084576040805162461bcd60e51b81526020600482018190526024820152600080516020613460833981519152604482015290519081900360640190fd5b61119b816125ea565b60175481565b611b39336125ea565b6120a46125e6565b6000546001600160a01b039081169116146120f4576040805162461bcd60e51b81526020600482018190526024820152600080516020613460833981519152604482015290519081900360640190fd5b6001600160a01b0381166121395760405162461bcd60e51b815260040180806020018281038252602681526020018061333e6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061348083398151915291a3600080546001600160a01b039092166001600160a01b0319928316811790915560018054909216179055565b6121946125e6565b6000546001600160a01b039081169116146121e4576040805162461bcd60e51b81526020600482018190526024820152600080516020613460833981519152604482015290519081900360640190fd5b6001600160a01b038216600081815260036020908152604091829020805460ff1916851515908117909155825190815291517f2c59b8f31260880424e870332281eba93ddfef67e37d699cebe5a7ba89f7a8a69281900390910190a25050565b61224c6125e6565b6000546001600160a01b0390811691161461229c576040805162461bcd60e51b81526020600482018190526024820152600080516020613460833981519152604482015290519081900360640190fd5b600a54600160a81b900460ff1661119b5761119b81612df4565b601b5481565b60408051600280825260608083018452926020830190803683375050600754604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561232057600080fd5b505afa158015612334573d6000803e3d6000fd5b505050506040513d602081101561234a57600080fd5b50518151829060009061235957fe5b60200260200101906001600160a01b031690816001600160a01b031681525050838160018151811061238757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050478311156123b3574792505b6006548311156123c35760065492505b6005548310156123d357506124a1565b6007546001600160a01b031663b6f9de9584600084866123f5426101906124f1565b6040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561245f578181015183820152602001612447565b50505050905001955050505050506000604051808303818588803b15801561248657600080fd5b505af115801561249a573d6000803e3d6000fd5b5050505050505b505050565b60006124e883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612edf565b90505b92915050565b6000828201838110156124e8576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261255a575060006124eb565b8282028284828161256757fe5b04146124e85760405162461bcd60e51b81526004018080602001828103825260218152602001806133ee6021913960400191505060405180910390fd5b60006124e883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f76565b3390565b6001600160a01b038116600090815260146020526040902054158061262757506001600160a01b03811660009081526013602052604090205460ff165b156126315761119b565b600061263c82610c23565b90508015611522576001600160a01b0382166000908152601260209081526040808320429055601490915290206002015461267790826124f1565b6001600160a01b03831660009081526014602052604090206002810191909155546126a190612918565b6001600160a01b0383166000908152601460205260409020600101556017546126ca90826124f1565b6017556000600c54600160a01b900460ff1660018111156126e757fe5b141561277557600c546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561274357600080fd5b505af1158015612757573d6000803e3d6000fd5b505050506040513d602081101561276d57600080fd5b506115229050565b6040516001600160a01b038316908290600081818185875af1925050503d80600081146127be576040519150601f19603f3d011682016040523d82523d6000602084013e6127c3565b606091505b5050505050565b601080546001600160a01b039092166000818152601160205260408120849055600184018355919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67290910180546001600160a01b0319169091179055565b60108054600019810190811061283d57fe5b60009182526020808320909101546001600160a01b038481168452601190925260409092205460108054929093169291811061287557fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526011918290526040812054601080549193929160001981019081106128c357fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205560108054806128f357fe5b600082815260209020810160001990810180546001600160a01b031916905501905550565b60006124eb601954610a7a6018548561254b90919063ffffffff16565b6004805460ff19166001178155600c54604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b15801561299057600080fd5b505afa1580156129a4573d6000803e3d6000fd5b505050506040513d60208110156129ba57600080fd5b5051600f54909150811180156129cd5750815b156129e957600c546129e9906001600160a01b03168230612fdb565b600c80546001600160a01b0319169055476016819055601554601954612a1392610a7a919061254b565b6018556040805180820190915260038082526221272160e91b6020909201918252612a4091600d91613281565b5050600e80546001600160a01b031916905550601a54600f55600c805460ff60a01b1916600160a01b1790556004805460ff19169055565b6004805460ff19166001179055600080600c54600160a01b900460ff166001811115612aa057fe5b148015612aaa5750815b15612b4a57600c54604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015612afa57600080fd5b505afa158015612b0e573d6000803e3d6000fd5b505050506040513d6020811015612b2457600080fd5b5051600f54909150811115612b4a57600c54612b4a906001600160a01b03168230612fdb565b5047612b578382306122bc565b600c80546001600160a01b0319166001600160a01b038581169190911791829055604080516370a0823160e01b8152306004820152905192909116916370a0823191602480820192602092909190829003018186803b158015612bb957600080fd5b505afa158015612bcd573d6000803e3d6000fd5b505050506040513d6020811015612be357600080fd5b50516016819055601554601954612bfe92610a7a919061254b565b601855600c54604080516306fdde0360e01b815290516001600160a01b03909216916306fdde0391600480820192600092909190829003018186803b158015612c4657600080fd5b505afa158015612c5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612c8357600080fd5b8101908080516040519392919084640100000000821115612ca357600080fd5b908301906020820185811115612cb857600080fd5b8251640100000000811182820188101715612cd257600080fd5b82525081516020918201929091019080838360005b83811015612cff578181015183820152602001612ce7565b50505050905090810190601f168015612d2c5780820380516001836020036101000a031916815260200191505b5060405250508151612d4592600d925060200190613281565b50600e80546001600160a01b0319166001600160a01b0385811691909117909155600c546040805163313ce56760e01b81529051919092169163313ce567916004808301926020929190829003018186803b158015612da357600080fd5b505afa158015612db7573d6000803e3d6000fd5b505050506040513d6020811015612dcd57600080fd5b505160ff16600a0a600f555050600c805460ff60a01b19169055506004805460ff19169055565b600a805460ff60a81b1916600160a81b17905560105480612e155750612ecf565b6000805a905060005b8483108015612e2c57508381105b15612eca5783601d5410612e40576000601d555b612e6c6010601d5481548110612e5257fe5b6000918252602090912001546001600160a01b0316613223565b15612e9d57612e9d6010601d5481548110612e8357fe5b6000918252602090912001546001600160a01b03166125ea565b612eb2612eab5a84906124a6565b84906124f1565b92505a601d8054600190810190915590925001612e1e565b505050505b50600a805460ff60a81b19169055565b60008184841115612f6e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f33578181015183820152602001612f1b565b50505050905090810190601f168015612f605780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183612fc55760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612f33578181015183820152602001612f1b565b506000838581612fd157fe5b0495945050505050565b6040805160028082526060808301845292602083019080368337019050509050838160008151811061300957fe5b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561305d57600080fd5b505afa158015613071573d6000803e3d6000fd5b505050506040513d602081101561308757600080fd5b505181518290600190811061309857fe5b6001600160a01b0392831660209182029290920101528416301461313e576007546040805163095ea7b360e01b81526001600160a01b0392831660048201526024810186905290519186169163095ea7b3916044808201926020929091908290030181600087803b15801561310c57600080fd5b505af1158015613120573d6000803e3d6000fd5b505050506040513d602081101561313657600080fd5b506131569050565b6007546131569030906001600160a01b031685610279565b60075460405163791ac94760e01b8152600481018581526000602483018190526001600160a01b038681166064850152426084850181905260a060448601908152875160a48701528751929096169563791ac947958a9589948b9493919260c40190602080880191028083838b5b838110156131dc5781810151838201526020016131c4565b505050509050019650505050505050600060405180830381600087803b15801561320557600080fd5b505af1158015613219573d6000803e3d6000fd5b5050505050505050565b601b546001600160a01b038216600090815260126020526040812054909142910110801561325a5750601c5461325883610c23565b115b80156124eb5750506001600160a01b031660009081526013602052604090205460ff161590565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106132c257805160ff19168380011785556132ef565b828001600101855582156132ef579182015b828111156132ef5782518255916020019190600101906132d4565b506132fb9291506132ff565b5090565b5b808211156132fb576000815560010161330056fe5265776172647320616c72656164792073657420746f207265666c656374207468697320746f6b656e4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f7074696f6e206e6f742073657420746f20616c6c6f7720746869732066756e6374696f6e5a65726f2061646472657373206973206e6f7420612076616c69642063616c6c65724d696e696d756d206d757374206265206c657373207468616e206d6178696d756d4c5020697320616c72656164792073656e7420746f20746861742061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775265776172647320616c72656164792073657420746f207265666c6563742063757272656e6379546865204c50205061697220697320616c72656164792073657420746f207468697320616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0596f7520617265206e6f7420617574686f72697a656420746f2075736520746869732066756e6374696f6e54686520726f7574657220697320616c72656164792073657420746f20746869732061646472657373596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636ba2646970667358221220280763adeb6b28cb1079f6ddff493153ff2f162062cef27641d81765e45d1b6464736f6c634300060c00335a65726f2061646472657373206973206e6f7420612076616c69642063616c6c6572596f7520617265206e6f7420617574686f72697a656420746f2075736520746869732066756e6374696f6e54686520726f7574657220697320616c72656164792073657420746f2074686973206164647265737300000000000000000000000031cc5ac39e2968c861830ade3580318bb815d63300000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e0000000000000000000000008076c74c5e3f5852037f31ff0093eeb8c8add8d3

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

00000000000000000000000031cc5ac39e2968c861830ade3580318bb815d63300000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e0000000000000000000000008076c74c5e3f5852037f31ff0093eeb8c8add8d3

-----Decoded View---------------
Arg [0] : superFuel (address): 0x31cc5ac39e2968c861830ade3580318bb815d633
Arg [1] : _router (address): 0x10ed43c718714eb63d5aa57b78b54704e256024e
Arg [2] : _rewardsToken (address): 0x8076c74c5e3f5852037f31ff0093eeb8c8add8d3

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000031cc5ac39e2968c861830ade3580318bb815d633
Arg [1] : 00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e
Arg [2] : 0000000000000000000000008076c74c5e3f5852037f31ff0093eeb8c8add8d3


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.