POL Price: $0.447976 (-2.55%)
 

Overview

Max Total Supply

24,735,421,734.400841417561530708 SPHERE

Holders

36,595

Total Transfers

-

Market

Price

$0.00 @ 0.000000 POL

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
SphereTokenV2

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : SphereToken_flat.sol
// SPDX-License-Identifier: MIT

pragma solidity 0.8.13;

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender)
    external
    view
    returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

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

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory _tokenName,
        string memory _tokenSymbol,
        uint8 _tokenDecimals
    ) {
        _name = _tokenName;
        _symbol = _tokenSymbol;
        _decimals = _tokenDecimals;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

interface IDEXRouter {
    function factory() external view returns (address);

    function WETH() external view returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
    external
    returns (
        uint256 amountA,
        uint256 amountB,
        uint256 liquidity
    );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
    external
    payable
    returns (
        uint256 amountToken,
        uint256 amountETH,
        uint256 liquidity
    );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut,
        uint256 fee
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut,
        uint256 fee
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
    external
    view
    returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
    external
    view
    returns (uint256[] memory amounts);

    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IDEXFactory {
    function getPair(address tokenA, address tokenB)
    external
    view
    returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function validPairs(address _pair) external view returns (bool);
}

interface IBalanceOfSphere {
    function balanceOfSphere(address _address) external view returns (uint256);
}

interface IDEXPair {
    function sync() external;
}

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);
    event TransferOwnerShip(address indexed previousOwner);

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

    constructor() {
        _owner = msg.sender;
    }

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

    modifier onlyOwner() {
        require(msg.sender == _owner, 'Not owner');
        _;
    }

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

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

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), 'Owner can not be 0');
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

contract SphereTokenV2 is ERC20Detailed, Ownable, ReentrancyGuard {
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    address[] public _makerPairs;
    address[] public partyArray;
    address[] public sphereGamesContracts;
    address[] public subContracts;

    bool private feesOnNormalTransfers = true;
    bool private manualSyncRefresh = true;
    bool private doneInit = false;
    bool public autoRebase = true;
    bool public initialDistributionFinished = false;
    bool public isBurnEnabled = false;
    bool public isLiquidityEnabled = true;
    bool public isMoveBalance = false;
    bool public isSellHourlyLimit = true;
    bool public isTaxBracket = false;
    bool public isTaxBracketEnabledInMoveFee = false;
    bool public isWall = false;
    bool public partyTime = true;
    bool public swapEnabled = true;

    mapping(address => InvestorInfo) public investorInfoMap;
    mapping(address => bool) _isBuyFeeExempt;
    mapping(address => bool) _isSellFeeExempt;
    mapping(address => bool) _isTotalFeeExempt;
    mapping(address => bool) canRebase;
    mapping(address => bool) canSetRewardYield;
    mapping(address => bool) public _disallowedToMove;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) public partyArrayCheck;
    mapping(address => bool) public sphereGamesCheck;
    mapping(address => bool) public subContractCheck;
    mapping(address => uint256) public partyArrayFee;
    mapping(address => mapping(address => uint256)) private _allowedFragments;
    mapping(address => uint256) private _gonBalances;

    uint256 private REWARD_YIELD_DENOMINATOR = 10000000000000000;
    uint256 private _gonsPerFragment;
    uint256 private _totalSupply;

    uint256 private constant DECIMALS = 18;
    uint256 private constant FEE_DENOMINATOR = 1000;
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY =
    5 * 10 ** 9 * 10 ** DECIMALS;
    uint256 private constant MAX_INVEST_REMOVABLE_DELAY = 7200;
    uint256 private constant MAX_PARTY_ARRAY = 491;
    uint256 private constant MAX_PARTY_LIST_DIVISOR_RATE = 75;
    uint256 private constant MAX_REBASE_FREQUENCY = 1800;
    uint256 private constant MAX_SUPPLY = ~uint128(0);
    uint256 private constant MAX_TAX_BRACKET_FEE_RATE = 50;
    uint256 private constant MAX_TOTAL_BUY_FEE_RATE = 250;
    uint256 private constant MAX_TOTAL_SELL_FEE_RATE = 250;
    uint256 private constant MAX_UINT256 = ~uint256(0);
    uint256 private constant MIN_BUY_AMOUNT_RATE = 500000 * 10 ** 18;
    uint256 private constant MIN_INVEST_REMOVABLE_PER_PERIOD = 1500000 * 10 ** 18;
    uint256 private constant MIN_SELL_AMOUNT_RATE = 500000 * 10 ** 18;
    uint256 private constant TOTAL_GONS =
    MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);
    uint256 private constant maxBracketTax = 10; // max bracket is holding 10%

    uint256 private burnFee = 0;
    uint256 private buyGalaxyBondFee = 0;
    uint256 private gonSwapThreshold = TOTAL_GONS / 1000;
    uint256 private investRemovalDelay = 3600;
    uint256 private liquidityFee = 50;
    uint256 private partyListDivisor = 50;
    uint256 private realFeePartyArray = 490;
    uint256 private rebaseFrequency = 1800;
    uint256 private REWARD_YIELD = 3943560072416;
    uint256 private riskFreeValueFee = 50;
    uint256 private sellBurnFee = 0;
    uint256 private sellFeeRFVAdded = 50;
    uint256 private sellFeeTreasuryAdded = 20;
    uint256 private sellGalaxyBond = 0;
    uint256 private swapThreshold = 400000 * 10 ** 18;
    uint256 private treasuryFee = 30;

    uint256 public _markerPairCount;
    uint256 public epochBuyPressure = 0;
    uint256 public epochCollectedBuyTax = 0;
    uint256 public epochCollectedSellTax = 0;
    uint256 public epochSellPressure = 0;
    uint256 public INDEX;
    uint256 public maxBuyTransactionAmount = 500000 * 10 ** 18;
    uint256 public maxSellTransactionAmount = 500000 * 10 ** 18;
    uint256 public nextRebase = 1647385255;
    uint256 public oldEpochBuyPressure = 0;
    uint256 public oldEpochCollectedBuyTax = 0;
    uint256 public oldEpochCollectedSellTax = 0;
    uint256 public oldEpochSellPressure = 0;
    uint256 public rebaseEpoch = 0;
    uint256 public taxBracketMultiplier = 50;
    uint256 public totalBuyFee =
    liquidityFee + (treasuryFee) + (riskFreeValueFee);
    uint256 public totalSellFee =
    totalBuyFee + (sellFeeTreasuryAdded) + (sellFeeRFVAdded);
    uint256 public wallDivisor = 2;

    address public liquidityReceiver =
    0x1a2Ce410A034424B784D4b228f167A061B94CFf4;
    address public treasuryReceiver =
    0x20D61737f972EEcB0aF5f0a85ab358Cd083Dd56a;
    address public riskFreeValueReceiver =
    0x826b8d2d523E7af40888754E3De64348C00B99f4;
    address public galaxyBondReceiver =
    0x20D61737f972EEcB0aF5f0a85ab358Cd083Dd56a;

    address public convertTo = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270;

    IDEXRouter public router;
    address public pair;

    uint256 maxInvestRemovablePerPeriod = 1500000 * 10 ** 18;


    bool inSwap;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier validRecipient(address to) {
        require(to != address(0x0), 'recipient is not valid');
        _;
    }

    /* ======== STRUCTS ======== */
    struct Withdrawal {
        uint256 timestamp;
        uint256 withdrawAmount;
    }

    struct InvestorInfo {
        uint256 totalInvestableExchanged;
        Withdrawal[] withdrawHistory;
    }

    constructor() ERC20Detailed('Sphere Finance', 'SPHERE', uint8(DECIMALS)) {}

    function init(address _router, address _pair) external onlyOwner {
        require(!doneInit, 'Already initialized');
        router = IDEXRouter(_router);
        pair = (_pair);

        _allowedFragments[address(this)][address(router)] = type(uint256).max;
        _allowedFragments[address(this)][address(this)] = type(uint256).max;
        _allowedFragments[address(this)][pair] = type(uint256).max;

        _totalSupply = INITIAL_FRAGMENTS_SUPPLY;
        _gonBalances[msg.sender] = TOTAL_GONS;
        _gonsPerFragment = TOTAL_GONS / (_totalSupply);

        _isTotalFeeExempt[treasuryReceiver] = true;
        _isTotalFeeExempt[riskFreeValueReceiver] = true;
        _isTotalFeeExempt[galaxyBondReceiver] = true;
        _isTotalFeeExempt[address(this)] = true;
        _isTotalFeeExempt[msg.sender] = true;
        INDEX = gonsForBalance(1e18);

        setWhitelistSetters(msg.sender, true, 1);
        setWhitelistSetters(msg.sender, true, 2);

        doneInit = true;
        emit Transfer(address(0x0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    //gets every token in circulation no matter where
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    //how much a user is allowed to transfer from own address to another one
    function allowance(address owner_, address spender)
    external
    view
    override
    returns (uint256)
    {
        return _allowedFragments[owner_][spender];
    }

    //get balance of user
    function balanceOf(address who) public view override returns (uint256) {
        if (_gonsPerFragment == 0) {
            return 0;
        }
        return _gonBalances[who] / (_gonsPerFragment);
    }

    //get the address in the iteration
    function markerPairAddress(uint256 value) external view returns (address) {
        return _makerPairs[value];
    }

    //get the current index of rebase
    function currentIndex() external view returns (uint256) {
        return balanceForGons(INDEX);
    }

    //checks if a user is exempt from protocol fees
    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isTotalFeeExempt[_addr];
    }

    function gonsForBalance(uint256 amount) public view returns (uint256) {
        return amount * (_gonsPerFragment);
    }

    function balanceForGons(uint256 gons) public view returns (uint256) {
        return gons / (_gonsPerFragment);
    }

    //checks what the threshold is for swapping
    function checkSwapThreshold() external view returns (uint256) {
        return gonSwapThreshold / (_gonsPerFragment);
    }

    // validate if the last rebase is in the past, thus execute
    function shouldRebase() internal view returns (bool) {
        return nextRebase <= block.timestamp;
    }

    //enable tax bracket on users
    function isTaxBracketEnabled() internal view returns (bool) {
        return isTaxBracket;
    }

    //validates if the sell limit is enabled
    function isSellHourlyLimitEnabled() internal view returns (bool) {
        return isSellHourlyLimit;
    }

    //add the wall function that enables usages
    function isWallEnabled() internal view returns (bool) {
        return isWall;
    }

    //validates if the swap back function should be initiated or not
    function shouldSwapBack() internal view returns (bool) {
        return
        !automatedMarketMakerPairs[msg.sender] &&
        !inSwap &&
        swapThreshold > 0 &&
        swapEnabled &&
        (totalBuyFee + totalSellFee) > 0 &&
        balanceOf(address(this)) >= (gonSwapThreshold / _gonsPerFragment);
    }

    // check if the wallet should be taxed or not
    function shouldTakeFee(address from, address to)
    internal
    view
    returns (bool)
    {
        if (_isTotalFeeExempt[from] || _isTotalFeeExempt[to]) {
            return false;
        } else if (feesOnNormalTransfers) {
            return true;
        } else {
            return (automatedMarketMakerPairs[from] ||
            automatedMarketMakerPairs[to]);
        }
    }

    //this function iterates through all other contracts that are being part of the Sphere ecosystem
    //we add a new contract like wSPHERE or sSPHERE, whales could technically abuse this
    //by swapping to these contracts and leave the dynamic tax bracket
    function getBalanceContracts(address sender) public view returns (uint256) {
        uint256 userTotal;

        for (uint256 i = 0; i < subContracts.length; i++) {
            userTotal +
            (IBalanceOfSphere(subContracts[i]).balanceOfSphere(sender));
        }
        for (uint256 i = 0; i < sphereGamesContracts.length; i++) {
            userTotal + (IERC20(sphereGamesContracts[i]).balanceOf(sender));
        }

        return userTotal;
    }

    //calculates circulating supply (dead and zero is not added due to them being phased out of circulation forrever)
    function getCirculatingSupply() external view returns (uint256) {
        return
        (TOTAL_GONS - _gonBalances[DEAD] - _gonBalances[ZERO] - _gonBalances[treasuryReceiver]) /
        _gonsPerFragment;
    }

    function getCurrentTaxBracket(address _address)
    public
    view
    returns (uint256)
    {
        //gets the total balance of the user
        uint256 userTotal = getUserTotalOnDifferentContractsSphere(_address);

        //calculate the percentage
        uint256 totalCap = (userTotal * (100)) / (getTokensInLPCirculation());

        //calculate what is smaller, and use that
        uint256 _bracket = totalCap < maxBracketTax ? totalCap : maxBracketTax;

        //multiply the bracket with the multiplier
        _bracket *= taxBracketMultiplier;

        return _bracket;
    }

    function getRewardYield() external view returns (uint256, uint256) {
        return (REWARD_YIELD, REWARD_YIELD_DENOMINATOR);
    }

    function getTokensInLPCirculation() public view returns (uint256) {
        uint256 LPTotal;

        for (uint256 i = 0; i < _makerPairs.length; i++) {
            LPTotal += balanceOf(_makerPairs[i]);
        }

        return LPTotal;
    }

    //calculate the users total on different contracts
    function getUserTotalOnDifferentContractsSphere(address sender)
    public
    view
    returns (uint256)
    {
        uint256 userTotal = balanceOf(sender);

        //calculate the balance of different contracts on different wallets and sum them
        return userTotal + (getBalanceContracts(sender));
    }

    //sync every LP to make sure Theft-of-Liquidity can't be arbitraged
    function manualSync() public {
        for (uint256 i = 0; i < _makerPairs.length; i++) {
            try IDEXPair(_makerPairs[i]).sync() {} catch Error(
                string memory reason
            ) {
                emit GenericErrorEvent(
                    'manualSync(): _makerPairs.sync() Failed'
                );
                emit GenericErrorEvent(reason);
            }
        }
    }

    //transfer from one valid to another
    function transfer(address to, uint256 value)
    external
    override
    validRecipient(to)
    returns (bool)
    {
        _transferFrom(msg.sender, to, value);
        return true;
    }

    //basic transfer from one wallet to the other
    function _basicTransfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        uint256 gonAmount = amount * (_gonsPerFragment);
        _gonBalances[from] = _gonBalances[from] - (gonAmount);
        _gonBalances[to] = _gonBalances[to] + (gonAmount);

        emit Transfer(from, to, amount);

        return true;
    }

    //inherent transfer function that calculates the taxes and the limits
    //limits like sell per hour, party array check
    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        bool excludedAccount = _isTotalFeeExempt[sender] ||
        _isTotalFeeExempt[recipient];

        require(initialDistributionFinished || excludedAccount, 'Trade off');

        if (automatedMarketMakerPairs[recipient] && !excludedAccount) {
            require(amount <= maxSellTransactionAmount, 'Too much sell');
        }

        //update manualSync every second sell / buy to resolve possible K issues with QLaaS
        //only uses 60K gas
        if (
            automatedMarketMakerPairs[sender] ||
            automatedMarketMakerPairs[recipient]
        ) {
            if (manualSyncRefresh) {
                manualSync();
                manualSyncRefresh = false;
            } else {
                manualSyncRefresh = true;
            }
        }

        if (
            automatedMarketMakerPairs[recipient] &&
            !excludedAccount &&
            partyArrayCheck[sender] &&
            partyTime
        ) {
            require(
                amount <= (maxSellTransactionAmount / (partyListDivisor)),
                'party div'
            );
        }

        if (automatedMarketMakerPairs[sender] && !excludedAccount) {
            require(amount <= maxBuyTransactionAmount, 'too much buy');
        }

        if (
            automatedMarketMakerPairs[recipient] &&
            !excludedAccount &&
            isSellHourlyLimitEnabled()
        ) {
            InvestorInfo storage investor = investorInfoMap[sender];
            //Make sure they can't withdraw too often.
            Withdrawal[] storage withdrawHistory = investor.withdrawHistory;
            uint256 authorizedWithdraw = (maxInvestRemovablePerPeriod -
            (getLastPeriodWithdrawals(sender)));
            require(amount <= authorizedWithdraw, 'max withdraw');
            withdrawHistory.push(
                Withdrawal({timestamp : block.timestamp, withdrawAmount : amount})
            );
        }

        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        uint256 gonAmount = amount * (_gonsPerFragment);

        if (shouldSwapBack()) {
            swapBack();
        }

        _gonBalances[sender] = _gonBalances[sender] - (gonAmount);

        uint256 gonAmountReceived = shouldTakeFee(sender, recipient)
        ? takeFee(sender, recipient, gonAmount)
        : gonAmount;
        _gonBalances[recipient] = _gonBalances[recipient] + (gonAmountReceived);

        if (
            shouldRebase() &&
            autoRebase &&
            !automatedMarketMakerPairs[sender] &&
            !automatedMarketMakerPairs[recipient]
        ) {
            _rebase();
            manualSync();
            setEpochCalculation();
        }

        //calculate the amount of buy / sell
        if (automatedMarketMakerPairs[sender]) {
            epochBuyPressure += (gonAmount / (_gonsPerFragment));
            epochCollectedBuyTax += (gonAmount -
            (gonAmountReceived) /
            (_gonsPerFragment));
        } else if (automatedMarketMakerPairs[recipient]) {
            epochSellPressure += (gonAmount / (_gonsPerFragment));
            epochCollectedSellTax += (gonAmount -
            (gonAmountReceived) /
            (_gonsPerFragment));
        }

        emit Transfer(
            sender,
            recipient,
            gonAmountReceived / (_gonsPerFragment)
        );

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override validRecipient(to) returns (bool) {
        if (_allowedFragments[from][msg.sender] != type(uint256).max) {
            _allowedFragments[from][msg.sender] =
            _allowedFragments[from][msg.sender] -
            (value);
        }

        _transferFrom(from, to, value);
        return true;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isLiquidityEnabled ? liquidityFee : 0;
        uint256 realTotalFee = totalBuyFee + (totalSellFee);

        uint256 contractTokenBalance = balanceOf(address(this));

        uint256 balanceBefore = address(this).balance;

        uint256 amountToBurn = (contractTokenBalance *
        (burnFee + sellBurnFee)) / realTotalFee;

        tokenBurner(amountToBurn);

        uint256 amountToLiquidate = (contractTokenBalance *
        (dynamicLiquidityFee)) /
        (realTotalFee) /
        (2);

        uint256 amountToSwap = contractTokenBalance -
        amountToLiquidate -
        amountToBurn;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = convertTo;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountMATIC = address(this).balance - (balanceBefore);

        uint256 totalMATICFee = ((realTotalFee) -
        (dynamicLiquidityFee) /
        (2) -
        (burnFee + sellBurnFee));

        uint256 amountMATICLiquidity = (amountMATIC * (dynamicLiquidityFee)) /
        (totalMATICFee) /
        (2);

        uint256 amountToRFV = (amountMATIC *
        (riskFreeValueFee + (sellFeeRFVAdded))) / (totalMATICFee);

        uint256 amountToGalaxyBond = (amountMATIC *
        (buyGalaxyBondFee + (sellGalaxyBond))) / (totalMATICFee);

        uint256 amountToTreasury = amountMATIC -
        (amountMATICLiquidity) -
        (amountToRFV) -
        (amountToGalaxyBond);

        (bool success,) = payable(treasuryReceiver).call{
        value : amountToTreasury,
        gas : 30000
        }('');
        (success,) = payable(riskFreeValueReceiver).call{
        value : amountToRFV,
        gas : 30000
        }('');
        (success,) = payable(galaxyBondReceiver).call{
        value : amountToGalaxyBond,
        gas : 30000
        }('');

        success = false;

        if (amountToLiquidate > 0) {
            router.addLiquidityETH{value : amountMATICLiquidity}(
                address(this),
                amountToLiquidate,
                0,
                0,
                liquidityReceiver,
                block.timestamp
            );
        }
    }

    function manualSwapBack() external onlyOwner {
        swapBack();
    }

    /** @dev Returns the total amount withdrawn by the _address during the last hour **/

    function getLastPeriodWithdrawals(address _address)
    public
    view
    returns (uint256 totalWithdrawLastHour)
    {
        InvestorInfo storage investor = investorInfoMap[_address];

        Withdrawal[] storage withdrawHistory = investor.withdrawHistory;
        for (uint256 i = 0; i < withdrawHistory.length; i++) {
            Withdrawal memory withdraw = withdrawHistory[i];
            if (
                withdraw.timestamp >= (block.timestamp - (investRemovalDelay))
            ) {
                totalWithdrawLastHour =
                totalWithdrawLastHour +
                (withdrawHistory[i].withdrawAmount);
            }
        }

        return totalWithdrawLastHour;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 gonAmount
    ) internal returns (uint256) {
        uint256 _realFee = totalBuyFee;

        if (isWallEnabled()) {
            _realFee = totalBuyFee / (wallDivisor);
        }

        if (_isBuyFeeExempt[sender]) {
            _realFee = 0;
        }

        //check if it's a sell fee embedded
        if (automatedMarketMakerPairs[recipient]) {
            _realFee = totalSellFee;

            //trying to join our party? Become the party maker :)
            if (partyArrayCheck[sender] && partyTime) {
                if (_realFee < partyArrayFee[sender])
                    _realFee = partyArrayFee[sender];
            }

            if (_isSellFeeExempt[sender]) {
                _realFee = 0;
            }
        }

        if (!automatedMarketMakerPairs[sender]) {
            //calculate Tax
            if (isTaxBracketEnabled()) {
                _realFee += getCurrentTaxBracket(sender);
            }
        }

        uint256 feeAmount = (gonAmount * (_realFee)) / (FEE_DENOMINATOR);

        _gonBalances[address(this)] = _gonBalances[address(this)] + (feeAmount);

        emit Transfer(sender, address(this), (feeAmount / (_gonsPerFragment)));

        return gonAmount - (feeAmount);
    }

    //burn tokens to the dead wallet
    function tokenBurner(uint256 _tokenAmount) private {
        _transferFrom(address(this), address(DEAD), _tokenAmount);
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
    external
    returns (bool)
    {
        uint256 oldValue = _allowedFragments[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowedFragments[msg.sender][spender] = 0;
        } else {
            _allowedFragments[msg.sender][spender] =
            oldValue -
            (subtractedValue);
        }
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
    external
    returns (bool)
    {
        _allowedFragments[msg.sender][spender] =
        _allowedFragments[msg.sender][spender] -
        (addedValue);
        emit Approval(
            msg.sender,
            spender,
            _allowedFragments[msg.sender][spender]
        );
        return true;
    }

    function approve(address spender, uint256 value)
    external
    override
    returns (bool)
    {
        _allowedFragments[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function _rebase() private {
        int256 supplyDelta;
        int256 i = 0;
        if (!inSwap) {
            do {
                supplyDelta = int256(
                    (_totalSupply * (REWARD_YIELD)) / (REWARD_YIELD_DENOMINATOR)
                );
                coreRebase(supplyDelta);
                i++;
            }
            while (nextRebase < block.timestamp && i < 100);
            manualSync();
        }
    }

    //rebase everyone
    function coreRebase(int256 supplyDelta) private returns (uint256) {
        require(nextRebase <= block.timestamp, 'rebase too early');
        uint256 epoch = nextRebase;

        if (supplyDelta == 0) {
            emit LogRebase(epoch, _totalSupply);
            return _totalSupply;
        }

        if (supplyDelta < 0) {
            _totalSupply = _totalSupply - (uint256(- supplyDelta));
        } else {
            _totalSupply = _totalSupply + (uint256(supplyDelta));
        }

        if (_totalSupply > MAX_SUPPLY) {
            _totalSupply = MAX_SUPPLY;
        }

        _gonsPerFragment = TOTAL_GONS / (_totalSupply);

        updateRebaseIndex(epoch);

        emit LogRebase(epoch, _totalSupply);
        return _totalSupply;
    }

    //set who is allowed to trigger the rebase or reward yield
    function setWhitelistSetters(
        address _addr,
        bool _value,
        uint256 _type
    ) public onlyOwner {
        if (_type == 1) {
            require(canRebase[_addr] != _value, 'Not changed');
            canRebase[_addr] = _value;
        } else if (_type == 2) {
            require(canSetRewardYield[_addr] != _value, 'Not changed');
            canSetRewardYield[_addr] = _value;
        }

        emit SetRebaseWhitelist(_addr, _value, _type);
    }

    //set the router in case of dex switch
    function setRouter(address _router, address _pair) external onlyOwner {
        router = IDEXRouter(_router);
        pair = _pair;

        _allowedFragments[address(this)][address(router)] = type(uint256).max;
        _allowedFragments[address(this)][address(this)] = type(uint256).max;
        _allowedFragments[address(this)][pair] = type(uint256).max;
        setAutomatedMarketMakerPair(pair, true);

        emit SetRouter(_router, _pair);
    }

    //execute manual rebase
    function manualRebase() external nonReentrant {
        require(canRebase[msg.sender], 'can not rebase');
        require(!inSwap, 'Try again');
        require(nextRebase <= block.timestamp, 'Not in time');

        int256 supplyDelta;
        int256 i = 0;

        do {
            supplyDelta = int256(
                (_totalSupply * (REWARD_YIELD)) / (REWARD_YIELD_DENOMINATOR)
            );
            coreRebase(supplyDelta);
            i++;
        }
        while (nextRebase < block.timestamp && i < 100);

        manualSync();
    }

    //move full balance without the tax
    function moveBalance(address _to)
    external
    validRecipient(_to)
    returns (bool)
    {
        require(isMoveBalance, 'can not move');
        require(initialDistributionFinished, 'Trade off');
        // Allow to move balance only once
        require(!_disallowedToMove[msg.sender], 'not allowed');
        require(balanceOf(msg.sender) > 0, 'No tokens');
        uint256 balanceOfAllSubContracts = 0;

        balanceOfAllSubContracts = getBalanceContracts(msg.sender);
        require(balanceOfAllSubContracts == 0, 'other balances');

        // Once an address received funds moved from another address it should
        // not be able to move its balance again
        _disallowedToMove[msg.sender] = true;
        uint256 gonAmount = _gonBalances[msg.sender];

        // reduce balance early
        _gonBalances[msg.sender] = _gonBalances[msg.sender] - (gonAmount);

        // Move the balance to the to address
        _gonBalances[_to] = _gonBalances[_to] + (gonAmount);

        emit Transfer(msg.sender, _to, (gonAmount / (_gonsPerFragment)));
        emit MoveBalance(msg.sender, _to);
        return true;
    }

    function updateRebaseIndex(uint256 epoch) private {
        // update the next Rebase time
        nextRebase = epoch + rebaseFrequency;

        //simply show how often we rebased since inception (how many epochs)
        rebaseEpoch += 1;
    }

    //add new subcontracts to the protocol so they can be calculated
    function addSubContracts(address _subContract, bool _value)
    external
    onlyOwner
    {
        require(subContractCheck[_subContract] != _value, 'Value already set');

        subContractCheck[_subContract] = _value;

        if (_value) {
            subContracts.push(_subContract);
        } else {
            for (uint256 i = 0; i < subContracts.length; i++) {
                if (subContracts[i] == _subContract) {
                    subContracts[i] = subContracts[subContracts.length - 1];
                    subContracts.pop();
                    break;
                }
            }
        }

        emit SetSubContracts(_subContract, _value);
    }

    //Add S.P.H.E.R.E. Games Contracts
    function addSphereGamesAddies(address _sphereGamesAddy, bool _value)
    external
    onlyOwner
    {
        require(
            sphereGamesCheck[_sphereGamesAddy] != _value,
            'Value already set'
        );

        sphereGamesCheck[_sphereGamesAddy] = _value;

        if (_value) {
            sphereGamesContracts.push(_sphereGamesAddy);
        } else {
            require(sphereGamesContracts.length > 1, 'Required 1 pair');
            for (uint256 i = 0; i < sphereGamesContracts.length; i++) {
                if (sphereGamesContracts[i] == _sphereGamesAddy) {
                    sphereGamesContracts[i] = sphereGamesContracts[
                    sphereGamesContracts.length - 1
                    ];
                    sphereGamesContracts.pop();
                    break;
                }
            }
        }

        emit SetSphereGamesAddresses(_sphereGamesAddy, _value);
    }

    function addPartyAddies(
        address _partyAddy,
        bool _value,
        uint256 feeAmount
    ) external onlyOwner {
        partyArrayCheck[_partyAddy] = _value;
        partyArrayFee[_partyAddy] = feeAmount;

        if (_value) {
            partyArray.push(_partyAddy);
        } else {
            for (uint256 i = 0; i < partyArray.length; i++) {
                if (partyArray[i] == _partyAddy) {
                    partyArray[i] = partyArray[partyArray.length - 1];
                    partyArray.pop();
                    break;
                }
            }
        }

        emit SetPartyAddresses(_partyAddy, _value);
    }

    function setAutomatedMarketMakerPair(address _pair, bool _value)
    public
    onlyOwner
    {
        require(automatedMarketMakerPairs[_pair] != _value, 'already set');

        automatedMarketMakerPairs[_pair] = _value;

        if (_value) {
            _makerPairs.push(_pair);
            _markerPairCount++;
        } else {
            require(_makerPairs.length > 1, 'Required 1 pair');
            for (uint256 i = 0; i < _makerPairs.length; i++) {
                if (_makerPairs[i] == _pair) {
                    _makerPairs[i] = _makerPairs[_makerPairs.length - 1];
                    _makerPairs.pop();
                    _markerPairCount--;
                    break;
                }
            }
        }

        emit SetAutomatedMarketMakerPair(_pair, _value);
    }

    function setInitialDistributionFinished(bool _value) external onlyOwner {
        initialDistributionFinished = _value;

        emit SetInitialDistribution(_value);
    }

    function setInvestRemovalDelay(uint256 _value) external onlyOwner {
        require(_value < MAX_INVEST_REMOVABLE_DELAY, 'over 2 hours');
        investRemovalDelay = _value;

        emit SetInvestRemovalDelay(_value);
    }

    function setEpochCalculation() private {
        //store previous buy pressure
        oldEpochBuyPressure = epochBuyPressure;
        oldEpochCollectedBuyTax = epochCollectedBuyTax;
        epochBuyPressure = 0;

        //store previous sell pressure
        oldEpochSellPressure = epochSellPressure;
        oldEpochCollectedSellTax = epochCollectedSellTax;
        epochSellPressure = 0;
    }

    function setMaxInvestRemovablePerPeriod(uint256 _value) external onlyOwner {
        require(_value > MIN_INVEST_REMOVABLE_PER_PERIOD, 'Below minimum');
        maxInvestRemovablePerPeriod = _value;

        emit SetMaxInvestRemovablePerPeriod(_value);
    }

    function setSellHourlyLimit(bool _value) external onlyOwner {
        isSellHourlyLimit = _value;

        emit SetHourlyLimit(_value);
    }

    function setContractToChange(address _value) external onlyOwner {
        convertTo = _value;

        emit SetContractToChange(_value);
    }

    function setPartyListDivisor(uint256 _value) external onlyOwner {
        require(_value <= MAX_PARTY_LIST_DIVISOR_RATE, 'max party');
        partyListDivisor = _value;

        emit SetPartyListDivisor(_value);
    }

    function setMoveBalance(bool _value) external onlyOwner {
        isMoveBalance = _value;

        emit SetMoveBalance(_value);
    }

    function setFeeTypeExempt(
        address _addr,
        bool _value,
        uint256 _type
    ) external onlyOwner {
        if (_type == 1) {
            require(_isTotalFeeExempt[_addr] != _value, 'Not changed');
            _isTotalFeeExempt[_addr] = _value;
            emit SetTotalFeeExempt(_addr, _value);
        } else if (_type == 2) {
            require(_isBuyFeeExempt[_addr] != _value, 'Not changed');
            _isBuyFeeExempt[_addr] = _value;
            emit SetBuyFeeExempt(_addr, _value);
        } else if (_type == 3) {
            require(_isSellFeeExempt[_addr] != _value, 'Not changed');
            _isSellFeeExempt[_addr] = _value;
            emit SetSellFeeExempt(_addr, _value);
        }
    }

    function setSwapBackSettings(
        bool _enabled,
        uint256 _num,
        uint256 _denom
    ) external onlyOwner {
        swapEnabled = _enabled;
        gonSwapThreshold = (TOTAL_GONS * (_num)) / (_denom);
        emit SetSwapBackSettings(_enabled, _num, _denom);
    }

    function setFeeReceivers(
        address _liquidityReceiver,
        address _treasuryReceiver,
        address _riskFreeValueReceiver,
        address _galaxyBondReceiver
    ) external onlyOwner {
        liquidityReceiver = _liquidityReceiver;
        treasuryReceiver = _treasuryReceiver;
        riskFreeValueReceiver = _riskFreeValueReceiver;
        galaxyBondReceiver = _galaxyBondReceiver;
    }

    function setFees(
        uint256 _liquidityFee,
        uint256 _riskFreeValueFee,
        uint256 _treasuryFee,
        uint256 _burnFee,
        uint256 _buyGalaxyBondFee,
        uint256 _sellFeeTreasuryAdded,
        uint256 _sellFeeRFVAdded,
        uint256 _sellBurnFee,
        uint256 _sellGalaxyBond,
        uint256 _realFeePartyArray,
        bool _isTaxBracketEnabledInMoveFee
    ) external onlyOwner {
        liquidityFee = _liquidityFee;
        riskFreeValueFee = _riskFreeValueFee;
        treasuryFee = _treasuryFee;
        sellFeeTreasuryAdded = _sellFeeTreasuryAdded;
        sellFeeRFVAdded = _sellFeeRFVAdded;
        buyGalaxyBondFee = _buyGalaxyBondFee;
        burnFee = _burnFee;
        sellBurnFee = _sellBurnFee;
        sellGalaxyBond = _sellGalaxyBond;
        realFeePartyArray = _realFeePartyArray;

        uint256 maxTotalBuyFee = liquidityFee +
        (treasuryFee) +
        (burnFee) +
        (buyGalaxyBondFee) +
        (riskFreeValueFee);

        uint256 maxTotalSellFee = maxTotalBuyFee +
        (sellFeeTreasuryAdded) +
        (sellFeeRFVAdded) +
        (sellBurnFee) +
        (sellGalaxyBond);

        require(maxTotalBuyFee < MAX_TOTAL_BUY_FEE_RATE, 'max buy fees');

        require(maxTotalSellFee < MAX_TOTAL_SELL_FEE_RATE, 'max sell fees');

        require(realFeePartyArray < MAX_PARTY_ARRAY, 'max party fees');

        totalBuyFee = maxTotalBuyFee;
        totalSellFee = maxTotalSellFee;

        isTaxBracketEnabledInMoveFee = _isTaxBracketEnabledInMoveFee;

        emit SetFees(
            _liquidityFee,
            _riskFreeValueFee,
            _treasuryFee,
            _sellFeeTreasuryAdded,
            _sellFeeRFVAdded,
            _burnFee,
            sellBurnFee,
            maxTotalBuyFee,
            _isTaxBracketEnabledInMoveFee
        );
    }

    function setPartyTime(bool _value) external onlyOwner {
        partyTime = _value;
        emit SetPartyTime(_value, block.timestamp);
    }

    function setTaxBracketFeeMultiplier(
        uint256 _taxBracketFeeMultiplier,
        bool _isTaxBracketEnabled
    ) external onlyOwner {
        require(
            _taxBracketFeeMultiplier <= MAX_TAX_BRACKET_FEE_RATE,
            'max bracket fee exceeded'
        );
        taxBracketMultiplier = _taxBracketFeeMultiplier;
        isTaxBracket = _isTaxBracketEnabled;
        emit SetTaxBracketFeeMultiplier(
            _taxBracketFeeMultiplier,
            _isTaxBracketEnabled,
            block.timestamp
        );
    }

    function clearStuckBalance(address _receiver) external onlyOwner {
        uint256 balance = address(this).balance;
        payable(_receiver).transfer(balance);
        emit ClearStuckBalance(balance, _receiver, block.timestamp);
    }

    function rescueToken(address tokenAddress)
    external
    onlyOwner
    returns (bool success)
    {
        uint256 tokens = ERC20Detailed(tokenAddress).balanceOf(address(this));
        emit RescueToken(tokenAddress, msg.sender, tokens, block.timestamp);
        return ERC20Detailed(tokenAddress).transfer(msg.sender, tokens);
    }

    function setAutoRebase(bool _autoRebase) external onlyOwner {
        autoRebase = _autoRebase;
        emit SetAutoRebase(_autoRebase, block.timestamp);
    }

    //set rebase frequency
    function setRebaseFrequency(uint256 _rebaseFrequency) external onlyOwner {
        require(_rebaseFrequency <= MAX_REBASE_FREQUENCY, 'Too high');
        rebaseFrequency = _rebaseFrequency;
        emit SetRebaseFrequency(_rebaseFrequency, block.timestamp);
    }

    //set reward yield
    function setRewardYield(
        uint256 _rewardYield,
        uint256 _rewardYieldDenominator
    ) external {
        require(canSetRewardYield[msg.sender], 'Not allowed for reward yield');
        REWARD_YIELD = _rewardYield;
        REWARD_YIELD_DENOMINATOR = _rewardYieldDenominator;
        emit SetRewardYield(
            _rewardYield,
            _rewardYieldDenominator,
            block.timestamp,
            msg.sender
        );
    }

    //set swap threshold
    function setSwapThreshold(uint256 _value) external onlyOwner {
        swapThreshold = _value;
    }

    //enable fees on normal transfer
    function setFeesOnNormalTransfers(bool _enabled) external onlyOwner {
        feesOnNormalTransfers = _enabled;
    }

    //set next rebase time
    function setNextRebase(uint256 _nextRebase) external onlyOwner {
        require(_nextRebase > block.timestamp, 'can not be in past');
        nextRebase = _nextRebase;
        emit SetNextRebase(_nextRebase, block.timestamp);
    }

    function setIsLiquidityEnabled(bool _value) external onlyOwner {
        isLiquidityEnabled = _value;
        emit SetIsLiquidityEnabled(_value);
    }

    function setMaxTransactionAmount(uint256 _maxSellTxn, uint256 _maxBuyTxn)
    external
    onlyOwner
    {
        require(
            _maxSellTxn > MIN_SELL_AMOUNT_RATE,
            'Below minimum sell amount'
        );
        require(_maxBuyTxn > MIN_BUY_AMOUNT_RATE, 'Below minimum buy amount');
        maxSellTransactionAmount = _maxSellTxn;
        maxBuyTransactionAmount = _maxBuyTxn;
        emit SetMaxTransactionAmount(_maxSellTxn, _maxBuyTxn, block.timestamp);
    }

    function setWallDivisor(uint256 _wallDivisor, bool _isWall)
    external
    onlyOwner
    {
        wallDivisor = _wallDivisor;
        isWall = _isWall;
        emit SetWallDivisor(_wallDivisor, _isWall);
    }

    event SwapBack(
        uint256 contractTokenBalance,
        uint256 amountToLiquify,
        uint256 amountToRFV,
        uint256 amountToTreasury,
        uint256 amountToGalaxyBond
    );

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

    event SetFeeReceivers(
        address indexed _liquidityReceiver,
        address indexed _treasuryReceiver,
        address indexed _riskFreeValueReceiver,
        address _galaxyBondReceiver
    );

    event SetPartyTime(bool indexed state, uint256 indexed time);

    event SetTaxBracketFeeMultiplier(
        uint256 indexed state,
        bool indexed _isTaxBracketEnabled,
        uint256 indexed time
    );

    event ClearStuckBalance(
        uint256 indexed amount,
        address indexed receiver,
        uint256 indexed time
    );

    event RescueToken(
        address indexed tokenAddress,
        address indexed sender,
        uint256 indexed tokens,
        uint256 time
    );

    event SetAutoRebase(bool indexed value, uint256 indexed time);

    event SetTaxBracket(bool indexed value, uint256 indexed time);

    event SetRebaseFrequency(uint256 indexed frequency, uint256 indexed time);

    event SetRewardYield(
        uint256 indexed rewardYield,
        uint256 indexed frequency,
        uint256 indexed time,
        address setter
    );

    event SetFeesOnNormalTransfers(bool indexed value, uint256 indexed time);

    event SetNextRebase(uint256 indexed value, uint256 indexed time);

    event SetMaxTransactionAmount(
        uint256 indexed sell,
        uint256 indexed buy,
        uint256 indexed time
    );

    event SetWallDivisor(uint256 indexed _wallDivisor, bool indexed _isWall);

    event SetSwapBackSettings(
        bool indexed enabled,
        uint256 indexed num,
        uint256 indexed denum
    );

    event SetFees(
        uint256 indexed _liquidityFee,
        uint256 indexed _riskFreeValue,
        uint256 indexed _treasuryFee,
        uint256 _sellFeeTreasuryAdded,
        uint256 _sellFeeRFVAdded,
        uint256 _burnFee,
        uint256 sellBurnFee,
        uint256 totalBuyFee,
        bool _isTaxBracketEnabledInMoveFee
    );

    event LogRebase(uint256 indexed epoch, uint256 totalSupply);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SetInitialDistribution(bool indexed value);
    event SetInvestRemovalDelay(uint256 indexed value);
    event SetMaxInvestRemovablePerPeriod(uint256 indexed value);
    event SetMoveBalance(bool indexed value);
    event SetIsLiquidityEnabled(bool indexed value);
    event SetPartyListDivisor(uint256 indexed value);
    event SetHourlyLimit(bool indexed value);
    event SetContractToChange(address indexed value);
    event SetSwapThreshold(uint256 indexed value);
    event SetTotalFeeExempt(address indexed addy, bool indexed value);
    event SetBuyFeeExempt(address indexed addy, bool indexed value);
    event SetSellFeeExempt(address indexed addy, bool indexed value);
    event SetRebaseWhitelist(
        address indexed addy,
        bool indexed value,
        uint256 indexed _type
    );
    event SetSubContracts(address indexed pair, bool indexed value);
    event SetPartyAddresses(address indexed pair, bool indexed value);
    event SetSphereGamesAddresses(address indexed pair, bool indexed value);
    event GenericErrorEvent(string reason);
    event SetRouter(address indexed _address, address indexed _pair);
    event MoveBalance(address from, address to);
}

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ClearStuckBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"GenericErrorEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"MoveBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","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":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"RescueToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetAutoRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addy","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetBuyFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"value","type":"address"}],"name":"SetContractToChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_liquidityReceiver","type":"address"},{"indexed":true,"internalType":"address","name":"_treasuryReceiver","type":"address"},{"indexed":true,"internalType":"address","name":"_riskFreeValueReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_galaxyBondReceiver","type":"address"}],"name":"SetFeeReceivers","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_riskFreeValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellFeeTreasuryAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellFeeRFVAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_burnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBuyFee","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_isTaxBracketEnabledInMoveFee","type":"bool"}],"name":"SetFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetFeesOnNormalTransfers","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetHourlyLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetInitialDistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetInvestRemovalDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetIsLiquidityEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetMaxInvestRemovablePerPeriod","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"buy","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetMoveBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetNextRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetPartyAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetPartyListDivisor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"state","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetPartyTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"frequency","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetRebaseFrequency","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addy","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"_type","type":"uint256"}],"name":"SetRebaseWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"rewardYield","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"frequency","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"address","name":"setter","type":"address"}],"name":"SetRewardYield","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"},{"indexed":true,"internalType":"address","name":"_pair","type":"address"}],"name":"SetRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addy","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetSellFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetSphereGamesAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetSubContracts","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":true,"internalType":"uint256","name":"num","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"denum","type":"uint256"}],"name":"SetSwapBackSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetSwapThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetTaxBracket","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"state","type":"uint256"},{"indexed":true,"internalType":"bool","name":"_isTaxBracketEnabled","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetTaxBracketFeeMultiplier","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addy","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetTotalFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_wallDivisor","type":"uint256"},{"indexed":true,"internalType":"bool","name":"_isWall","type":"bool"}],"name":"SetWallDivisor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"MATICReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"contractTokenBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToLiquify","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToRFV","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToTreasury","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToGalaxyBond","type":"uint256"}],"name":"SwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"TransferOwnerShip","type":"event"},{"inputs":[],"name":"INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_disallowedToMove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_makerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_markerPairCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_partyAddy","type":"address"},{"internalType":"bool","name":"_value","type":"bool"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"addPartyAddies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sphereGamesAddy","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"addSphereGamesAddies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_subContract","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"addSubContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gons","type":"uint256"}],"name":"balanceForGons","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"convertTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epochBuyPressure","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochCollectedBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochCollectedSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochSellPressure","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"galaxyBondReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getBalanceContracts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getCurrentTaxBracket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getLastPeriodWithdrawals","outputs":[{"internalType":"uint256","name":"totalWithdrawLastHour","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensInLPCirculation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getUserTotalOnDifferentContractsSphere","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"gonsForBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_pair","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialDistributionFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"investorInfoMap","outputs":[{"internalType":"uint256","name":"totalInvestableExchanged","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMoveBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSellHourlyLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxBracket","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxBracketEnabledInMoveFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"markerPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"moveBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldEpochBuyPressure","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldEpochCollectedBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldEpochCollectedSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldEpochSellPressure","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"partyArray","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"partyArrayCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"partyArrayFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partyTime","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"riskFreeValueReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_autoRebase","type":"bool"}],"name":"setAutoRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_value","type":"address"}],"name":"setContractToChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_treasuryReceiver","type":"address"},{"internalType":"address","name":"_riskFreeValueReceiver","type":"address"},{"internalType":"address","name":"_galaxyBondReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"setFeeTypeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_riskFreeValueFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_buyGalaxyBondFee","type":"uint256"},{"internalType":"uint256","name":"_sellFeeTreasuryAdded","type":"uint256"},{"internalType":"uint256","name":"_sellFeeRFVAdded","type":"uint256"},{"internalType":"uint256","name":"_sellBurnFee","type":"uint256"},{"internalType":"uint256","name":"_sellGalaxyBond","type":"uint256"},{"internalType":"uint256","name":"_realFeePartyArray","type":"uint256"},{"internalType":"bool","name":"_isTaxBracketEnabledInMoveFee","type":"bool"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnNormalTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setInvestRemovalDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setIsLiquidityEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxInvestRemovablePerPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTxn","type":"uint256"},{"internalType":"uint256","name":"_maxBuyTxn","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setMoveBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nextRebase","type":"uint256"}],"name":"setNextRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setPartyListDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setPartyTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rebaseFrequency","type":"uint256"}],"name":"setRebaseFrequency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardYield","type":"uint256"},{"internalType":"uint256","name":"_rewardYieldDenominator","type":"uint256"}],"name":"setRewardYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_pair","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setSellHourlyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_num","type":"uint256"},{"internalType":"uint256","name":"_denom","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxBracketFeeMultiplier","type":"uint256"},{"internalType":"bool","name":"_isTaxBracketEnabled","type":"bool"}],"name":"setTaxBracketFeeMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_wallDivisor","type":"uint256"},{"internalType":"bool","name":"_isWall","type":"bool"}],"name":"setWallDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"setWhitelistSetters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sphereGamesCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sphereGamesContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"subContractCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"subContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBracketMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600880546001600160701b0319166d0101000000010001000001000101179055662386f26fc100006017556000601a819055601b556103e86200004a6012600a62000483565b6200005b9064012a05f20062000498565b6200006990600019620004d0565b6200007790600019620004e7565b62000083919062000501565b601c55610e10601d556032601e556032601f556101ea6020556107086021556503962e7f4ce0602255603260235560006024556032602555601460265560006027556954b40b1f852bda000000602855601e6029556000602b556000602c556000602d556000602e556969e10de76676d08000006030556969e10de76676d08000006031556362311aa7603255600060335560006034556000603555600060365560006037556032603855602354602954601e5462000143919062000518565b6200014f919062000518565b60395560255460265460395462000167919062000518565b62000173919062000518565b603a556002603b55603c80546001600160a01b0319908116731a2ce410a034424b784d4b228f167a061b94cff417909155603d805482167320d61737f972eecb0af5f0a85ab358cd083dd56a908117909155603e8054831673826b8d2d523e7af40888754e3de64348c00b99f4179055603f80548316909117905560408054909116730d500b1d8e8ef31e21c99d1db9a6444d3adf12701790556a013da329b63364718000006043553480156200022957600080fd5b50604080518082018252600e81526d5370686572652046696e616e636560901b60208083019182528351808501909452600684526553504845524560d01b908401528151919291601291620002829160009190620002c8565b50815162000298906001906020850190620002c8565b506002805460ff929092166001600160a81b0319909216919091176101003302179055505060016003556200056f565b828054620002d69062000533565b90600052602060002090601f016020900481019282620002fa576000855562000345565b82601f106200031557805160ff191683800117855562000345565b8280016001018555821562000345579182015b828111156200034557825182559160200191906001019062000328565b506200035392915062000357565b5090565b5b8082111562000353576000815560010162000358565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620003c5578160001904821115620003a957620003a96200036e565b80851615620003b757918102915b93841c939080029062000389565b509250929050565b600082620003de575060016200047d565b81620003ed575060006200047d565b8160018114620004065760028114620004115762000431565b60019150506200047d565b60ff8411156200042557620004256200036e565b50506001821b6200047d565b5060208310610133831016604e8410600b841016171562000456575081810a6200047d565b62000462838362000384565b80600019048211156200047957620004796200036e565b0290505b92915050565b6000620004918383620003cd565b9392505050565b6000816000190483118215151615620004b557620004b56200036e565b500290565b634e487b7160e01b600052601260045260246000fd5b600082620004e257620004e2620004ba565b500690565b600082821015620004fc57620004fc6200036e565b500390565b600082620005135762000513620004ba565b500490565b600082198211156200052e576200052e6200036e565b500190565b600181811c908216806200054857607f821691505b6020821081036200056957634e487b7160e01b600052602260045260246000fd5b50919050565b615c6b806200057f6000396000f3fe6080604052600436106106865760003560e01c806377d947431161035f578063af9b800e116101d1578063deac8ba711610102578063f3a54f2c116100a0578063f887ea401161007a578063f887ea401461139c578063fcf23291146113bc578063ff63f147146113d1578063ff8ac17c146113f257600080fd5b8063f3a54f2c1461132f578063f6bbe5161461134f578063f703f36f1461136f57600080fd5b8063e49c26e3116100dc578063e49c26e3146112b9578063ef8cc78f146112d9578063f09a4016146112ef578063f2fde38b1461130f57600080fd5b8063deac8ba71461126d578063e080680414611283578063e15beb801461129957600080fd5b8063d0d1d3621161016f578063d439979011610149578063d4399790146111ae578063d6737a6e146111e7578063dcf4242414611207578063dd62ed3e1461122757600080fd5b8063d0d1d3621461114b578063d1fce2641461116b578063d2a66b111461118d57600080fd5b8063b9c95f8e116101ab578063b9c95f8e146110cf578063bc7e68a3146110e5578063c0da424c146110fb578063d08893581461112b57600080fd5b8063af9b800e1461105e578063b62496f51461107f578063b7426fb3146110af57600080fd5b80639ae7372d116102ab578063a457c2d711610249578063a9059cbb11610223578063a9059cbb14610fd8578063a9b38cb014610ff8578063acd738bc14611028578063ad570c091461103e57600080fd5b8063a457c2d714610f82578063a8aa1b3114610fa2578063a8bcc98f14610fc257600080fd5b80639d0014b1116102855780639d0014b114610f0c5780639d9241ec14610f2c578063a2b92d5614610f42578063a3c4e7d314610f6257600080fd5b80639ae7372d14610eae5780639b8d749514610ece5780639cf59d7f14610ee457600080fd5b806383823e1e116103185780639079f932116102f25780639079f93214610e385780639481205714610e5957806395d89b4114610e795780639a7a23d614610e8e57600080fd5b806383823e1e14610dd557806386fe511d14610df55780638da5cb5b14610e1557600080fd5b806377d9474314610d145780637965d56d14610d345780637a8ccfd914610d545780637d4b501714610d745780637ee029c414610d9457806380226a1214610db457600080fd5b806339509351116104f85780635aa821a91161044457806370a08231116103e2578063727dba53116103bc578063727dba5314610c9f578063753d02a114610cbf578063764d72bf14610cd457806376e90db514610cf457600080fd5b806370a0823114610c54578063715018a614610c74578063716cc28014610c8957600080fd5b806361a9d1b11161041e57806361a9d1b114610bf457806366eb378514610c095780636d351d1a14610c1e5780636ddd171314610c3357600080fd5b80635aa821a914610ba85780635f2a6d6914610bbe5780635fdd4ed514610bde57600080fd5b806345b10e12116104b15780634e66160c1161048b5780634e66160c14610b365780635569408614610b6657806357b535c014610b7c57806359b107b914610b9257600080fd5b806345b10e1214610ae0578063492b381e14610b005780634cd9ddf214610b1657600080fd5b80633950935114610a1f5780633c316fd514610a3f5780633c5c780014610a605780633c8e556d14610a8057806341d68b8f14610aa05780634460d3cf14610ac057600080fd5b80631489294a116105d257806326987b6011610570578063313ce5671161054a578063313ce5671461099057806335179d6b146109b25780633643f1d5146109d2578063368743be146109f257600080fd5b806326987b60146109505780632b112e49146109655780632df75cb11461097a57600080fd5b8063198b763e116105ac578063198b763e146108d05780631bd39674146108f057806323b872dd14610910578063264d26dd1461093057600080fd5b80631489294a1461087b57806315da01481461089b57806318160ddd146108bb57600080fd5b806307ebec271161063f5780630978310d116106195780630978310d146107eb5780630faacfe11461081b5780631276089b1461083b57806313b407ee1461085b57600080fd5b806307ebec271461078857806308b1fd8f146107ab578063095ea7b3146107cb57600080fd5b8063011bc9871461069257806301b16827146106b457806302259e9e146106d4578063031620c8146106fd57806304a17c5f1461072e57806306fdde031461076657600080fd5b3661068d57005b600080fd5b34801561069e57600080fd5b506106b26106ad36600461545d565b611413565b005b3480156106c057600080fd5b506106b26106cf366004615476565b6114bb565b3480156106e057600080fd5b506106ea60315481565b6040519081526020015b60405180910390f35b34801561070957600080fd5b5060085461071e90600160401b900460ff1681565b60405190151581526020016106f4565b34801561073a57600080fd5b50603f5461074e906001600160a01b031681565b6040516001600160a01b0390911681526020016106f4565b34801561077257600080fd5b5061077b611561565b6040516106f49190615498565b34801561079457600080fd5b5060085461071e9065010000000000900460ff1681565b3480156107b757600080fd5b50603d5461074e906001600160a01b031681565b3480156107d757600080fd5b5061071e6107e6366004615504565b6115f3565b3480156107f757600080fd5b5061071e61080636600461552e565b600f6020526000908152604090205460ff1681565b34801561082757600080fd5b506106ea61083636600461552e565b611660565b34801561084757600080fd5b506106b2610856366004615557565b6117d3565b34801561086757600080fd5b506106b2610876366004615574565b61184d565b34801561088757600080fd5b5060405461074e906001600160a01b031681565b3480156108a757600080fd5b506106b26108b63660046155ab565b611ae7565b3480156108c757600080fd5b506019546106ea565b3480156108dc57600080fd5b5061074e6108eb36600461545d565b611cee565b3480156108fc57600080fd5b506106ea61090b36600461545d565b611d18565b34801561091c57600080fd5b5061071e61092b3660046155ea565b611d28565b34801561093c57600080fd5b50603c5461074e906001600160a01b031681565b34801561095c57600080fd5b506106ea611de8565b34801561097157600080fd5b506106ea611dfa565b34801561098657600080fd5b506106ea602f5481565b34801561099c57600080fd5b5060025460405160ff90911681526020016106f4565b3480156109be57600080fd5b5061074e6109cd36600461545d565b611ebf565b3480156109de57600080fd5b506106b26109ed366004615557565b611ecf565b3480156109fe57600080fd5b506106ea610a0d36600461552e565b60146020526000908152604090205481565b348015610a2b57600080fd5b5061071e610a3a366004615504565b611f4a565b348015610a4b57600080fd5b5060085461071e90600160601b900460ff1681565b348015610a6c57600080fd5b506106b2610a7b366004615574565b611fd0565b348015610a8c57600080fd5b506106b2610a9b366004615626565b612226565b348015610aac57600080fd5b506106b2610abb36600461567a565b6122a5565b348015610acc57600080fd5b5061071e610adb36600461552e565b612389565b348015610aec57600080fd5b506106b2610afb3660046156ad565b6124f0565b348015610b0c57600080fd5b506106ea602c5481565b348015610b2257600080fd5b506106b2610b3136600461545d565b6125ca565b348015610b4257600080fd5b5061071e610b5136600461552e565b60136020526000908152604090205460ff1681565b348015610b7257600080fd5b506106ea60345481565b348015610b8857600080fd5b506106ea60375481565b348015610b9e57600080fd5b506106ea60395481565b348015610bb457600080fd5b506106ea60305481565b348015610bca57600080fd5b506106b2610bd936600461552e565b61266b565b348015610bea57600080fd5b506106ea60385481565b348015610c0057600080fd5b506106b26126e2565b348015610c1557600080fd5b506106b2612868565b348015610c2a57600080fd5b506106ea6128a1565b348015610c3f57600080fd5b5060085461071e90600160681b900460ff1681565b348015610c6057600080fd5b506106ea610c6f36600461552e565b6128b3565b348015610c8057600080fd5b506106b26128ed565b348015610c9557600080fd5b506106ea602a5481565b348015610cab57600080fd5b506106ea610cba36600461552e565b61296b565b348015610ccb57600080fd5b506106b2612a37565b348015610ce057600080fd5b506106b2610cef36600461552e565b612bb3565b348015610d0057600080fd5b506106b2610d0f36600461545d565b612c57565b348015610d2057600080fd5b5061074e610d2f36600461545d565b612d03565b348015610d4057600080fd5b506106ea610d4f36600461545d565b612d33565b348015610d6057600080fd5b506106b2610d6f36600461545d565b612d43565b348015610d8057600080fd5b50603e5461074e906001600160a01b031681565b348015610da057600080fd5b506106b2610daf3660046155ab565b612de5565b348015610dc057600080fd5b5060085461071e90600160381b900460ff1681565b348015610de157600080fd5b506106b2610df0366004615557565b612f31565b348015610e0157600080fd5b506106ea610e1036600461552e565b612fac565b348015610e2157600080fd5b5060025461010090046001600160a01b031661074e565b348015610e4457600080fd5b5060085461071e906301000000900460ff1681565b348015610e6557600080fd5b506106b2610e74366004615557565b612fcd565b348015610e8557600080fd5b5061077b61304a565b348015610e9a57600080fd5b506106b2610ea9366004615574565b613059565b348015610eba57600080fd5b506106b2610ec936600461545d565b613315565b348015610eda57600080fd5b506106ea60335481565b348015610ef057600080fd5b50602254601754604080519283526020830191909152016106f4565b348015610f1857600080fd5b506106b2610f2736600461545d565b6133bd565b348015610f3857600080fd5b506106ea603a5481565b348015610f4e57600080fd5b506106b2610f5d366004615557565b6133f1565b348015610f6e57600080fd5b506106ea610f7d36600461552e565b61346d565b348015610f8e57600080fd5b5061071e610f9d366004615504565b6134c8565b348015610fae57600080fd5b5060425461074e906001600160a01b031681565b348015610fce57600080fd5b506106ea603b5481565b348015610fe457600080fd5b5061071e610ff3366004615504565b6135af565b34801561100457600080fd5b5061071e61101336600461552e565b60126020526000908152604090205460ff1681565b34801561103457600080fd5b506106ea60355481565b34801561104a57600080fd5b506106b26110593660046156ad565b6135ee565b34801561106a57600080fd5b5060085461071e90600160301b900460ff1681565b34801561108b57600080fd5b5061071e61109a36600461552e565b60106020526000908152604090205460ff1681565b3480156110bb57600080fd5b5061071e6110ca36600461552e565b61366e565b3480156110db57600080fd5b506106ea602e5481565b3480156110f157600080fd5b506106ea60325481565b34801561110757600080fd5b5061071e61111636600461552e565b60116020526000908152604090205460ff1681565b34801561113757600080fd5b506106b26111463660046156d2565b6138f9565b34801561115757600080fd5b506106b26111663660046155ab565b6139c1565b34801561117757600080fd5b5060085461071e90640100000000900460ff1681565b34801561119957600080fd5b5060085461071e90600160501b900460ff1681565b3480156111ba57600080fd5b5061071e6111c936600461552e565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156111f357600080fd5b5061074e61120236600461545d565b613bc2565b34801561121357600080fd5b506106b2611222366004615476565b613bd2565b34801561123357600080fd5b506106ea61124236600461567a565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b34801561127957600080fd5b506106ea60365481565b34801561128f57600080fd5b506106ea602d5481565b3480156112a557600080fd5b506106b26112b4366004615557565b613cf0565b3480156112c557600080fd5b506106b26112d4366004615707565b613d6b565b3480156112e557600080fd5b506106ea602b5481565b3480156112fb57600080fd5b506106b261130a36600461567a565b613fae565b34801561131b57600080fd5b506106b261132a36600461552e565b614211565b34801561133b57600080fd5b506106b261134a366004615557565b61427d565b34801561135b57600080fd5b5061074e61136a36600461545d565b6142bf565b34801561137b57600080fd5b506106ea61138a36600461552e565b60096020526000908152604090205481565b3480156113a857600080fd5b5060415461074e906001600160a01b031681565b3480156113c857600080fd5b506106ea6142cf565b3480156113dd57600080fd5b5060085461071e90600160481b900460ff1681565b3480156113fe57600080fd5b5060085461071e90600160581b900460ff1681565b60025461010090046001600160a01b0316331461144b5760405162461bcd60e51b815260040161144290615791565b60405180910390fd5b604b8111156114885760405162461bcd60e51b81526020600482015260096024820152686d617820706172747960b81b6044820152606401611442565b601f81905560405181907f99595bf6e2815a96807fe941420680afd549926424c257ec2c34de018f2f732290600090a250565b336000908152600e602052604090205460ff1661151a5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420616c6c6f77656420666f7220726577617264207969656c64000000006044820152606401611442565b602282905560178190556040513381524290829084907f8164f36e13b64f87a896ae3bb092f0ed3ea235f8a9192c6aecb51beabcea10d59060200160405180910390a45050565b606060008054611570906157b4565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906157b4565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b5050505050905090565b3360008181526015602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061164e9086815260200190565b60405180910390a35060015b92915050565b60008060005b6007548110156117175760078181548110611683576116836157e8565b60009182526020909120015460405163453d3db360e11b81526001600160a01b03868116600483015290911690638a7a7b6690602401602060405180830381865afa1580156116d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fa91906157fe565b611704908361582d565b508061170f81615845565b915050611666565b5060005b6006548110156117cc5760068181548110611738576117386157e8565b6000918252602090912001546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa15801561178b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117af91906157fe565b6117b9908361582d565b50806117c481615845565b91505061171b565b5092915050565b60025461010090046001600160a01b031633146118025760405162461bcd60e51b815260040161144290615791565b6008805464ff000000001916640100000000831515908102919091179091556040517fadd2ae1e48fad2610e967f44a01d455adca45c693dc959f9a0b5b6f807946f2390600090a250565b60025461010090046001600160a01b0316331461187c5760405162461bcd60e51b815260040161144290615791565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036118e05760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401611442565b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915561195d57600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b038416179055611aab565b6006546001106119a15760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b6044820152606401611442565b60005b600654811015611aa957826001600160a01b0316600682815481106119cb576119cb6157e8565b6000918252602090912001546001600160a01b031603611a9757600680546119f59060019061585e565b81548110611a0557611a056157e8565b600091825260209091200154600680546001600160a01b039092169183908110611a3157611a316157e8565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506006805480611a7057611a70615875565b600082815260209020810160001990810180546001600160a01b0319169055019055611aa9565b80611aa181615845565b9150506119a4565b505b604051811515906001600160a01b038416907fb165f6ff487f30978c0ede582c4b90aea6317730c4ccca38529fbd11b74a2c3e90600090a35050565b60025461010090046001600160a01b03163314611b165760405162461bcd60e51b815260040161144290615791565b80600103611bb3576001600160a01b0383166000908152600c602052604090205482151560ff909116151503611b5e5760405162461bcd60e51b81526004016114429061588b565b6001600160a01b0383166000818152600c6020526040808220805460ff191686151590811790915590519092917f507b98c4fc0974cbaaade1c558d03191b924272e491fc34c645965b5c75420fa91a3505050565b80600203611c50576001600160a01b0383166000908152600a602052604090205482151560ff909116151503611bfb5760405162461bcd60e51b81526004016114429061588b565b6001600160a01b0383166000818152600a6020526040808220805460ff191686151590811790915590519092917f89e1f304a67b18800fe8e70e1be2fe04d7c4fd682d71141198828c143c41d9b891a3505050565b80600303611ce9576001600160a01b0383166000908152600b602052604090205482151560ff909116151503611c985760405162461bcd60e51b81526004016114429061588b565b6001600160a01b0383166000818152600b6020526040808220805460ff191686151590811790915590519092917fd73ba49bcc1c8c1e82b426c44467e431a9247b79f9528fac3ab2847c3202b98391a35b505050565b60068181548110611cfe57600080fd5b6000918252602090912001546001600160a01b0316905081565b60006018548261165a91906158b0565b6000826001600160a01b038116611d515760405162461bcd60e51b8152600401611442906158cf565b6001600160a01b038516600090815260156020908152604080832033845290915290205460001914611dd1576001600160a01b0385166000908152601560209081526040808320338452909152902054611dac90849061585e565b6001600160a01b03861660009081526015602090815260408083203384529091529020555b611ddc85858561432d565b50600195945050505050565b6000611df5602f54612d33565b905090565b601854603d546001600160a01b03166000908152601660205260408120547f0263c2b778d062355049effc2dece97bc6547ff8a88a3258daa512061c2153dd5461dead83527f290d80ce586bfe95e1ebf348e3ba109df813891ad867417e64d38c5a50473b5754929392611e706012600a6159e3565b611e7f9064012a05f2006158b0565b611e8b90600019615a05565b611e979060001961585e565b611ea1919061585e565b611eab919061585e565b611eb5919061585e565b611df59190615a19565b60058181548110611cfe57600080fd5b60025461010090046001600160a01b03163314611efe5760405162461bcd60e51b815260040161144290615791565b6008805466ff0000000000001916600160301b831515908102919091179091556040517f7155abe5d76e40e32b68c168e9dde4055d00e1ffdb30d0e6d265622716a1d92390600090a250565b3360009081526015602090815260408083206001600160a01b0386168452909152812054611f7990839061585e565b3360008181526015602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161164e565b60025461010090046001600160a01b03163314611fff5760405162461bcd60e51b815260040161144290615791565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036120635760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401611442565b6001600160a01b0382166000908152601360205260409020805460ff191682158015919091179091556120e057600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b0384161790556121ea565b60005b6007548110156121e857826001600160a01b03166007828154811061210a5761210a6157e8565b6000918252602090912001546001600160a01b0316036121d657600780546121349060019061585e565b81548110612144576121446157e8565b600091825260209091200154600780546001600160a01b039092169183908110612170576121706157e8565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060078054806121af576121af615875565b600082815260209020810160001990810180546001600160a01b03191690550190556121e8565b806121e081615845565b9150506120e3565b505b604051811515906001600160a01b038416907f8f1936ddb0e6b394e1edf1ac695592d1a059eecc4786f7083e71b11ec945e7ca90600090a35050565b60025461010090046001600160a01b031633146122555760405162461bcd60e51b815260040161144290615791565b603c80546001600160a01b039586166001600160a01b031991821617909155603d805494861694821694909417909355603e805492851692841692909217909155603f8054919093169116179055565b60025461010090046001600160a01b031633146122d45760405162461bcd60e51b815260040161144290615791565b604180546001600160a01b03199081166001600160a01b03858116918217909355604280549092168484161782553060008181526015602090815260408083209483529390528281206000199081905591815282812082905583548516815291909120555461234591166001613059565b806001600160a01b0316826001600160a01b03167f50bfd9c0b9815c386500292d8de123643c6c935ffd384a364381b3b11e281e5c60405160405180910390a35050565b60025460009061010090046001600160a01b031633146123bb5760405162461bcd60e51b815260040161144290615791565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015612402573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242691906157fe565b905080336001600160a01b0316846001600160a01b03167fed3c8f48a6c3247e7a68382e752734feed4bf63004c064208e3117e35097dabb4260405161246e91815260200190565b60405180910390a460405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156124c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e79190615a2d565b9150505b919050565b60025461010090046001600160a01b0316331461251f5760405162461bcd60e51b815260040161144290615791565b60328211156125705760405162461bcd60e51b815260206004820152601860248201527f6d617820627261636b65742066656520657863656564656400000000000000006044820152606401611442565b60388290556008805469ff0000000000000000001916600160481b8315159081029190911790915560405142919084907f0d9ee6cc1c2d2a5825fe816f3cfc6ab44f33303930004a3e26a3259616c9add890600090a45050565b60025461010090046001600160a01b031633146125f95760405162461bcd60e51b815260040161144290615791565b6107088111156126365760405162461bcd60e51b81526020600482015260086024820152670a8dede40d0d2ced60c31b6044820152606401611442565b6021819055604051429082907f9147f2d3ae1a14e9012c81c143c7c834a15f3afffcd29d3b35631aa0a3b0093e90600090a350565b60025461010090046001600160a01b0316331461269a5760405162461bcd60e51b815260040161144290615791565b604080546001600160a01b0319166001600160a01b038316908117825590517faab8973b5857f63f79e83682350a71c735f612a5f7620d42d249227023f9525490600090a250565b6002600354036127345760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611442565b6002600355336000908152600d602052604090205460ff166127895760405162461bcd60e51b815260206004820152600e60248201526d63616e206e6f742072656261736560901b6044820152606401611442565b60445460ff16156127c85760405162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b6044820152606401611442565b4260325411156128085760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b6044820152606401611442565b6000805b60175460225460195461281f91906158b0565b6128299190615a19565b915061283482614972565b508061283f81615a4a565b915050426032541080156128535750606481125b61280c5761285f612a37565b50506001600355565b60025461010090046001600160a01b031633146128975760405162461bcd60e51b815260040161144290615791565b61289f614ae1565b565b6000601854601c54611df59190615a19565b60006018546000036128c757506000919050565b6018546001600160a01b03831660009081526016602052604090205461165a9190615a19565b60025461010090046001600160a01b0316331461291c5760405162461bcd60e51b815260040161144290615791565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b6001600160a01b038116600090815260096020526040812060018101825b8154811015612a2f5760008282815481106129a6576129a66157e8565b9060005260206000209060020201604051806040016040529081600082015481526020016001820154815250509050601d54426129e3919061585e565b815110612a1c578282815481106129fc576129fc6157e8565b90600052602060002090600202016001015485612a19919061582d565b94505b5080612a2781615845565b915050612989565b505050919050565b60005b600454811015612bb05760048181548110612a5757612a576157e8565b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b158015612aa257600080fd5b505af1925050508015612ab3575060015b612b9e57612abf615a62565b806308c379a003612b925750612ad3615ab9565b80612ade5750612b94565b7f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c2383604051612b4d9060208082526027908201527f6d616e75616c53796e6328293a205f6d616b657250616972732e73796e6328296040820152660811985a5b195960ca1b606082015260800190565b60405180910390a17f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c238381604051612b849190615498565b60405180910390a150612b9e565b505b3d6000803e3d6000fd5b80612ba881615845565b915050612a3a565b50565b60025461010090046001600160a01b03163314612be25760405162461bcd60e51b815260040161144290615791565b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612c1a573d6000803e3d6000fd5b5042826001600160a01b0316827f764ac18b38788ceb5d273876574dd816d95e562605c44e30f5638e7f92ceef8860405160405180910390a45050565b60025461010090046001600160a01b03163314612c865760405162461bcd60e51b815260040161144290615791565b6a013da329b63364718000008111612cd05760405162461bcd60e51b815260206004820152600d60248201526c42656c6f77206d696e696d756d60981b6044820152606401611442565b604381905560405181907f3e2b28733d83c500897cb5d9f71e9286f059e81ba4ba63584b43a9278879ca4790600090a250565b600060048281548110612d1857612d186157e8565b6000918252602090912001546001600160a01b031692915050565b60006018548261165a9190615a19565b60025461010090046001600160a01b03163314612d725760405162461bcd60e51b815260040161144290615791565b611c208110612db25760405162461bcd60e51b815260206004820152600c60248201526b6f766572203220686f75727360a01b6044820152606401611442565b601d81905560405181907f5c630b842a78838557c54c519fb3fb1eedc9157777ef4e42388dcbf5dd1f80b390600090a250565b60025461010090046001600160a01b03163314612e145760405162461bcd60e51b815260040161144290615791565b80600103612e85576001600160a01b0383166000908152600d602052604090205482151560ff909116151503612e5c5760405162461bcd60e51b81526004016114429061588b565b6001600160a01b0383166000908152600d60205260409020805460ff1916831515179055612ef2565b80600203612ef2576001600160a01b0383166000908152600e602052604090205482151560ff909116151503612ecd5760405162461bcd60e51b81526004016114429061588b565b6001600160a01b0383166000908152600e60205260409020805460ff19168315151790555b80821515846001600160a01b03167f94c0aba5d4b641cd28ff4ae32d7c716fd7a3fee1a1b98e6f4d81bad3256ab2be60405160405180910390a4505050565b60025461010090046001600160a01b03163314612f605760405162461bcd60e51b815260040161144290615791565b6008805460ff60601b1916600160601b831515908102919091179091556040514291907f6e78862f553225378cfb6846053b9a466b9a47afcc225a2a3263ea536d991e4090600090a350565b600080612fb8836128b3565b9050612fc383611660565b6124e7908261582d565b60025461010090046001600160a01b03163314612ffc5760405162461bcd60e51b815260040161144290615791565b6008805468ff00000000000000001916600160401b831515908102919091179091556040517f10b5d8d4b73da981d3f4003317acb1c94eb8ecc35278cbb931228c3b3032dbae90600090a250565b606060018054611570906157b4565b60025461010090046001600160a01b031633146130885760405162461bcd60e51b815260040161144290615791565b6001600160a01b03821660009081526010602052604090205481151560ff9091161515036130e65760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401611442565b6001600160a01b0382166000908152601060205260409020805460ff19168215801591909117909155613175576004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038516179055602a80549161316b83615845565b91905055506132d9565b6004546001106131b95760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b6044820152606401611442565b60005b6004548110156132d757826001600160a01b0316600482815481106131e3576131e36157e8565b6000918252602090912001546001600160a01b0316036132c5576004805461320d9060019061585e565b8154811061321d5761321d6157e8565b600091825260209091200154600480546001600160a01b039092169183908110613249576132496157e8565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600480548061328857613288615875565b600082815260208120820160001990810180546001600160a01b0319169055909101909155602a8054916132bb83615b43565b91905055506132d7565b806132cf81615845565b9150506131bc565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b031633146133445760405162461bcd60e51b815260040161144290615791565b4281116133885760405162461bcd60e51b815260206004820152601260248201527118d85b881b9bdd081899481a5b881c185cdd60721b6044820152606401611442565b6032819055604051429082907f3a97bbcdf9724661e5a691bf707b0b97b7fb6814227e9ee3253016b1198e32e790600090a350565b60025461010090046001600160a01b031633146133ec5760405162461bcd60e51b815260040161144290615791565b602855565b60025461010090046001600160a01b031633146134205760405162461bcd60e51b815260040161144290615791565b6008805467ff000000000000001916600160381b831515908102919091179091556040517f5a0f55ed896b3fb4c4609bd54602a6dc0d5b4fbb710e0a47566ae502d7d79f7490600090a250565b60008061347983612fac565b905060006134856142cf565b6134908360646158b0565b61349a9190615a19565b90506000600a82106134ad57600a6134af565b815b9050603854816134bf91906158b0565b95945050505050565b3360009081526015602090815260408083206001600160a01b038616845290915281205480831061351c573360009081526015602090815260408083206001600160a01b038816845290915281205561354b565b613526838261585e565b3360009081526015602090815260408083206001600160a01b03891684529091529020555b3360008181526015602090815260408083206001600160a01b038916808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6000826001600160a01b0381166135d85760405162461bcd60e51b8152600401611442906158cf565b6135e333858561432d565b506001949350505050565b60025461010090046001600160a01b0316331461361d5760405162461bcd60e51b815260040161144290615791565b603b8290556008805460ff60581b1916600160581b8315159081029190911790915560405183907f10145d369bab6fd20cd4cd57ed0fa0d6ebb131e9bb44c901ef1796cb333be7db90600090a35050565b6000816001600160a01b0381166136975760405162461bcd60e51b8152600401611442906158cf565b600854600160381b900460ff166136df5760405162461bcd60e51b815260206004820152600c60248201526b63616e206e6f74206d6f766560a01b6044820152606401611442565b600854640100000000900460ff166137255760405162461bcd60e51b81526020600482015260096024820152682a3930b2329037b33360b91b6044820152606401611442565b336000908152600f602052604090205460ff16156137735760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401611442565b600061377e336128b3565b116137b75760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401611442565b60006137c233611660565b905080156138035760405162461bcd60e51b815260206004820152600e60248201526d6f746865722062616c616e63657360901b6044820152606401611442565b336000908152600f60209081526040808320805460ff191660011790556016909152902054613832818061585e565b33600090815260166020526040808220929092556001600160a01b0387168152205461385f90829061582d565b6001600160a01b0386166000818152601660205260409020919091556018543390600080516020615c168339815191529061389a9085615a19565b60405190815260200160405180910390a3604080513381526001600160a01b03871660208201527fb26ec1d3e73f558763eaa40e4dce759ce985575e28d56966bb2092847a786c74910160405180910390a16001935050505b50919050565b60025461010090046001600160a01b031633146139285760405162461bcd60e51b815260040161144290615791565b6008805460ff60681b1916600160681b85151502179055808261394d6012600a6159e3565b61395c9064012a05f2006158b0565b61396890600019615a05565b6139749060001961585e565b61397e91906158b0565b6139889190615a19565b601c5560405181908390851515907f512cfe1aedabdc06d12a680ace7434d88a9532c8853515536842f5ff52cbe55a90600090a4505050565b60025461010090046001600160a01b031633146139f05760405162461bcd60e51b815260040161144290615791565b6001600160a01b0383166000908152601160209081526040808320805460ff191686158015919091179091556014909252909120829055613a7b57600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b038516179055613b85565b60005b600554811015613b8357836001600160a01b031660058281548110613aa557613aa56157e8565b6000918252602090912001546001600160a01b031603613b715760058054613acf9060019061585e565b81548110613adf57613adf6157e8565b600091825260209091200154600580546001600160a01b039092169183908110613b0b57613b0b6157e8565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506005805480613b4a57613b4a615875565b600082815260209020810160001990810180546001600160a01b0319169055019055613b83565b80613b7b81615845565b915050613a7e565b505b604051821515906001600160a01b038516907f6b76292a2c57cfaa171cd21b53bac8a6a622da6e9c08b9f63a79a50275ff538990600090a3505050565b60048181548110611cfe57600080fd5b60025461010090046001600160a01b03163314613c015760405162461bcd60e51b815260040161144290615791565b6969e10de76676d08000008211613c5a5760405162461bcd60e51b815260206004820152601960248201527f42656c6f77206d696e696d756d2073656c6c20616d6f756e74000000000000006044820152606401611442565b6969e10de76676d08000008111613cb35760405162461bcd60e51b815260206004820152601860248201527f42656c6f77206d696e696d756d2062757920616d6f756e7400000000000000006044820152606401611442565b603182905560308190556040514290829084907f25a1f4940c045b289fe17c2a70381f78360db0e2ad0993cd1f3ffd04d120ad5290600090a45050565b60025461010090046001600160a01b03163314613d1f5760405162461bcd60e51b815260040161144290615791565b6008805463ff00000019166301000000831515908102919091179091556040514291907f832ed7895e341f17afc036cc051864a91809bb5c898a2d5645323b97b6925ec990600090a350565b60025461010090046001600160a01b03163314613d9a5760405162461bcd60e51b815260040161144290615791565b8a601e819055508960238190555088602981905550856026819055508460258190555086601b8190555087601a819055508360248190555082602781905550816020819055506000602354601b54601a54602954601e54613dfb919061582d565b613e05919061582d565b613e0f919061582d565b613e19919061582d565b9050600060275460245460255460265485613e34919061582d565b613e3e919061582d565b613e48919061582d565b613e52919061582d565b905060fa8210613e935760405162461bcd60e51b815260206004820152600c60248201526b6d617820627579206665657360a01b6044820152606401611442565b60fa8110613ed35760405162461bcd60e51b815260206004820152600d60248201526c6d61782073656c6c206665657360981b6044820152606401611442565b6101eb60205410613f175760405162461bcd60e51b815260206004820152600e60248201526d6d6178207061727479206665657360901b6044820152606401611442565b6039829055603a8190556008805460ff60501b1916600160501b85151590810291909117909155602454604080518b8152602081018b90529081018d905260608101919091526080810184905260a08101919091528b908d908f907f36595b1e2bf5f63c84d6962205722de0133c54fdd79516c6f3741aba06ee7d969060c00160405180910390a450505050505050505050505050565b60025461010090046001600160a01b03163314613fdd5760405162461bcd60e51b815260040161144290615791565b60085462010000900460ff161561402c5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401611442565b604180546001600160a01b03199081166001600160a01b0385811691821790935560428054909216848416178255306000818152601560209081526040808320948352939052828120600019908190559181528281208290559254909316825290205561409b6012600a6159e3565b6140aa9064012a05f2006158b0565b6019556140b96012600a6159e3565b6140c89064012a05f2006158b0565b6140d490600019615a05565b6140e09060001961585e565b336000908152601660205260409020556019546140ff6012600a6159e3565b61410e9064012a05f2006158b0565b61411a90600019615a05565b6141269060001961585e565b6141309190615a19565b601855603d546001600160a01b039081166000908152600c60205260408082208054600160ff199182168117909255603e54851684528284208054821683179055603f54909416835281832080548516821790553083528183208054851682179055338352912080549092161790556141b0670de0b6b3a7640000611d18565b602f556141bf33600180612de5565b6141cc3360016002612de5565b6008805462ff00001916620100001790556019546040513391600091600080516020615c16833981519152916142059190815260200190565b60405180910390a35050565b60025461010090046001600160a01b031633146142405760405162461bcd60e51b815260040161144290615791565b6040516001600160a01b038216907fb1eb34684306bcea7f9ed508931dc13b5993c8fdd00fe65c2e4680ae2610a70190600090a2612bb081614f34565b60025461010090046001600160a01b031633146142ac5760405162461bcd60e51b815260040161144290615791565b6008805460ff1916911515919091179055565b60078181548110611cfe57600080fd5b60008060005b6004548110156138f35761430f600482815481106142f5576142f56157e8565b6000918252602090912001546001600160a01b03166128b3565b614319908361582d565b91508061432581615845565b9150506142d5565b6001600160a01b0383166000908152600c6020526040812054819060ff168061436e57506001600160a01b0384166000908152600c602052604090205460ff165b600854909150640100000000900460ff16806143875750805b6143bf5760405162461bcd60e51b81526020600482015260096024820152682a3930b2329037b33360b91b6044820152606401611442565b6001600160a01b03841660009081526010602052604090205460ff1680156143e5575080155b1561442c5760315483111561442c5760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b5d58da081cd95b1b609a1b6044820152606401611442565b6001600160a01b03851660009081526010602052604090205460ff168061446b57506001600160a01b03841660009081526010602052604090205460ff165b156144a857600854610100900460ff161561449857614488612a37565b6008805461ff00191690556144a8565b6008805461ff0019166101001790555b6001600160a01b03841660009081526010602052604090205460ff1680156144ce575080155b80156144f257506001600160a01b03851660009081526011602052604090205460ff165b80156145075750600854600160601b900460ff165b1561455757601f5460315461451c9190615a19565b8311156145575760405162461bcd60e51b81526020600482015260096024820152683830b93a3c903234bb60b91b6044820152606401611442565b6001600160a01b03851660009081526010602052604090205460ff16801561457d575080155b156145c3576030548311156145c35760405162461bcd60e51b815260206004820152600c60248201526b746f6f206d7563682062757960a01b6044820152606401611442565b6001600160a01b03841660009081526010602052604090205460ff1680156145e9575080155b80156145fe5750600854600160401b900460ff165b156146b4576001600160a01b038516600090815260096020526040812090600182019061462a8861296b565b604354614637919061585e565b9050808611156146785760405162461bcd60e51b815260206004820152600c60248201526b6d617820776974686472617760a01b6044820152606401611442565b50604080518082019091524281526020808201878152835460018181018655600095865292909420925160029094029092019283559051910155505b60445460ff16156146d2576146ca858585614fe6565b91505061496b565b6000601854846146e291906158b0565b90506146ec6150a3565b156146f9576146f9614ae1565b6001600160a01b03861660009081526016602052604090205461471d90829061585e565b6001600160a01b038716600090815260166020526040812091909155614743878761512b565b61474d5781614758565b6147588787846151d0565b6001600160a01b03871660009081526016602052604090205490915061477f90829061582d565b6001600160a01b03871660009081526016602052604090205560325442101580156147b357506008546301000000900460ff165b80156147d857506001600160a01b03871660009081526010602052604090205460ff16155b80156147fd57506001600160a01b03861660009081526010602052604090205460ff16155b156148385761480a6153bb565b614812612a37565b614838602b8054603355602c54603455600090819055602e8054603655602d5460355555565b6001600160a01b03871660009081526010602052604090205460ff16156148af576018546148669083615a19565b602b6000828254614877919061582d565b90915550506018546148899082615a19565b614893908361585e565b602c60008282546148a4919061582d565b909155506149219050565b6001600160a01b03861660009081526010602052604090205460ff1615614921576018546148dd9083615a19565b602e60008282546148ee919061582d565b90915550506018546149009082615a19565b61490a908361585e565b602d600082825461491b919061582d565b90915550505b856001600160a01b0316876001600160a01b0316600080516020615c16833981519152601854846149529190615a19565b60405190815260200160405180910390a3600193505050505b9392505050565b60004260325411156149b95760405162461bcd60e51b815260206004820152601060248201526f72656261736520746f6f206561726c7960801b6044820152606401611442565b6032546000839003614a0b57807f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f26019546040516149f991815260200190565b60405180910390a25050601954919050565b6000831215614a3257614a1d83615b5a565b601954614a2a919061585e565b601955614a44565b82601954614a40919061582d565b6019555b6019546001600160801b031015614a61576001600160801b036019555b601954614a706012600a6159e3565b614a7f9064012a05f2006158b0565b614a8b90600019615a05565b614a979060001961585e565b614aa19190615a19565b601855614aad81615422565b807f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f26019546040516149f991815260200190565b6044805460ff19166001179055600854600090600160301b900460ff16614b09576000614b0d565b601e545b90506000603a54603954614b21919061582d565b90506000614b2e306128b3565b90506000479050600083602454601a54614b48919061582d565b614b5290856158b0565b614b5c9190615a19565b9050614b6781615450565b6000600285614b7688876158b0565b614b809190615a19565b614b8a9190615a19565b9050600082614b99838761585e565b614ba3919061585e565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110614bdd57614bdd6157e8565b6001600160a01b039283166020918202929092010152604054825191169082906001908110614c0e57614c0e6157e8565b6001600160a01b03928316602091820292909201015260415460405163791ac94760e01b815291169063791ac94790614c54908590600090869030904290600401615b76565b600060405180830381600087803b158015614c6e57600080fd5b505af1158015614c82573d6000803e3d6000fd5b5050505060008547614c94919061585e565b90506000602454601a54614ca8919061582d565b614cb360028c615a19565b614cbd908b61585e565b614cc7919061585e565b90506000600282614cd88d866158b0565b614ce29190615a19565b614cec9190615a19565b9050600082602554602354614d01919061582d565b614d0b90866158b0565b614d159190615a19565b9050600083602754601b54614d2a919061582d565b614d3490876158b0565b614d3e9190615a19565b905060008183614d4e868961585e565b614d58919061585e565b614d62919061585e565b603d546040519192506000916001600160a01b039091169061753090849084818181858888f193505050503d8060008114614db9576040519150601f19603f3d011682016040523d82523d6000602084013e614dbe565b606091505b5050603e546040519192506001600160a01b0316906175309086906000818181858888f193505050503d8060008114614e13576040519150601f19603f3d011682016040523d82523d6000602084013e614e18565b606091505b5050603f546040519192506001600160a01b0316906175309085906000818181858888f193505050503d8060008114614e6d576040519150601f19603f3d011682016040523d82523d6000602084013e614e72565b606091505b5060009250508a159050614f1957604154603c5460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015614ef0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614f159190615be7565b5050505b50506044805460ff1916905550505050505050505050505050565b6001600160a01b038116614f7f5760405162461bcd60e51b815260206004820152601260248201527104f776e65722063616e206e6f7420626520360741b6044820152606401611442565b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60008060185483614ff791906158b0565b6001600160a01b03861660009081526016602052604090205490915061501e90829061585e565b6001600160a01b03808716600090815260166020526040808220939093559086168152205461504e90829061582d565b6001600160a01b038086166000818152601660205260409081902093909355915190871690600080516020615c16833981519152906150909087815260200190565b60405180910390a3506001949350505050565b3360009081526010602052604081205460ff161580156150c6575060445460ff16155b80156150d457506000602854115b80156150e95750600854600160681b900460ff165b801561510457506000603a54603954615102919061582d565b115b8015611df55750601854601c5461511b9190615a19565b615124306128b3565b1015905090565b6001600160a01b0382166000908152600c602052604081205460ff168061516a57506001600160a01b0382166000908152600c602052604090205460ff165b156151775750600061165a565b60085460ff161561518a5750600161165a565b6001600160a01b03831660009081526010602052604090205460ff16806151c957506001600160a01b03821660009081526010602052604090205460ff165b905061165a565b60395460085460009190600160581b900460ff16156151fc57603b546039546151f99190615a19565b90505b6001600160a01b0385166000908152600a602052604090205460ff1615615221575060005b6001600160a01b03841660009081526010602052604090205460ff16156152dc5750603a546001600160a01b03851660009081526011602052604090205460ff1680156152775750600854600160601b900460ff165b156152b7576001600160a01b0385166000908152601460205260409020548110156152b757506001600160a01b0384166000908152601460205260409020545b6001600160a01b0385166000908152600b602052604090205460ff16156152dc575060005b6001600160a01b03851660009081526010602052604090205460ff1661532457600854600160481b900460ff1615615324576153178561346d565b615321908261582d565b90505b60006103e861533383866158b0565b61533d9190615a19565b3060009081526016602052604090205490915061535b90829061582d565b306000818152601660205260409020919091556018546001600160a01b03881690600080516020615c16833981519152906153969085615a19565b60405190815260200160405180910390a36153b1818561585e565b9695505050505050565b604454600090819060ff1661541e575b6017546022546019546153de91906158b0565b6153e89190615a19565b91506153f382614972565b50806153fe81615a4a565b915050426032541080156154125750606481125b6153cb5761541e612a37565b5050565b60215461542f908261582d565b603281905550600160376000828254615448919061582d565b909155505050565b61541e3061dead8361432d565b60006020828403121561546f57600080fd5b5035919050565b6000806040838503121561548957600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156154c5578581018301518582016040015282016154a9565b818111156154d7576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146124eb57600080fd5b6000806040838503121561551757600080fd5b615520836154ed565b946020939093013593505050565b60006020828403121561554057600080fd5b61496b826154ed565b8015158114612bb057600080fd5b60006020828403121561556957600080fd5b813561496b81615549565b6000806040838503121561558757600080fd5b615590836154ed565b915060208301356155a081615549565b809150509250929050565b6000806000606084860312156155c057600080fd5b6155c9846154ed565b925060208401356155d981615549565b929592945050506040919091013590565b6000806000606084860312156155ff57600080fd5b615608846154ed565b9250615616602085016154ed565b9150604084013590509250925092565b6000806000806080858703121561563c57600080fd5b615645856154ed565b9350615653602086016154ed565b9250615661604086016154ed565b915061566f606086016154ed565b905092959194509250565b6000806040838503121561568d57600080fd5b615696836154ed565b91506156a4602084016154ed565b90509250929050565b600080604083850312156156c057600080fd5b8235915060208301356155a081615549565b6000806000606084860312156156e757600080fd5b83356156f281615549565b95602085013595506040909401359392505050565b60008060008060008060008060008060006101608c8e03121561572957600080fd5b8b359a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c0135955060c08c0135945060e08c013593506101008c013592506101208c013591506101408c013561577d81615549565b809150509295989b509295989b9093969950565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b600181811c908216806157c857607f821691505b6020821081036138f357634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561581057600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561584057615840615817565b500190565b60006001820161585757615857615817565b5060010190565b60008282101561587057615870615817565b500390565b634e487b7160e01b600052603160045260246000fd5b6020808252600b908201526a139bdd0818da185b99d95960aa1b604082015260600190565b60008160001904831182151516156158ca576158ca615817565b500290565b6020808252601690820152751c9958da5c1a595b9d081a5cc81b9bdd081d985b1a5960521b604082015260600190565b600181815b8085111561593a57816000190482111561592057615920615817565b8085161561592d57918102915b93841c9390800290615904565b509250929050565b6000826159515750600161165a565b8161595e5750600061165a565b8160018114615974576002811461597e5761599a565b600191505061165a565b60ff84111561598f5761598f615817565b50506001821b61165a565b5060208310610133831016604e8410600b84101617156159bd575081810a61165a565b6159c783836158ff565b80600019048211156159db576159db615817565b029392505050565b600061496b8383615942565b634e487b7160e01b600052601260045260246000fd5b600082615a1457615a146159ef565b500690565b600082615a2857615a286159ef565b500490565b600060208284031215615a3f57600080fd5b815161496b81615549565b60006001600160ff1b01820161585757615857615817565b600060033d1115615a7b5760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715615ab257634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015615ac75790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715615af757505050505090565b8285019150815181811115615b0f5750505050505090565b843d8701016020828501011115615b295750505050505090565b615b3860208286010187615a7e565b509095945050505050565b600081615b5257615b52615817565b506000190190565b6000600160ff1b8201615b6f57615b6f615817565b5060000390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015615bc65784516001600160a01b031683529383019391830191600101615ba1565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215615bfc57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d1e987e83da52eecdd60fa02f879aed872df61e40f3ead4d1090df42dae0211064736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106106865760003560e01c806377d947431161035f578063af9b800e116101d1578063deac8ba711610102578063f3a54f2c116100a0578063f887ea401161007a578063f887ea401461139c578063fcf23291146113bc578063ff63f147146113d1578063ff8ac17c146113f257600080fd5b8063f3a54f2c1461132f578063f6bbe5161461134f578063f703f36f1461136f57600080fd5b8063e49c26e3116100dc578063e49c26e3146112b9578063ef8cc78f146112d9578063f09a4016146112ef578063f2fde38b1461130f57600080fd5b8063deac8ba71461126d578063e080680414611283578063e15beb801461129957600080fd5b8063d0d1d3621161016f578063d439979011610149578063d4399790146111ae578063d6737a6e146111e7578063dcf4242414611207578063dd62ed3e1461122757600080fd5b8063d0d1d3621461114b578063d1fce2641461116b578063d2a66b111461118d57600080fd5b8063b9c95f8e116101ab578063b9c95f8e146110cf578063bc7e68a3146110e5578063c0da424c146110fb578063d08893581461112b57600080fd5b8063af9b800e1461105e578063b62496f51461107f578063b7426fb3146110af57600080fd5b80639ae7372d116102ab578063a457c2d711610249578063a9059cbb11610223578063a9059cbb14610fd8578063a9b38cb014610ff8578063acd738bc14611028578063ad570c091461103e57600080fd5b8063a457c2d714610f82578063a8aa1b3114610fa2578063a8bcc98f14610fc257600080fd5b80639d0014b1116102855780639d0014b114610f0c5780639d9241ec14610f2c578063a2b92d5614610f42578063a3c4e7d314610f6257600080fd5b80639ae7372d14610eae5780639b8d749514610ece5780639cf59d7f14610ee457600080fd5b806383823e1e116103185780639079f932116102f25780639079f93214610e385780639481205714610e5957806395d89b4114610e795780639a7a23d614610e8e57600080fd5b806383823e1e14610dd557806386fe511d14610df55780638da5cb5b14610e1557600080fd5b806377d9474314610d145780637965d56d14610d345780637a8ccfd914610d545780637d4b501714610d745780637ee029c414610d9457806380226a1214610db457600080fd5b806339509351116104f85780635aa821a91161044457806370a08231116103e2578063727dba53116103bc578063727dba5314610c9f578063753d02a114610cbf578063764d72bf14610cd457806376e90db514610cf457600080fd5b806370a0823114610c54578063715018a614610c74578063716cc28014610c8957600080fd5b806361a9d1b11161041e57806361a9d1b114610bf457806366eb378514610c095780636d351d1a14610c1e5780636ddd171314610c3357600080fd5b80635aa821a914610ba85780635f2a6d6914610bbe5780635fdd4ed514610bde57600080fd5b806345b10e12116104b15780634e66160c1161048b5780634e66160c14610b365780635569408614610b6657806357b535c014610b7c57806359b107b914610b9257600080fd5b806345b10e1214610ae0578063492b381e14610b005780634cd9ddf214610b1657600080fd5b80633950935114610a1f5780633c316fd514610a3f5780633c5c780014610a605780633c8e556d14610a8057806341d68b8f14610aa05780634460d3cf14610ac057600080fd5b80631489294a116105d257806326987b6011610570578063313ce5671161054a578063313ce5671461099057806335179d6b146109b25780633643f1d5146109d2578063368743be146109f257600080fd5b806326987b60146109505780632b112e49146109655780632df75cb11461097a57600080fd5b8063198b763e116105ac578063198b763e146108d05780631bd39674146108f057806323b872dd14610910578063264d26dd1461093057600080fd5b80631489294a1461087b57806315da01481461089b57806318160ddd146108bb57600080fd5b806307ebec271161063f5780630978310d116106195780630978310d146107eb5780630faacfe11461081b5780631276089b1461083b57806313b407ee1461085b57600080fd5b806307ebec271461078857806308b1fd8f146107ab578063095ea7b3146107cb57600080fd5b8063011bc9871461069257806301b16827146106b457806302259e9e146106d4578063031620c8146106fd57806304a17c5f1461072e57806306fdde031461076657600080fd5b3661068d57005b600080fd5b34801561069e57600080fd5b506106b26106ad36600461545d565b611413565b005b3480156106c057600080fd5b506106b26106cf366004615476565b6114bb565b3480156106e057600080fd5b506106ea60315481565b6040519081526020015b60405180910390f35b34801561070957600080fd5b5060085461071e90600160401b900460ff1681565b60405190151581526020016106f4565b34801561073a57600080fd5b50603f5461074e906001600160a01b031681565b6040516001600160a01b0390911681526020016106f4565b34801561077257600080fd5b5061077b611561565b6040516106f49190615498565b34801561079457600080fd5b5060085461071e9065010000000000900460ff1681565b3480156107b757600080fd5b50603d5461074e906001600160a01b031681565b3480156107d757600080fd5b5061071e6107e6366004615504565b6115f3565b3480156107f757600080fd5b5061071e61080636600461552e565b600f6020526000908152604090205460ff1681565b34801561082757600080fd5b506106ea61083636600461552e565b611660565b34801561084757600080fd5b506106b2610856366004615557565b6117d3565b34801561086757600080fd5b506106b2610876366004615574565b61184d565b34801561088757600080fd5b5060405461074e906001600160a01b031681565b3480156108a757600080fd5b506106b26108b63660046155ab565b611ae7565b3480156108c757600080fd5b506019546106ea565b3480156108dc57600080fd5b5061074e6108eb36600461545d565b611cee565b3480156108fc57600080fd5b506106ea61090b36600461545d565b611d18565b34801561091c57600080fd5b5061071e61092b3660046155ea565b611d28565b34801561093c57600080fd5b50603c5461074e906001600160a01b031681565b34801561095c57600080fd5b506106ea611de8565b34801561097157600080fd5b506106ea611dfa565b34801561098657600080fd5b506106ea602f5481565b34801561099c57600080fd5b5060025460405160ff90911681526020016106f4565b3480156109be57600080fd5b5061074e6109cd36600461545d565b611ebf565b3480156109de57600080fd5b506106b26109ed366004615557565b611ecf565b3480156109fe57600080fd5b506106ea610a0d36600461552e565b60146020526000908152604090205481565b348015610a2b57600080fd5b5061071e610a3a366004615504565b611f4a565b348015610a4b57600080fd5b5060085461071e90600160601b900460ff1681565b348015610a6c57600080fd5b506106b2610a7b366004615574565b611fd0565b348015610a8c57600080fd5b506106b2610a9b366004615626565b612226565b348015610aac57600080fd5b506106b2610abb36600461567a565b6122a5565b348015610acc57600080fd5b5061071e610adb36600461552e565b612389565b348015610aec57600080fd5b506106b2610afb3660046156ad565b6124f0565b348015610b0c57600080fd5b506106ea602c5481565b348015610b2257600080fd5b506106b2610b3136600461545d565b6125ca565b348015610b4257600080fd5b5061071e610b5136600461552e565b60136020526000908152604090205460ff1681565b348015610b7257600080fd5b506106ea60345481565b348015610b8857600080fd5b506106ea60375481565b348015610b9e57600080fd5b506106ea60395481565b348015610bb457600080fd5b506106ea60305481565b348015610bca57600080fd5b506106b2610bd936600461552e565b61266b565b348015610bea57600080fd5b506106ea60385481565b348015610c0057600080fd5b506106b26126e2565b348015610c1557600080fd5b506106b2612868565b348015610c2a57600080fd5b506106ea6128a1565b348015610c3f57600080fd5b5060085461071e90600160681b900460ff1681565b348015610c6057600080fd5b506106ea610c6f36600461552e565b6128b3565b348015610c8057600080fd5b506106b26128ed565b348015610c9557600080fd5b506106ea602a5481565b348015610cab57600080fd5b506106ea610cba36600461552e565b61296b565b348015610ccb57600080fd5b506106b2612a37565b348015610ce057600080fd5b506106b2610cef36600461552e565b612bb3565b348015610d0057600080fd5b506106b2610d0f36600461545d565b612c57565b348015610d2057600080fd5b5061074e610d2f36600461545d565b612d03565b348015610d4057600080fd5b506106ea610d4f36600461545d565b612d33565b348015610d6057600080fd5b506106b2610d6f36600461545d565b612d43565b348015610d8057600080fd5b50603e5461074e906001600160a01b031681565b348015610da057600080fd5b506106b2610daf3660046155ab565b612de5565b348015610dc057600080fd5b5060085461071e90600160381b900460ff1681565b348015610de157600080fd5b506106b2610df0366004615557565b612f31565b348015610e0157600080fd5b506106ea610e1036600461552e565b612fac565b348015610e2157600080fd5b5060025461010090046001600160a01b031661074e565b348015610e4457600080fd5b5060085461071e906301000000900460ff1681565b348015610e6557600080fd5b506106b2610e74366004615557565b612fcd565b348015610e8557600080fd5b5061077b61304a565b348015610e9a57600080fd5b506106b2610ea9366004615574565b613059565b348015610eba57600080fd5b506106b2610ec936600461545d565b613315565b348015610eda57600080fd5b506106ea60335481565b348015610ef057600080fd5b50602254601754604080519283526020830191909152016106f4565b348015610f1857600080fd5b506106b2610f2736600461545d565b6133bd565b348015610f3857600080fd5b506106ea603a5481565b348015610f4e57600080fd5b506106b2610f5d366004615557565b6133f1565b348015610f6e57600080fd5b506106ea610f7d36600461552e565b61346d565b348015610f8e57600080fd5b5061071e610f9d366004615504565b6134c8565b348015610fae57600080fd5b5060425461074e906001600160a01b031681565b348015610fce57600080fd5b506106ea603b5481565b348015610fe457600080fd5b5061071e610ff3366004615504565b6135af565b34801561100457600080fd5b5061071e61101336600461552e565b60126020526000908152604090205460ff1681565b34801561103457600080fd5b506106ea60355481565b34801561104a57600080fd5b506106b26110593660046156ad565b6135ee565b34801561106a57600080fd5b5060085461071e90600160301b900460ff1681565b34801561108b57600080fd5b5061071e61109a36600461552e565b60106020526000908152604090205460ff1681565b3480156110bb57600080fd5b5061071e6110ca36600461552e565b61366e565b3480156110db57600080fd5b506106ea602e5481565b3480156110f157600080fd5b506106ea60325481565b34801561110757600080fd5b5061071e61111636600461552e565b60116020526000908152604090205460ff1681565b34801561113757600080fd5b506106b26111463660046156d2565b6138f9565b34801561115757600080fd5b506106b26111663660046155ab565b6139c1565b34801561117757600080fd5b5060085461071e90640100000000900460ff1681565b34801561119957600080fd5b5060085461071e90600160501b900460ff1681565b3480156111ba57600080fd5b5061071e6111c936600461552e565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156111f357600080fd5b5061074e61120236600461545d565b613bc2565b34801561121357600080fd5b506106b2611222366004615476565b613bd2565b34801561123357600080fd5b506106ea61124236600461567a565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b34801561127957600080fd5b506106ea60365481565b34801561128f57600080fd5b506106ea602d5481565b3480156112a557600080fd5b506106b26112b4366004615557565b613cf0565b3480156112c557600080fd5b506106b26112d4366004615707565b613d6b565b3480156112e557600080fd5b506106ea602b5481565b3480156112fb57600080fd5b506106b261130a36600461567a565b613fae565b34801561131b57600080fd5b506106b261132a36600461552e565b614211565b34801561133b57600080fd5b506106b261134a366004615557565b61427d565b34801561135b57600080fd5b5061074e61136a36600461545d565b6142bf565b34801561137b57600080fd5b506106ea61138a36600461552e565b60096020526000908152604090205481565b3480156113a857600080fd5b5060415461074e906001600160a01b031681565b3480156113c857600080fd5b506106ea6142cf565b3480156113dd57600080fd5b5060085461071e90600160481b900460ff1681565b3480156113fe57600080fd5b5060085461071e90600160581b900460ff1681565b60025461010090046001600160a01b0316331461144b5760405162461bcd60e51b815260040161144290615791565b60405180910390fd5b604b8111156114885760405162461bcd60e51b81526020600482015260096024820152686d617820706172747960b81b6044820152606401611442565b601f81905560405181907f99595bf6e2815a96807fe941420680afd549926424c257ec2c34de018f2f732290600090a250565b336000908152600e602052604090205460ff1661151a5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420616c6c6f77656420666f7220726577617264207969656c64000000006044820152606401611442565b602282905560178190556040513381524290829084907f8164f36e13b64f87a896ae3bb092f0ed3ea235f8a9192c6aecb51beabcea10d59060200160405180910390a45050565b606060008054611570906157b4565b80601f016020809104026020016040519081016040528092919081815260200182805461159c906157b4565b80156115e95780601f106115be576101008083540402835291602001916115e9565b820191906000526020600020905b8154815290600101906020018083116115cc57829003601f168201915b5050505050905090565b3360008181526015602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061164e9086815260200190565b60405180910390a35060015b92915050565b60008060005b6007548110156117175760078181548110611683576116836157e8565b60009182526020909120015460405163453d3db360e11b81526001600160a01b03868116600483015290911690638a7a7b6690602401602060405180830381865afa1580156116d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fa91906157fe565b611704908361582d565b508061170f81615845565b915050611666565b5060005b6006548110156117cc5760068181548110611738576117386157e8565b6000918252602090912001546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa15801561178b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117af91906157fe565b6117b9908361582d565b50806117c481615845565b91505061171b565b5092915050565b60025461010090046001600160a01b031633146118025760405162461bcd60e51b815260040161144290615791565b6008805464ff000000001916640100000000831515908102919091179091556040517fadd2ae1e48fad2610e967f44a01d455adca45c693dc959f9a0b5b6f807946f2390600090a250565b60025461010090046001600160a01b0316331461187c5760405162461bcd60e51b815260040161144290615791565b6001600160a01b03821660009081526012602052604090205481151560ff9091161515036118e05760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401611442565b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915561195d57600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b038416179055611aab565b6006546001106119a15760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b6044820152606401611442565b60005b600654811015611aa957826001600160a01b0316600682815481106119cb576119cb6157e8565b6000918252602090912001546001600160a01b031603611a9757600680546119f59060019061585e565b81548110611a0557611a056157e8565b600091825260209091200154600680546001600160a01b039092169183908110611a3157611a316157e8565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506006805480611a7057611a70615875565b600082815260209020810160001990810180546001600160a01b0319169055019055611aa9565b80611aa181615845565b9150506119a4565b505b604051811515906001600160a01b038416907fb165f6ff487f30978c0ede582c4b90aea6317730c4ccca38529fbd11b74a2c3e90600090a35050565b60025461010090046001600160a01b03163314611b165760405162461bcd60e51b815260040161144290615791565b80600103611bb3576001600160a01b0383166000908152600c602052604090205482151560ff909116151503611b5e5760405162461bcd60e51b81526004016114429061588b565b6001600160a01b0383166000818152600c6020526040808220805460ff191686151590811790915590519092917f507b98c4fc0974cbaaade1c558d03191b924272e491fc34c645965b5c75420fa91a3505050565b80600203611c50576001600160a01b0383166000908152600a602052604090205482151560ff909116151503611bfb5760405162461bcd60e51b81526004016114429061588b565b6001600160a01b0383166000818152600a6020526040808220805460ff191686151590811790915590519092917f89e1f304a67b18800fe8e70e1be2fe04d7c4fd682d71141198828c143c41d9b891a3505050565b80600303611ce9576001600160a01b0383166000908152600b602052604090205482151560ff909116151503611c985760405162461bcd60e51b81526004016114429061588b565b6001600160a01b0383166000818152600b6020526040808220805460ff191686151590811790915590519092917fd73ba49bcc1c8c1e82b426c44467e431a9247b79f9528fac3ab2847c3202b98391a35b505050565b60068181548110611cfe57600080fd5b6000918252602090912001546001600160a01b0316905081565b60006018548261165a91906158b0565b6000826001600160a01b038116611d515760405162461bcd60e51b8152600401611442906158cf565b6001600160a01b038516600090815260156020908152604080832033845290915290205460001914611dd1576001600160a01b0385166000908152601560209081526040808320338452909152902054611dac90849061585e565b6001600160a01b03861660009081526015602090815260408083203384529091529020555b611ddc85858561432d565b50600195945050505050565b6000611df5602f54612d33565b905090565b601854603d546001600160a01b03166000908152601660205260408120547f0263c2b778d062355049effc2dece97bc6547ff8a88a3258daa512061c2153dd5461dead83527f290d80ce586bfe95e1ebf348e3ba109df813891ad867417e64d38c5a50473b5754929392611e706012600a6159e3565b611e7f9064012a05f2006158b0565b611e8b90600019615a05565b611e979060001961585e565b611ea1919061585e565b611eab919061585e565b611eb5919061585e565b611df59190615a19565b60058181548110611cfe57600080fd5b60025461010090046001600160a01b03163314611efe5760405162461bcd60e51b815260040161144290615791565b6008805466ff0000000000001916600160301b831515908102919091179091556040517f7155abe5d76e40e32b68c168e9dde4055d00e1ffdb30d0e6d265622716a1d92390600090a250565b3360009081526015602090815260408083206001600160a01b0386168452909152812054611f7990839061585e565b3360008181526015602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161164e565b60025461010090046001600160a01b03163314611fff5760405162461bcd60e51b815260040161144290615791565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036120635760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401611442565b6001600160a01b0382166000908152601360205260409020805460ff191682158015919091179091556120e057600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b0384161790556121ea565b60005b6007548110156121e857826001600160a01b03166007828154811061210a5761210a6157e8565b6000918252602090912001546001600160a01b0316036121d657600780546121349060019061585e565b81548110612144576121446157e8565b600091825260209091200154600780546001600160a01b039092169183908110612170576121706157e8565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060078054806121af576121af615875565b600082815260209020810160001990810180546001600160a01b03191690550190556121e8565b806121e081615845565b9150506120e3565b505b604051811515906001600160a01b038416907f8f1936ddb0e6b394e1edf1ac695592d1a059eecc4786f7083e71b11ec945e7ca90600090a35050565b60025461010090046001600160a01b031633146122555760405162461bcd60e51b815260040161144290615791565b603c80546001600160a01b039586166001600160a01b031991821617909155603d805494861694821694909417909355603e805492851692841692909217909155603f8054919093169116179055565b60025461010090046001600160a01b031633146122d45760405162461bcd60e51b815260040161144290615791565b604180546001600160a01b03199081166001600160a01b03858116918217909355604280549092168484161782553060008181526015602090815260408083209483529390528281206000199081905591815282812082905583548516815291909120555461234591166001613059565b806001600160a01b0316826001600160a01b03167f50bfd9c0b9815c386500292d8de123643c6c935ffd384a364381b3b11e281e5c60405160405180910390a35050565b60025460009061010090046001600160a01b031633146123bb5760405162461bcd60e51b815260040161144290615791565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015612402573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242691906157fe565b905080336001600160a01b0316846001600160a01b03167fed3c8f48a6c3247e7a68382e752734feed4bf63004c064208e3117e35097dabb4260405161246e91815260200190565b60405180910390a460405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af11580156124c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e79190615a2d565b9150505b919050565b60025461010090046001600160a01b0316331461251f5760405162461bcd60e51b815260040161144290615791565b60328211156125705760405162461bcd60e51b815260206004820152601860248201527f6d617820627261636b65742066656520657863656564656400000000000000006044820152606401611442565b60388290556008805469ff0000000000000000001916600160481b8315159081029190911790915560405142919084907f0d9ee6cc1c2d2a5825fe816f3cfc6ab44f33303930004a3e26a3259616c9add890600090a45050565b60025461010090046001600160a01b031633146125f95760405162461bcd60e51b815260040161144290615791565b6107088111156126365760405162461bcd60e51b81526020600482015260086024820152670a8dede40d0d2ced60c31b6044820152606401611442565b6021819055604051429082907f9147f2d3ae1a14e9012c81c143c7c834a15f3afffcd29d3b35631aa0a3b0093e90600090a350565b60025461010090046001600160a01b0316331461269a5760405162461bcd60e51b815260040161144290615791565b604080546001600160a01b0319166001600160a01b038316908117825590517faab8973b5857f63f79e83682350a71c735f612a5f7620d42d249227023f9525490600090a250565b6002600354036127345760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611442565b6002600355336000908152600d602052604090205460ff166127895760405162461bcd60e51b815260206004820152600e60248201526d63616e206e6f742072656261736560901b6044820152606401611442565b60445460ff16156127c85760405162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b6044820152606401611442565b4260325411156128085760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b6044820152606401611442565b6000805b60175460225460195461281f91906158b0565b6128299190615a19565b915061283482614972565b508061283f81615a4a565b915050426032541080156128535750606481125b61280c5761285f612a37565b50506001600355565b60025461010090046001600160a01b031633146128975760405162461bcd60e51b815260040161144290615791565b61289f614ae1565b565b6000601854601c54611df59190615a19565b60006018546000036128c757506000919050565b6018546001600160a01b03831660009081526016602052604090205461165a9190615a19565b60025461010090046001600160a01b0316331461291c5760405162461bcd60e51b815260040161144290615791565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b6001600160a01b038116600090815260096020526040812060018101825b8154811015612a2f5760008282815481106129a6576129a66157e8565b9060005260206000209060020201604051806040016040529081600082015481526020016001820154815250509050601d54426129e3919061585e565b815110612a1c578282815481106129fc576129fc6157e8565b90600052602060002090600202016001015485612a19919061582d565b94505b5080612a2781615845565b915050612989565b505050919050565b60005b600454811015612bb05760048181548110612a5757612a576157e8565b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b158015612aa257600080fd5b505af1925050508015612ab3575060015b612b9e57612abf615a62565b806308c379a003612b925750612ad3615ab9565b80612ade5750612b94565b7f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c2383604051612b4d9060208082526027908201527f6d616e75616c53796e6328293a205f6d616b657250616972732e73796e6328296040820152660811985a5b195960ca1b606082015260800190565b60405180910390a17f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c238381604051612b849190615498565b60405180910390a150612b9e565b505b3d6000803e3d6000fd5b80612ba881615845565b915050612a3a565b50565b60025461010090046001600160a01b03163314612be25760405162461bcd60e51b815260040161144290615791565b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612c1a573d6000803e3d6000fd5b5042826001600160a01b0316827f764ac18b38788ceb5d273876574dd816d95e562605c44e30f5638e7f92ceef8860405160405180910390a45050565b60025461010090046001600160a01b03163314612c865760405162461bcd60e51b815260040161144290615791565b6a013da329b63364718000008111612cd05760405162461bcd60e51b815260206004820152600d60248201526c42656c6f77206d696e696d756d60981b6044820152606401611442565b604381905560405181907f3e2b28733d83c500897cb5d9f71e9286f059e81ba4ba63584b43a9278879ca4790600090a250565b600060048281548110612d1857612d186157e8565b6000918252602090912001546001600160a01b031692915050565b60006018548261165a9190615a19565b60025461010090046001600160a01b03163314612d725760405162461bcd60e51b815260040161144290615791565b611c208110612db25760405162461bcd60e51b815260206004820152600c60248201526b6f766572203220686f75727360a01b6044820152606401611442565b601d81905560405181907f5c630b842a78838557c54c519fb3fb1eedc9157777ef4e42388dcbf5dd1f80b390600090a250565b60025461010090046001600160a01b03163314612e145760405162461bcd60e51b815260040161144290615791565b80600103612e85576001600160a01b0383166000908152600d602052604090205482151560ff909116151503612e5c5760405162461bcd60e51b81526004016114429061588b565b6001600160a01b0383166000908152600d60205260409020805460ff1916831515179055612ef2565b80600203612ef2576001600160a01b0383166000908152600e602052604090205482151560ff909116151503612ecd5760405162461bcd60e51b81526004016114429061588b565b6001600160a01b0383166000908152600e60205260409020805460ff19168315151790555b80821515846001600160a01b03167f94c0aba5d4b641cd28ff4ae32d7c716fd7a3fee1a1b98e6f4d81bad3256ab2be60405160405180910390a4505050565b60025461010090046001600160a01b03163314612f605760405162461bcd60e51b815260040161144290615791565b6008805460ff60601b1916600160601b831515908102919091179091556040514291907f6e78862f553225378cfb6846053b9a466b9a47afcc225a2a3263ea536d991e4090600090a350565b600080612fb8836128b3565b9050612fc383611660565b6124e7908261582d565b60025461010090046001600160a01b03163314612ffc5760405162461bcd60e51b815260040161144290615791565b6008805468ff00000000000000001916600160401b831515908102919091179091556040517f10b5d8d4b73da981d3f4003317acb1c94eb8ecc35278cbb931228c3b3032dbae90600090a250565b606060018054611570906157b4565b60025461010090046001600160a01b031633146130885760405162461bcd60e51b815260040161144290615791565b6001600160a01b03821660009081526010602052604090205481151560ff9091161515036130e65760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401611442565b6001600160a01b0382166000908152601060205260409020805460ff19168215801591909117909155613175576004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038516179055602a80549161316b83615845565b91905055506132d9565b6004546001106131b95760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b6044820152606401611442565b60005b6004548110156132d757826001600160a01b0316600482815481106131e3576131e36157e8565b6000918252602090912001546001600160a01b0316036132c5576004805461320d9060019061585e565b8154811061321d5761321d6157e8565b600091825260209091200154600480546001600160a01b039092169183908110613249576132496157e8565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600480548061328857613288615875565b600082815260208120820160001990810180546001600160a01b0319169055909101909155602a8054916132bb83615b43565b91905055506132d7565b806132cf81615845565b9150506131bc565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b031633146133445760405162461bcd60e51b815260040161144290615791565b4281116133885760405162461bcd60e51b815260206004820152601260248201527118d85b881b9bdd081899481a5b881c185cdd60721b6044820152606401611442565b6032819055604051429082907f3a97bbcdf9724661e5a691bf707b0b97b7fb6814227e9ee3253016b1198e32e790600090a350565b60025461010090046001600160a01b031633146133ec5760405162461bcd60e51b815260040161144290615791565b602855565b60025461010090046001600160a01b031633146134205760405162461bcd60e51b815260040161144290615791565b6008805467ff000000000000001916600160381b831515908102919091179091556040517f5a0f55ed896b3fb4c4609bd54602a6dc0d5b4fbb710e0a47566ae502d7d79f7490600090a250565b60008061347983612fac565b905060006134856142cf565b6134908360646158b0565b61349a9190615a19565b90506000600a82106134ad57600a6134af565b815b9050603854816134bf91906158b0565b95945050505050565b3360009081526015602090815260408083206001600160a01b038616845290915281205480831061351c573360009081526015602090815260408083206001600160a01b038816845290915281205561354b565b613526838261585e565b3360009081526015602090815260408083206001600160a01b03891684529091529020555b3360008181526015602090815260408083206001600160a01b038916808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6000826001600160a01b0381166135d85760405162461bcd60e51b8152600401611442906158cf565b6135e333858561432d565b506001949350505050565b60025461010090046001600160a01b0316331461361d5760405162461bcd60e51b815260040161144290615791565b603b8290556008805460ff60581b1916600160581b8315159081029190911790915560405183907f10145d369bab6fd20cd4cd57ed0fa0d6ebb131e9bb44c901ef1796cb333be7db90600090a35050565b6000816001600160a01b0381166136975760405162461bcd60e51b8152600401611442906158cf565b600854600160381b900460ff166136df5760405162461bcd60e51b815260206004820152600c60248201526b63616e206e6f74206d6f766560a01b6044820152606401611442565b600854640100000000900460ff166137255760405162461bcd60e51b81526020600482015260096024820152682a3930b2329037b33360b91b6044820152606401611442565b336000908152600f602052604090205460ff16156137735760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401611442565b600061377e336128b3565b116137b75760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401611442565b60006137c233611660565b905080156138035760405162461bcd60e51b815260206004820152600e60248201526d6f746865722062616c616e63657360901b6044820152606401611442565b336000908152600f60209081526040808320805460ff191660011790556016909152902054613832818061585e565b33600090815260166020526040808220929092556001600160a01b0387168152205461385f90829061582d565b6001600160a01b0386166000818152601660205260409020919091556018543390600080516020615c168339815191529061389a9085615a19565b60405190815260200160405180910390a3604080513381526001600160a01b03871660208201527fb26ec1d3e73f558763eaa40e4dce759ce985575e28d56966bb2092847a786c74910160405180910390a16001935050505b50919050565b60025461010090046001600160a01b031633146139285760405162461bcd60e51b815260040161144290615791565b6008805460ff60681b1916600160681b85151502179055808261394d6012600a6159e3565b61395c9064012a05f2006158b0565b61396890600019615a05565b6139749060001961585e565b61397e91906158b0565b6139889190615a19565b601c5560405181908390851515907f512cfe1aedabdc06d12a680ace7434d88a9532c8853515536842f5ff52cbe55a90600090a4505050565b60025461010090046001600160a01b031633146139f05760405162461bcd60e51b815260040161144290615791565b6001600160a01b0383166000908152601160209081526040808320805460ff191686158015919091179091556014909252909120829055613a7b57600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b038516179055613b85565b60005b600554811015613b8357836001600160a01b031660058281548110613aa557613aa56157e8565b6000918252602090912001546001600160a01b031603613b715760058054613acf9060019061585e565b81548110613adf57613adf6157e8565b600091825260209091200154600580546001600160a01b039092169183908110613b0b57613b0b6157e8565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506005805480613b4a57613b4a615875565b600082815260209020810160001990810180546001600160a01b0319169055019055613b83565b80613b7b81615845565b915050613a7e565b505b604051821515906001600160a01b038516907f6b76292a2c57cfaa171cd21b53bac8a6a622da6e9c08b9f63a79a50275ff538990600090a3505050565b60048181548110611cfe57600080fd5b60025461010090046001600160a01b03163314613c015760405162461bcd60e51b815260040161144290615791565b6969e10de76676d08000008211613c5a5760405162461bcd60e51b815260206004820152601960248201527f42656c6f77206d696e696d756d2073656c6c20616d6f756e74000000000000006044820152606401611442565b6969e10de76676d08000008111613cb35760405162461bcd60e51b815260206004820152601860248201527f42656c6f77206d696e696d756d2062757920616d6f756e7400000000000000006044820152606401611442565b603182905560308190556040514290829084907f25a1f4940c045b289fe17c2a70381f78360db0e2ad0993cd1f3ffd04d120ad5290600090a45050565b60025461010090046001600160a01b03163314613d1f5760405162461bcd60e51b815260040161144290615791565b6008805463ff00000019166301000000831515908102919091179091556040514291907f832ed7895e341f17afc036cc051864a91809bb5c898a2d5645323b97b6925ec990600090a350565b60025461010090046001600160a01b03163314613d9a5760405162461bcd60e51b815260040161144290615791565b8a601e819055508960238190555088602981905550856026819055508460258190555086601b8190555087601a819055508360248190555082602781905550816020819055506000602354601b54601a54602954601e54613dfb919061582d565b613e05919061582d565b613e0f919061582d565b613e19919061582d565b9050600060275460245460255460265485613e34919061582d565b613e3e919061582d565b613e48919061582d565b613e52919061582d565b905060fa8210613e935760405162461bcd60e51b815260206004820152600c60248201526b6d617820627579206665657360a01b6044820152606401611442565b60fa8110613ed35760405162461bcd60e51b815260206004820152600d60248201526c6d61782073656c6c206665657360981b6044820152606401611442565b6101eb60205410613f175760405162461bcd60e51b815260206004820152600e60248201526d6d6178207061727479206665657360901b6044820152606401611442565b6039829055603a8190556008805460ff60501b1916600160501b85151590810291909117909155602454604080518b8152602081018b90529081018d905260608101919091526080810184905260a08101919091528b908d908f907f36595b1e2bf5f63c84d6962205722de0133c54fdd79516c6f3741aba06ee7d969060c00160405180910390a450505050505050505050505050565b60025461010090046001600160a01b03163314613fdd5760405162461bcd60e51b815260040161144290615791565b60085462010000900460ff161561402c5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401611442565b604180546001600160a01b03199081166001600160a01b0385811691821790935560428054909216848416178255306000818152601560209081526040808320948352939052828120600019908190559181528281208290559254909316825290205561409b6012600a6159e3565b6140aa9064012a05f2006158b0565b6019556140b96012600a6159e3565b6140c89064012a05f2006158b0565b6140d490600019615a05565b6140e09060001961585e565b336000908152601660205260409020556019546140ff6012600a6159e3565b61410e9064012a05f2006158b0565b61411a90600019615a05565b6141269060001961585e565b6141309190615a19565b601855603d546001600160a01b039081166000908152600c60205260408082208054600160ff199182168117909255603e54851684528284208054821683179055603f54909416835281832080548516821790553083528183208054851682179055338352912080549092161790556141b0670de0b6b3a7640000611d18565b602f556141bf33600180612de5565b6141cc3360016002612de5565b6008805462ff00001916620100001790556019546040513391600091600080516020615c16833981519152916142059190815260200190565b60405180910390a35050565b60025461010090046001600160a01b031633146142405760405162461bcd60e51b815260040161144290615791565b6040516001600160a01b038216907fb1eb34684306bcea7f9ed508931dc13b5993c8fdd00fe65c2e4680ae2610a70190600090a2612bb081614f34565b60025461010090046001600160a01b031633146142ac5760405162461bcd60e51b815260040161144290615791565b6008805460ff1916911515919091179055565b60078181548110611cfe57600080fd5b60008060005b6004548110156138f35761430f600482815481106142f5576142f56157e8565b6000918252602090912001546001600160a01b03166128b3565b614319908361582d565b91508061432581615845565b9150506142d5565b6001600160a01b0383166000908152600c6020526040812054819060ff168061436e57506001600160a01b0384166000908152600c602052604090205460ff165b600854909150640100000000900460ff16806143875750805b6143bf5760405162461bcd60e51b81526020600482015260096024820152682a3930b2329037b33360b91b6044820152606401611442565b6001600160a01b03841660009081526010602052604090205460ff1680156143e5575080155b1561442c5760315483111561442c5760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b5d58da081cd95b1b609a1b6044820152606401611442565b6001600160a01b03851660009081526010602052604090205460ff168061446b57506001600160a01b03841660009081526010602052604090205460ff165b156144a857600854610100900460ff161561449857614488612a37565b6008805461ff00191690556144a8565b6008805461ff0019166101001790555b6001600160a01b03841660009081526010602052604090205460ff1680156144ce575080155b80156144f257506001600160a01b03851660009081526011602052604090205460ff165b80156145075750600854600160601b900460ff165b1561455757601f5460315461451c9190615a19565b8311156145575760405162461bcd60e51b81526020600482015260096024820152683830b93a3c903234bb60b91b6044820152606401611442565b6001600160a01b03851660009081526010602052604090205460ff16801561457d575080155b156145c3576030548311156145c35760405162461bcd60e51b815260206004820152600c60248201526b746f6f206d7563682062757960a01b6044820152606401611442565b6001600160a01b03841660009081526010602052604090205460ff1680156145e9575080155b80156145fe5750600854600160401b900460ff165b156146b4576001600160a01b038516600090815260096020526040812090600182019061462a8861296b565b604354614637919061585e565b9050808611156146785760405162461bcd60e51b815260206004820152600c60248201526b6d617820776974686472617760a01b6044820152606401611442565b50604080518082019091524281526020808201878152835460018181018655600095865292909420925160029094029092019283559051910155505b60445460ff16156146d2576146ca858585614fe6565b91505061496b565b6000601854846146e291906158b0565b90506146ec6150a3565b156146f9576146f9614ae1565b6001600160a01b03861660009081526016602052604090205461471d90829061585e565b6001600160a01b038716600090815260166020526040812091909155614743878761512b565b61474d5781614758565b6147588787846151d0565b6001600160a01b03871660009081526016602052604090205490915061477f90829061582d565b6001600160a01b03871660009081526016602052604090205560325442101580156147b357506008546301000000900460ff165b80156147d857506001600160a01b03871660009081526010602052604090205460ff16155b80156147fd57506001600160a01b03861660009081526010602052604090205460ff16155b156148385761480a6153bb565b614812612a37565b614838602b8054603355602c54603455600090819055602e8054603655602d5460355555565b6001600160a01b03871660009081526010602052604090205460ff16156148af576018546148669083615a19565b602b6000828254614877919061582d565b90915550506018546148899082615a19565b614893908361585e565b602c60008282546148a4919061582d565b909155506149219050565b6001600160a01b03861660009081526010602052604090205460ff1615614921576018546148dd9083615a19565b602e60008282546148ee919061582d565b90915550506018546149009082615a19565b61490a908361585e565b602d600082825461491b919061582d565b90915550505b856001600160a01b0316876001600160a01b0316600080516020615c16833981519152601854846149529190615a19565b60405190815260200160405180910390a3600193505050505b9392505050565b60004260325411156149b95760405162461bcd60e51b815260206004820152601060248201526f72656261736520746f6f206561726c7960801b6044820152606401611442565b6032546000839003614a0b57807f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f26019546040516149f991815260200190565b60405180910390a25050601954919050565b6000831215614a3257614a1d83615b5a565b601954614a2a919061585e565b601955614a44565b82601954614a40919061582d565b6019555b6019546001600160801b031015614a61576001600160801b036019555b601954614a706012600a6159e3565b614a7f9064012a05f2006158b0565b614a8b90600019615a05565b614a979060001961585e565b614aa19190615a19565b601855614aad81615422565b807f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f26019546040516149f991815260200190565b6044805460ff19166001179055600854600090600160301b900460ff16614b09576000614b0d565b601e545b90506000603a54603954614b21919061582d565b90506000614b2e306128b3565b90506000479050600083602454601a54614b48919061582d565b614b5290856158b0565b614b5c9190615a19565b9050614b6781615450565b6000600285614b7688876158b0565b614b809190615a19565b614b8a9190615a19565b9050600082614b99838761585e565b614ba3919061585e565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110614bdd57614bdd6157e8565b6001600160a01b039283166020918202929092010152604054825191169082906001908110614c0e57614c0e6157e8565b6001600160a01b03928316602091820292909201015260415460405163791ac94760e01b815291169063791ac94790614c54908590600090869030904290600401615b76565b600060405180830381600087803b158015614c6e57600080fd5b505af1158015614c82573d6000803e3d6000fd5b5050505060008547614c94919061585e565b90506000602454601a54614ca8919061582d565b614cb360028c615a19565b614cbd908b61585e565b614cc7919061585e565b90506000600282614cd88d866158b0565b614ce29190615a19565b614cec9190615a19565b9050600082602554602354614d01919061582d565b614d0b90866158b0565b614d159190615a19565b9050600083602754601b54614d2a919061582d565b614d3490876158b0565b614d3e9190615a19565b905060008183614d4e868961585e565b614d58919061585e565b614d62919061585e565b603d546040519192506000916001600160a01b039091169061753090849084818181858888f193505050503d8060008114614db9576040519150601f19603f3d011682016040523d82523d6000602084013e614dbe565b606091505b5050603e546040519192506001600160a01b0316906175309086906000818181858888f193505050503d8060008114614e13576040519150601f19603f3d011682016040523d82523d6000602084013e614e18565b606091505b5050603f546040519192506001600160a01b0316906175309085906000818181858888f193505050503d8060008114614e6d576040519150601f19603f3d011682016040523d82523d6000602084013e614e72565b606091505b5060009250508a159050614f1957604154603c5460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015614ef0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614f159190615be7565b5050505b50506044805460ff1916905550505050505050505050505050565b6001600160a01b038116614f7f5760405162461bcd60e51b815260206004820152601260248201527104f776e65722063616e206e6f7420626520360741b6044820152606401611442565b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60008060185483614ff791906158b0565b6001600160a01b03861660009081526016602052604090205490915061501e90829061585e565b6001600160a01b03808716600090815260166020526040808220939093559086168152205461504e90829061582d565b6001600160a01b038086166000818152601660205260409081902093909355915190871690600080516020615c16833981519152906150909087815260200190565b60405180910390a3506001949350505050565b3360009081526010602052604081205460ff161580156150c6575060445460ff16155b80156150d457506000602854115b80156150e95750600854600160681b900460ff165b801561510457506000603a54603954615102919061582d565b115b8015611df55750601854601c5461511b9190615a19565b615124306128b3565b1015905090565b6001600160a01b0382166000908152600c602052604081205460ff168061516a57506001600160a01b0382166000908152600c602052604090205460ff165b156151775750600061165a565b60085460ff161561518a5750600161165a565b6001600160a01b03831660009081526010602052604090205460ff16806151c957506001600160a01b03821660009081526010602052604090205460ff165b905061165a565b60395460085460009190600160581b900460ff16156151fc57603b546039546151f99190615a19565b90505b6001600160a01b0385166000908152600a602052604090205460ff1615615221575060005b6001600160a01b03841660009081526010602052604090205460ff16156152dc5750603a546001600160a01b03851660009081526011602052604090205460ff1680156152775750600854600160601b900460ff165b156152b7576001600160a01b0385166000908152601460205260409020548110156152b757506001600160a01b0384166000908152601460205260409020545b6001600160a01b0385166000908152600b602052604090205460ff16156152dc575060005b6001600160a01b03851660009081526010602052604090205460ff1661532457600854600160481b900460ff1615615324576153178561346d565b615321908261582d565b90505b60006103e861533383866158b0565b61533d9190615a19565b3060009081526016602052604090205490915061535b90829061582d565b306000818152601660205260409020919091556018546001600160a01b03881690600080516020615c16833981519152906153969085615a19565b60405190815260200160405180910390a36153b1818561585e565b9695505050505050565b604454600090819060ff1661541e575b6017546022546019546153de91906158b0565b6153e89190615a19565b91506153f382614972565b50806153fe81615a4a565b915050426032541080156154125750606481125b6153cb5761541e612a37565b5050565b60215461542f908261582d565b603281905550600160376000828254615448919061582d565b909155505050565b61541e3061dead8361432d565b60006020828403121561546f57600080fd5b5035919050565b6000806040838503121561548957600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156154c5578581018301518582016040015282016154a9565b818111156154d7576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146124eb57600080fd5b6000806040838503121561551757600080fd5b615520836154ed565b946020939093013593505050565b60006020828403121561554057600080fd5b61496b826154ed565b8015158114612bb057600080fd5b60006020828403121561556957600080fd5b813561496b81615549565b6000806040838503121561558757600080fd5b615590836154ed565b915060208301356155a081615549565b809150509250929050565b6000806000606084860312156155c057600080fd5b6155c9846154ed565b925060208401356155d981615549565b929592945050506040919091013590565b6000806000606084860312156155ff57600080fd5b615608846154ed565b9250615616602085016154ed565b9150604084013590509250925092565b6000806000806080858703121561563c57600080fd5b615645856154ed565b9350615653602086016154ed565b9250615661604086016154ed565b915061566f606086016154ed565b905092959194509250565b6000806040838503121561568d57600080fd5b615696836154ed565b91506156a4602084016154ed565b90509250929050565b600080604083850312156156c057600080fd5b8235915060208301356155a081615549565b6000806000606084860312156156e757600080fd5b83356156f281615549565b95602085013595506040909401359392505050565b60008060008060008060008060008060006101608c8e03121561572957600080fd5b8b359a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c0135955060c08c0135945060e08c013593506101008c013592506101208c013591506101408c013561577d81615549565b809150509295989b509295989b9093969950565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b600181811c908216806157c857607f821691505b6020821081036138f357634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561581057600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561584057615840615817565b500190565b60006001820161585757615857615817565b5060010190565b60008282101561587057615870615817565b500390565b634e487b7160e01b600052603160045260246000fd5b6020808252600b908201526a139bdd0818da185b99d95960aa1b604082015260600190565b60008160001904831182151516156158ca576158ca615817565b500290565b6020808252601690820152751c9958da5c1a595b9d081a5cc81b9bdd081d985b1a5960521b604082015260600190565b600181815b8085111561593a57816000190482111561592057615920615817565b8085161561592d57918102915b93841c9390800290615904565b509250929050565b6000826159515750600161165a565b8161595e5750600061165a565b8160018114615974576002811461597e5761599a565b600191505061165a565b60ff84111561598f5761598f615817565b50506001821b61165a565b5060208310610133831016604e8410600b84101617156159bd575081810a61165a565b6159c783836158ff565b80600019048211156159db576159db615817565b029392505050565b600061496b8383615942565b634e487b7160e01b600052601260045260246000fd5b600082615a1457615a146159ef565b500690565b600082615a2857615a286159ef565b500490565b600060208284031215615a3f57600080fd5b815161496b81615549565b60006001600160ff1b01820161585757615857615817565b600060033d1115615a7b5760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715615ab257634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015615ac75790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715615af757505050505090565b8285019150815181811115615b0f5750505050505090565b843d8701016020828501011115615b295750505050505090565b615b3860208286010187615a7e565b509095945050505050565b600081615b5257615b52615817565b506000190190565b6000600160ff1b8201615b6f57615b6f615817565b5060000390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015615bc65784516001600160a01b031683529383019391830191600101615ba1565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215615bfc57600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d1e987e83da52eecdd60fa02f879aed872df61e40f3ead4d1090df42dae0211064736f6c634300080d0033

Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.