false
true
0

Contract Address Details

0x141a8649e3CAEb3a1589ba4922cDb651b6706281

Contract Name
GetNFT
Creator
0xc6eda6–db69f1 at 0xc4ebe5–e95cd2
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
455 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
26041212
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
GetNFT




Optimization enabled
true
Compiler version
v0.8.24+commit.e11b9ed9




Optimization runs
200
EVM Version
default




Verified at
2025-10-31T11:14:38.351825Z

DEGEN-main (9)/DEGEN-main/contracts/pulse-ecosystem/mintContract.sol

//need to be able to get the price (pls, plsx, inc - like we already have)
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "../interface/IDTX.sol";
import "../interface/IacPool.sol";
import "../interface/IGovernor.sol";
import "../interface/IVoting.sol";
import "../interface/IMasterChef.sol";
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol";

interface INftVault {
    function mint(address _to, uint256 _amount) external;
    function burn(address _user, uint256 _amount) external;
}

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

// SPDX-License-Identifier: NONE
pragma solidity ^0.8.0;


contract GetNFT {

    struct MinerPurchase {
        uint256 amount;       // amount of tokens
        uint256 amountPaid;      // amount paid
        address tokenPaid;    // tokenPaid
    }

    address public constant DTX = 0xFAaC6a85C3e123AB2CF7669B1024f146cFef0b38; // OINK token address
    address public constant TOKEN_X = 0x3E79130ab714E97ee73f86a56a2427bb1A519896; // Add tokenX address here
    address public constant wPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    address public constant PLSX = 0x95B303987A60C71504D99Aa1b13B4DA07b0790ab;
    address public constant INC = 0x2fa878Ab3F87CC1C9737Fc071108F904c0B0C95d;
    

    address public constant UNISWAP_V2_FACTORY = 0x29eA7545DEf87022BAdc76323F373EA1e707C523;

    uint256 public minimumPrice = 0; // Minimum price for tokenX in PLS

    address public OINK_TOKENX_PAIR = 0x3029aA801176F6904e2B6c7527334c215EAf1d8F; // OINK-tokenX Uniswap V2 pair address

    address public constant OINK_PLS_PAIR = 0xEf9Ea3d72e28c7140481209190601C085027D6fE;
    address public constant PLSX_PLS_PAIR = 0x1b45b9148791d3a104184Cd5DFE5CE57193a3ee9;
    address public constant INC_PLS_PAIR = 0xf808Bb6265e9Ca27002c0A04562Bf50d4FE37EAA;
    address public constant PLS_USD_PAIR = 0xE56043671df55dE5CDf8459710433C10324DE0aE;

    uint256 public usdTarget = 50 * 1e18; // NFT price in USD * 1e18
    uint256 public nftPrice; // Price in WPLS
    uint256 public nftPriceInPLSX; // Price in PLSX
    uint256 public nftPriceInINC; // Price in INC

    address public constant acPool1 = 0xD9B491ac0f5487673500B67224b67b4171a08aCa;
    address public constant acPool2 = 0x7ED33f65A0398cb26eaB2B03877825c96D9B6077;
    address public constant acPool3 = 0x3d175C8359169b0e830d36EA9CD3FE209f46f7BD;
    address public constant acPool4 = 0xdE672FccA32365bD704c39bd1164a0D34a3a73e6;

    address public constant acPool1oink = 0x39b3E852D6fFA1aF6694Ef87C062450de6778da8;
    address public constant acPool2oink = 0x9013B1067C52E897E713044dE36c56BfdA8Ec9B4;
    address public constant acPool3oink = 0xb180450f064E79adBFD71Bc2fB086F9CD0Af0D67;
    address public constant acPool4oink = 0xc0483f1b0dcf601888fFD0d3A44b7124e80DB7D1;
    address public constant acPool5oink = 0x15b51Ece819f3B51ce814de67bB2419660701a3c;
    address public constant acPool6oink = 0xf3E82f4123d4262a2baEC25b03652f3932A91739;

    address public buyOinkContract = 0x5E4b93e3E50eFCe211FEFddE4E635326e89381D6;

    bool public canAllocateTokens = true;

    uint256 public lastUpdate;

    //usdc, usdt, dai, wETH, wBNB, pls, plsx, inc
    mapping(address => MinerPurchase[]) public userPurchases;

    mapping(address => uint256) public penalty;

    mapping(address => uint256) public minOinkRatio;
    mapping(address => uint256) public minDegenRatio;

    address public nftContract;

    address public canSetMinimum;

    event BUY(address indexed buyer, uint256 amount, address purchaseToken, uint256 amountPaid);
    event DEGENCredit(address _user, uint256 _amount);

    constructor() {
        canSetMinimum = msg.sender;

        penalty[acPool1oink] = 70;
        penalty[acPool2oink] = 75;
        penalty[acPool3oink] = 80;
        penalty[acPool4oink] = 85;
        penalty[acPool5oink] = 90;
        penalty[acPool6oink] = 100;

        penalty[acPool1] = 75;
        penalty[acPool2] = 80;
        penalty[acPool3] = 85;
        penalty[acPool4] = 100;
    }

    function updateNFTPrices() public {
        require(lastUpdate < block.timestamp - 4 hours, "must wait atleast 4 hours");
        lastUpdate = block.timestamp;
        // Step 1: Get WPLS per USD from the pair
        uint256 wplsPerUSD = getWPLSPerUSDPrice();

        // Step 2: Calculate WPLS for $50: usdTarget * wplsPerUSD / 1e18
        uint256 wplsAmount = usdTarget * wplsPerUSD / 1e18;
        nftPrice = wplsAmount;

        // Step 3: Convert to PLSX
        uint256 plsxPerPLS = getPLSXPerPLSPrice();
        uint256 plsxAmount = wplsAmount * plsxPerPLS / 1e18;
        nftPriceInPLSX = plsxAmount;

        // Step 4: Convert to INC
        uint256 incPerPLS = getINCPerPLSPrice();
        uint256 incAmount = wplsAmount * incPerPLS / 1e18;
        nftPriceInINC = incAmount;
    }

    function giveTokens(address _to, uint256 _nftAmount) private {
        INftVault(nftContract).mint(_to, _nftAmount);
    }

    function burnNFT(uint256 _purchaseId, bool isOink, uint256 _amount, address _harvestInto) external {
         //check if user has a purchase with id
        require(userPurchases[msg.sender].length > _purchaseId, "purchaseId does not exist");
        MinerPurchase storage purchase = userPurchases[msg.sender][_purchaseId];
        require(_amount <= purchase.amount, "trying to burn more than what you have");

        uint256 _toBurn;
        uint256 _tokenAmount;
        address _token = purchase.tokenPaid;

        if(purchase.amount == _amount) {
            //remove entire array
            _toBurn = purchase.amount;
            _tokenAmount = purchase.amountPaid;

            uint256 lastIndex = userPurchases[msg.sender].length - 1;
            if (_purchaseId != lastIndex) {
                userPurchases[msg.sender][_purchaseId] = userPurchases[msg.sender][lastIndex];
            }
            // Remove the last element
            userPurchases[msg.sender].pop();
        } else {
            _toBurn = _amount;
            _tokenAmount = (purchase.amountPaid / purchase.amount) * _amount; // Calculate the corresponding token amount to burn)
            purchase.amount -= _toBurn;
            purchase.amountPaid -= _tokenAmount;
        }

        INftVault(nftContract).burn(msg.sender, _amount);  

        //GET CORRESPONDING OINK AND DEGEN AMOUNT (token X for ...)
        (uint256 oinkAmount, uint degenAmount) = getPricesInInputToken(_token);

        require(oinkAmount >= minOinkRatio[_token] * _tokenAmount / 1e18, "OINK price below minimum ratio");
        require(degenAmount >= minDegenRatio[_token] * _tokenAmount / 1e18, "DEGEN price below minimum ratio");

        oinkAmount = oinkAmount * _tokenAmount / 1e18;
        degenAmount = degenAmount * _tokenAmount / 1e18;
        
        // need some check so you couldn't manipulate the price
        // canSetMinimum should be able to set minimum price (so you can't dump it and get more tokens)

        if(isOink) { //cashout oink

        

            if (_harvestInto == acPool1oink) {
                IacPool(_harvestInto).giftDeposit(oinkAmount*penalty[_harvestInto]/100, msg.sender, 2592000);
            } else if (_harvestInto == acPool2oink) {
                IacPool(_harvestInto).giftDeposit(oinkAmount*penalty[_harvestInto]/100, msg.sender, 2592000);
            } else if (_harvestInto == acPool3oink) {
                IacPool(_harvestInto).giftDeposit(oinkAmount*penalty[_harvestInto]/100, msg.sender, 2592000);
            } else if (_harvestInto == acPool4oink) {
                IacPool(_harvestInto).giftDeposit(oinkAmount*penalty[_harvestInto]/100, msg.sender, 2592000);
            } else if (_harvestInto == acPool5oink) {
                IacPool(_harvestInto).giftDeposit(oinkAmount*penalty[_harvestInto]/100, msg.sender, 2592000);
            } else if (_harvestInto == acPool6oink) {
                IacPool(_harvestInto).giftDeposit(oinkAmount*penalty[_harvestInto]/100, msg.sender, 2592000);
            } else {
                revert("Invalid harvest pool address");
            }
            
        } else { //cashout degen

            if (_harvestInto == acPool1) {
                IacPool(_harvestInto).giftDeposit(degenAmount*penalty[_harvestInto]/100, msg.sender, 2592000);
            } else if (_harvestInto == acPool2) {
                IacPool(_harvestInto).giftDeposit(degenAmount*penalty[_harvestInto]/100, msg.sender, 7776000);
            } else if (_harvestInto == acPool3) {
                IacPool(_harvestInto).giftDeposit(degenAmount*penalty[_harvestInto]/100, msg.sender, 31536000);
            } else if (_harvestInto == acPool4) {
                IacPool(_harvestInto).giftDeposit(degenAmount*penalty[_harvestInto]/100, msg.sender, 315360000);
            } else {
                revert("Invalid harvest pool address");
            }
            
        }
    }

    function buyWithPLS(uint256 _amount) external payable {
        uint256 _toPay = priceWithDiscount(_amount, nftPrice);
        require(msg.value == _toPay, "msg.value different from amount!");

        address payable targetContract = payable(buyOinkContract);
        (bool success, ) = targetContract.call{value: msg.value}("");
        require(success, "Transfer to target contract failed");

        MinerPurchase memory newPurchase = MinerPurchase({
            amount: _amount,
            amountPaid: msg.value,
            tokenPaid: wPLS
        });

        // Push the new purchase to the user's array in the mapping
        userPurchases[msg.sender].push(newPurchase);

        giveTokens(msg.sender, _amount);

        emit BUY(msg.sender, _amount, wPLS, msg.value);
    }

    function buyWithPLSX(uint256 _amount) external {
        uint256 _toPay = priceWithDiscount(_amount, nftPriceInPLSX);
        require(IERC20(PLSX).transferFrom(msg.sender, buyOinkContract, _toPay), "PLSX transfer failed");

        MinerPurchase memory newPurchase = MinerPurchase({
            amount: _amount,
            amountPaid: _toPay,
            tokenPaid: PLSX
        });

        // Push the new purchase to the user's array in the mapping
        userPurchases[msg.sender].push(newPurchase);

        giveTokens(msg.sender, _amount);

        emit BUY(msg.sender, _amount, PLSX, _toPay);
    }

    function buyWithINC(uint256 _amount) external {
        uint256 _toPay = priceWithDiscount(_amount, nftPriceInINC);
        require(IERC20(INC).transferFrom(msg.sender, buyOinkContract, _toPay), "INC transfer failed");

        MinerPurchase memory newPurchase = MinerPurchase({
            amount: _amount,
            amountPaid: _toPay,
            tokenPaid: INC
        });

        // Push the new purchase to the user's array in the mapping
        userPurchases[msg.sender].push(newPurchase);

        giveTokens(msg.sender, _amount);

        emit BUY(msg.sender, _amount, INC, _toPay);
    }

    // used for NFT purchases across other chains
    function proxyNFTBuyMultiChain(address _recipient, uint256 _nftAmount, address _tokenPaid, uint256 _amountPaid) external {
        require(msg.sender == canSetMinimum, "not allowed");
        require(canAllocateTokens, "can no longer allocate tokens!");
        require(_nftAmount > 0, "must be greater than 0");

        MinerPurchase memory newPurchase = MinerPurchase({
            amount: _nftAmount,
            amountPaid: _amountPaid,
            tokenPaid: _tokenPaid
        });

        // Push the new purchase to the user's array in the mapping
        userPurchases[_recipient].push(newPurchase);

        giveTokens(_recipient, _nftAmount);

        emit BUY(_recipient, _nftAmount, _tokenPaid, _amountPaid);
    }

    function disableTokenAllocation() external {
        require(msg.sender == governor() || msg.sender == canSetMinimum, "not allowed");
        canAllocateTokens = false;
    }

    // improper name, says "price with discount" should be tokensPerPlsWithDiscount...
    function priceWithDiscount(uint256 _amount, uint256 _price) public pure returns (uint256) {
        if (_amount < 10) return _price * _amount; // No discount
        if (_amount < 50) return (_price * _amount * 97) / 100;
        if (_amount < 100) return (_price * _amount * 95) / 100;
        if (_amount < 250) return (_price * _amount * 92) / 100;
        if (_amount < 500) return (_price * _amount * 88) / 100;
        if (_amount < 1000) return (_price * _amount * 85) / 100;
        if (_amount < 5000) return (_price * _amount * 80) / 100;
        if (_amount < 10000) return (_price * _amount * 75) / 100;
        return (_price * _amount * 70) / 100; // Highest tier discount
    }

    function getWPLSPerUSDPrice() public view returns (uint256) {
        (uint112 reserve0, uint112 reserve1, ) = IUniswapV2Pair(PLS_USD_PAIR).getReserves();
        address token0 = IUniswapV2Pair(PLS_USD_PAIR).token0();
        uint256 wplsReserve;
        uint256 usdReserve;

        if (token0 == wPLS) {
            wplsReserve = uint256(reserve0);
            usdReserve = uint256(reserve1);
        } else {
            wplsReserve = uint256(reserve1);
            usdReserve = uint256(reserve0);
        }

        require(wplsReserve > 0 && usdReserve > 0, "Invalid reserves in pair");

        // If WPLS is base (token with reserves in numerator for price), return wpls / usd
        // Else, return 1e18 / (usd / wpls) = wpls / usd
        // Assuming both have 18 decimals; adjust if USD has 6 decimals: usdReserve *= 1e12;
        if (token0 == wPLS) {
            return wplsReserve * 1e18 / usdReserve;
        } else {
            return 1e18 * wplsReserve / usdReserve;
        }
    }

    function getPricesInInputToken(address inputToken) public view returns (uint256 oinkPerInputToken, uint256 tokenXPerInputToken) {
        // Get PLS per inputToken (helper function)
        uint256 plsPerInputToken;
        if(inputToken == wPLS) {
           plsPerInputToken = 1e18;
        } else {
            plsPerInputToken = _getPlsPerInputToken(inputToken);
        }

        // Get OINK per PLS (helper function)
        uint256 oinkPerPLS = _getOinkPerPls();

        // Get TokenX per OINK (helper function)
        uint256 tokenXPerOink = _getTokenXPerOink();

        // Calculate final prices
        oinkPerInputToken = oinkPerPLS * 1e18 / plsPerInputToken;
        tokenXPerInputToken = tokenXPerOink * oinkPerPLS / plsPerInputToken;
    }

    // Helper: Get PLS per inputToken
    function _getPlsPerInputToken(address inputToken) public view returns (uint256) {
        address inputTokenPLSPair = IUniswapV2Factory(UNISWAP_V2_FACTORY).getPair(inputToken, wPLS);
        require(inputTokenPLSPair != address(0), "Input token/PLS pair does not exist");

        (uint112 reserve0, uint112 reserve1, ) = IUniswapV2Pair(inputTokenPLSPair).getReserves();
        address token0 = IUniswapV2Pair(inputTokenPLSPair).token0();

        uint256 inputTokenReserve = (token0 == inputToken) ? reserve0 : reserve1;
        uint256 plsReserve = (token0 == inputToken) ? reserve1 : reserve0;

        return (plsReserve * 1e18) / inputTokenReserve;
    }

    // Helper: Get OINK per PLS
    function _getOinkPerPls() public view returns (uint256) {
        (uint112 reserve0, uint112 reserve1, ) = IUniswapV2Pair(OINK_PLS_PAIR).getReserves();
        address token0 = IUniswapV2Pair(OINK_PLS_PAIR).token0();

        uint256 oinkReserve = (token0 == DTX) ? reserve0 : reserve1;
        uint256 plsReserve = (token0 == DTX) ? reserve1 : reserve0;

        return (oinkReserve * 1e18) / plsReserve;
    }

    // Helper: Get TokenX per OINK
    function _getTokenXPerOink() public view returns (uint256) {
        (uint112 reserve0, uint112 reserve1, ) = IUniswapV2Pair(OINK_TOKENX_PAIR).getReserves();
        address token0 = IUniswapV2Pair(OINK_TOKENX_PAIR).token0();

        uint256 oinkReserve = (token0 == DTX) ? reserve0 : reserve1;
        uint256 tokenXReserve = (token0 == DTX) ? reserve1 : reserve0;

        return (tokenXReserve * 1e18) / oinkReserve;
    }
    // Get price of PLSX in terms of PLS from Uniswap V2 pair
    function getPLSXPerPLSPrice() public view returns (uint256) {
        (uint112 reserve0, uint112 reserve1, ) = IUniswapV2Pair(PLSX_PLS_PAIR).getReserves();
        address token0 = IUniswapV2Pair(PLSX_PLS_PAIR).token0();
        uint256 plsxReserve;
        uint256 plsReserve;

        if (token0 == PLSX) {
            plsxReserve = uint256(reserve0);
            plsReserve = uint256(reserve1);
        } else {
            plsxReserve = uint256(reserve1);
            plsReserve = uint256(reserve0);
        }
        return plsxReserve * 1e18 / plsReserve;
    }

    // Get price of INC in terms of PLS from Uniswap V2 pair
    function getINCPerPLSPrice() public view returns (uint256) {
        (uint112 reserve0, uint112 reserve1, ) = IUniswapV2Pair(INC_PLS_PAIR).getReserves();
        address token0 = IUniswapV2Pair(INC_PLS_PAIR).token0();
        uint256 incReserve;
        uint256 plsReserve;

        if (token0 == INC) {
            incReserve = uint256(reserve0);
            plsReserve = uint256(reserve1);
        } else {
            incReserve = uint256(reserve1);
            plsReserve = uint256(reserve0);
        }
        return incReserve * 1e18 / plsReserve;
    }

    function previewBurnReturn(uint256 _purchaseId, uint256 _amount, bool isOink, address _harvestInto) external view returns (uint256 tokenAmount) {
        require(userPurchases[msg.sender].length > _purchaseId, "purchaseId does not exist");
        MinerPurchase storage purchase = userPurchases[msg.sender][_purchaseId];
        require(_amount <= purchase.amount, "trying to burn more than available");

        uint256 _tokenAmount = (purchase.amountPaid * _amount) / purchase.amount;
        (uint256 oinkAmount, uint256 degenAmount) = getPricesInInputToken(purchase.tokenPaid);
        uint256 penaltyAmount = penalty[_harvestInto];
        require(penaltyAmount > 0, "Invalid harvest pool");

        if (isOink) {
            require(oinkAmount >= minOinkRatio[purchase.tokenPaid] * _tokenAmount / 1e18, "OINK price below minimum");
            return (oinkAmount * _tokenAmount / 1e18) * penaltyAmount / 100;
        } else {
            require(degenAmount >= minDegenRatio[purchase.tokenPaid] * _tokenAmount / 1e18, "DEGEN price below minimum");
            return (degenAmount * _tokenAmount / 1e18) * penaltyAmount / 100;
        }
    }

    function governor() public view returns (address) {
        return IDTX(TOKEN_X).governor();
    }

    function treasury() public view returns (address) {
        return IGovernor(governor()).treasuryWallet();
    }


    function withdrawERC(address _a) external {
        require(msg.sender == governor(), "only thru decentralized Governance");
        require(IERC20(_a).transfer(treasury(), IERC20(_a).balanceOf(address(this))), "ERC20 transfer failed");
    }

    function setMinimum(uint256 _amount) external {
        require(msg.sender == canSetMinimum, "authorized address only");
        minimumPrice = _amount;
    }

    function changeAddress(address _a) external {
        require(msg.sender == canSetMinimum, "authorized address only");
        canSetMinimum = _a;
    }

    function setNftContract(address _a) external {
        require(msg.sender == canSetMinimum, "authorized address only");
        require(nftContract == address(0), "already set!");
        nftContract = _a;
    }

    function updatePenalty(address _pool, uint256 _amount) external {
        require(msg.sender == canSetMinimum || msg.sender == governor(), "authorized address only");
        penalty[_pool] = _amount;
    }

    //prevents potential manipulation
    function setMinimumPriceOink(address _token, uint256 _amount) external {
        require(msg.sender == canSetMinimum || msg.sender == governor(), "authorized address only");
        if(!canAllocateTokens && msg.sender == canSetMinimum) { revert ("no longer allowed"); }
        minOinkRatio[_token] = _amount;
    }
    function setMinimumPriceDegen(address _token, uint256 _amount) external {
        require(msg.sender == canSetMinimum || msg.sender == governor(), "authorized address only");
        if(!canAllocateTokens && msg.sender == canSetMinimum) { revert ("no longer allowed"); }
        minDegenRatio[_token] = _amount;
    }

    function setNftPrice(uint256 _amount) external {
        require(msg.sender == canSetMinimum || msg.sender == governor(), "authorized address only");
        if(!canAllocateTokens && msg.sender == canSetMinimum) { revert ("no longer allowed"); }
        usdTarget = _amount;
    }

    function setBuyContract(address _a) external {
        require(msg.sender == governor(), "authorized address only");
        buyOinkContract = _a;
    }

}
        

@uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}
          

@openzeppelin/contracts/token/ERC20/IERC20.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

DEGEN-main (9)/DEGEN-main/contracts/interface/IDTX.sol

// SPDX-License-Identifier: UNLICENSED
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity ^0.8.20;

interface IDTX {
    error ERC20InsufficientAllowance(
        address spender,
        uint256 allowance,
        uint256 needed
    );
    error ERC20InsufficientBalance(
        address sender,
        uint256 balance,
        uint256 needed
    );
    error ERC20InvalidApprover(address approver);
    error ERC20InvalidReceiver(address receiver);
    error ERC20InvalidSender(address sender);
    error ERC20InvalidSpender(address spender);
    error OwnableInvalidOwner(address owner);
    error OwnableUnauthorizedAccount(address account);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

    function burn(uint256 value) external;

    function burnFrom(address account, uint256 value) external;

    function burnToken(address account, uint256 amount) external returns (bool);

    function decimals() external view returns (uint8);

    function governor() external view returns (address);

    function masterchefAddress() external view returns (address);

    function mint(address to, uint256 amount) external;

    function name() external view returns (string memory);

    function owner() external view returns (address);

    function rebrandName(string memory _newName) external;

    function rebrandSymbol(string memory _newSymbol) external;

    function receiveTax() external view returns (address);

    function renounceOwnership() external;

    function symbol() external view returns (string memory);

    function tax() external view returns (uint256);

    function totalSupply() external view returns (uint256);

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

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

    function transferOwnership(address newOwner) external;

    function updateTax(address _taxAddress) external;

    function updateTax(uint256 _tax) external;
}

// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchefAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_newName","type":"string"}],"name":"rebrandName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newSymbol","type":"string"}],"name":"rebrandSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"receiveTax","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax","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":[{"internalType":"address","name":"_taxAddress","type":"address"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"}]
*/
          

DEGEN-main (9)/DEGEN-main/contracts/interface/IGovernor.sol

// SPDX-License-Identifier: UNLICENSED
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity >=0.7.0 <0.9.0;

interface IGovernor {
    event EnforceGovernor(
        address indexed _newGovernor,
        address indexed enforcer
    );
    event GiveRolloverBonus(
        address indexed recipient,
        uint256 amount,
        address indexed poolInto
    );
    event SetInflation(uint256 rewardPerBlock);

    function OINK() external view returns (address);

    function acPool1() external view returns (address);

    function acPool1ID() external view returns (uint256);

    function acPool2() external view returns (address);

    function acPool2ID() external view returns (uint256);

    function acPool3() external view returns (address);

    function acPool3ID() external view returns (uint256);

    function acPool4() external view returns (address);

    function acPool4ID() external view returns (uint256);

    function addNewPool(address _pool) external;

    function addressToUint256(address addr) external pure returns (uint256);

    function basicContract() external view returns (address);

    function blockGovernorProposal() external;

    function burnTokens(uint256 _amount) external;

    function changedName() external view returns (bool);

    function consensusContract() external view returns (address);

    function costToVote() external view returns (uint256);

    function creditContract() external view returns (address);

    function delayBeforeEnforce() external view returns (uint256);

    function depositFee() external view returns (uint256);

    function farmContract() external view returns (address);

    function fundingRate() external view returns (uint256);

    function getRollBonus(address _bonusForPool)
        external
        view
        returns (uint256);

    function governorBlocked(address) external view returns (bool);

    function harvest() external;

    function manageRewardsAddress() external view returns (address);

    function helperToken() external view returns (address);

    function lastHarvestedTime() external view returns (uint256);

    function masterchef() external view returns (address);

    function proposeGovernorTimestamp() external view returns (uint256);

    function proposeNewGovernor(address beneficiary) external;

    function proposedGovernor() external view returns (address);

    function rebalancePools() external;

    function referralBonus() external view returns (uint256);

    function rewardContract() external view returns (address);

    function setCallFee(address _acPool, uint256 _newCallFee) external;

    function setGovernorTax(uint256 _amount) external;

    function setNewGovernor() external;

    function setNewGovernor2(address _new) external;

    function setPool(
        uint256 _pid,
        uint256 _allocPoint,
        bool _withUpdate
    ) external;

    function setReward(uint256 _amount) external;

    function stakeRolloverBonus(
        address _toAddress,
        address _depositToPool,
        uint256 _bonusToPay,
        uint256 _stakeID
    ) external;

    function token() external view returns (address);

    function transferToTreasury(uint256 amount) external;

    function treasuryRequest(
        address _tokenAddr,
        address _recipient,
        uint256 _amountToSend
    ) external;

    function treasuryWallet() external view returns (address);

    function updateCostToVote(uint256 newCostToVote) external;

    function updateDelayBeforeEnforce(uint256 newDelay) external;

    function updateRolloverBonus(address _forPool, uint256 _bonus) external;

    function updateVault(uint256 _type, uint256 _amount) external;
}

// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_newGovernor","type":"address"},{"indexed":true,"internalType":"address","name":"enforcer","type":"address"}],"name":"EnforceGovernor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"poolInto","type":"address"}],"name":"GiveRolloverBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewardPerBlock","type":"uint256"}],"name":"SetInflation","type":"event"},{"inputs":[],"name":"OINK","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool1ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool2ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool3ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool4","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acPool4ID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"addNewPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addressToUint256","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"basicContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockGovernorProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changedName","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"consensusContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"costToVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creditContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"delayBeforeEnforce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"farmContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundingRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bonusForPool","type":"address"}],"name":"getRollBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"governorBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"helperToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastHarvestedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposeGovernorTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"beneficiary","type":"address"}],"name":"proposeNewGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"proposedGovernor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebalancePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"referralBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_acPool","type":"address"},{"internalType":"uint256","name":"_newCallFee","type":"uint256"}],"name":"setCallFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setGovernorTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setNewGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setNewGovernor2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"address","name":"_depositToPool","type":"address"},{"internalType":"uint256","name":"_bonusToPay","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"stakeRolloverBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferToTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amountToSend","type":"uint256"}],"name":"treasuryRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCostToVote","type":"uint256"}],"name":"updateCostToVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"updateDelayBeforeEnforce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_forPool","type":"address"},{"internalType":"uint256","name":"_bonus","type":"uint256"}],"name":"updateRolloverBonus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_type","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateVault","outputs":[],"stateMutability":"nonpayable","type":"function"}]
*/
          

DEGEN-main (9)/DEGEN-main/contracts/interface/IMasterChef.sol

// SPDX-License-Identifier: NONE
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity ^0.8.20;

interface IMasterChef {
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
    event TransferCredit(address from, address to, uint256 amount);
    event TrustedContract(address contractAddress, bool setting);
    event UpdateEmissions(address indexed user, uint256 newEmissions);

    function DTXPerBlock() external view returns (uint256);

    function add(
        uint256 _allocPoint,
        address _participant,
        bool _withUpdate
    ) external;

    function burn(address _from, uint256 _amount) external returns (bool);

    function credit(address) external view returns (uint256);

    function dev(address _devaddr) external;

    function devaddr() external view returns (address);

    function dtx() external view returns (address);

    function existingParticipant(address) external view returns (bool);

    function fairMintSenate() external;

    function fairTokensPublishedToSenate() external view returns (uint256);

    function feeAddress() external view returns (address);

    function governorFee() external view returns (uint256);

    function massAdd(
        uint256[] memory _allocPoint,
        address[] memory _participant,
        bool[] memory _withUpdate
    ) external;

    function massUpdatePools() external;

    function owner() external view returns (address);

    function pendingDtx(uint256 _pid) external view returns (uint256);

    function poolInfo(uint256)
        external
        view
        returns (
            uint256 allocPoint,
            uint256 lastRewardBlock,
            address participant
        );

    function poolLength() external view returns (uint256);

    function publishTokens(address _to, uint256 _amount) external;

    function renounceOwnership() external;

    function renounceRewards() external;

    function rewardSenators(bool _e) external;

    function senatorRewards() external view returns (bool);

    function set(
        uint256 _pid,
        uint256 _allocPoint,
        bool _withUpdate
    ) external;

    function setFeeAddress(address _feeAddress) external;

    function setGovernorFee(uint256 _amount) external;

    function setTrustedContract(address _contractAddress, bool _setting)
        external;

    function startBlock() external view returns (uint256);

    function startPublishing(
        uint256 _pid,
        address _participant,
        uint256 _alloc
    ) external;

    function stopPublishing(uint256 _pid) external;

    function tokenChangeOwnership(address _newOwner) external;

    function totalAllocPoint() external view returns (uint256);

    function totalCreditRewards() external view returns (uint256);

    function totalCreditRewardsAtLastFairMint() external view returns (uint256);

    function totalPrincipalBurned() external view returns (uint256);

    function totalPublished() external view returns (uint256);

    function transferCredit(address _to, uint256 _amount) external;

    function transferOwnership(address newOwner) external;

    function trustedContract(address) external view returns (bool);

    function trustedContractCount() external view returns (uint256);

    function updateEmissionRate(uint256 _DTXPerBlock) external;

    function updatePool(uint256 _pid) external;

    function updateStartBlock(uint256 _startBlock) external;

    function virtualTotalSupply() external view returns (uint256);
}

// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[{"internalType":"contract IDTX","name":"_DTX","type":"address"},{"internalType":"address","name":"_airdropFull","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferCredit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"setting","type":"bool"}],"name":"TrustedContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"newEmissions","type":"uint256"}],"name":"UpdateEmissions","type":"event"},{"inputs":[],"name":"DTXPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"address","name":"_participant","type":"address"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"credit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devaddr","type":"address"}],"name":"dev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devaddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dtx","outputs":[{"internalType":"contract IDTX","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"existingParticipant","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fairMintSenate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fairTokensPublishedToSenate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_allocPoint","type":"uint256[]"},{"internalType":"address[]","name":"_participant","type":"address[]"},{"internalType":"bool[]","name":"_withUpdate","type":"bool[]"}],"name":"massAdd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"pendingDtx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"address","name":"participant","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"publishTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_e","type":"bool"}],"name":"rewardSenators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"senatorRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"setFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setGovernorFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"bool","name":"_setting","type":"bool"}],"name":"setTrustedContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_participant","type":"address"},{"internalType":"uint256","name":"_alloc","type":"uint256"}],"name":"startPublishing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"stopPublishing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"tokenChangeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCreditRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCreditRewardsAtLastFairMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPrincipalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPublished","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trustedContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedContractCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_DTXPerBlock","type":"uint256"}],"name":"updateEmissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startBlock","type":"uint256"}],"name":"updateStartBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"virtualTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
*/
          

DEGEN-main (9)/DEGEN-main/contracts/interface/IVoting.sol

// SPDX-License-Identifier: UNLICENSED
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity ^0.8.20;

interface IVoting {
    event AddCredit(address indexed depositor, uint256 amount);
    event BurnCredit(
        address indexed burnFrom,
        uint256 amount,
        uint256 indexed forId
    );
    event DeductCredit(address indexed from, uint256 amount);
    event SetCreditingContract(address indexed _contract, bool setting);
    event SetDeductingContract(address indexed _contract, bool setting);

    function addCredit(uint256 amount, address _beneficiary) external;

    function airdropContract() external view returns (address);

    function airdropContractLocked() external view returns (address);

    function airdropVotingCredit(uint256 amount, address beneficiary) external;

    function burnCredit(uint256 amount, uint256 _forId) external;

    function burnedForId(uint256) external view returns (uint256);

    function creditingContract(address) external view returns (bool);

    function creditingContractCount() external view returns (uint256);

    function deductCredit(address from, uint256 amount) external returns (bool);

    function deductingContract(address) external view returns (bool);

    function deductingContractCount() external view returns (uint256);

    function depositCredit(uint256 amount) external;

    function masterchef() external view returns (address);

    function modifyCreditingContract(address _contract, bool setting) external;

    function modifyDeductingContract(address _contract, bool setting) external;

    function owner() external view returns (address);

    function redeemGovernor() external;

    function syncOwner() external;

    function token() external view returns (address);

    function updateChef() external;

    function userCredit(address) external view returns (uint256);
}

// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[{"internalType":"contract IDTX","name":"_token","type":"address"},{"internalType":"contract IMasterChef","name":"_masterchef","type":"address"},{"internalType":"address","name":"_airdropContract","type":"address"},{"internalType":"address","name":"_airdropContractLocked","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"depositor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"AddCredit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burnFrom","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"forId","type":"uint256"}],"name":"BurnCredit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DeductCredit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_contract","type":"address"},{"indexed":false,"internalType":"bool","name":"setting","type":"bool"}],"name":"SetCreditingContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_contract","type":"address"},{"indexed":false,"internalType":"bool","name":"setting","type":"bool"}],"name":"SetDeductingContract","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"addCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdropContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropContractLocked","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"beneficiary","type":"address"}],"name":"airdropVotingCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"_forId","type":"uint256"}],"name":"burnCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"burnedForId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"creditingContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creditingContractCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deductCredit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deductingContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deductingContractCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"contract IMasterChef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bool","name":"setting","type":"bool"}],"name":"modifyCreditingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"bool","name":"setting","type":"bool"}],"name":"modifyDeductingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"syncOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IDTX","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateChef","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userCredit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
*/
          

DEGEN-main (9)/DEGEN-main/contracts/interface/IacPool.sol

// SPDX-License-Identifier: NONE
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.8.0. SEE SOURCE BELOW. !!
pragma solidity >=0.7.0 <0.9.0;

interface IacPool {
    event AddAndExtendStake(
        address indexed sender,
        address indexed recipient,
        uint256 amount,
        uint256 stakeID,
        uint256 shares,
        uint256 lastDepositedTime
    );
    event AddVotes(address indexed voter, uint256 proposalID, uint256 change);
    event Deposit(
        address indexed sender,
        uint256 amount,
        uint256 shares,
        uint256 lastDepositedTime
    );
    event GiftDeposit(
        address indexed sender,
        address indexed recipient,
        uint256 amount,
        uint256 shares,
        uint256 lastDepositedTime
    );
    event HopDeposit(
        address indexed recipient,
        uint256 amount,
        uint256 shares,
        uint256 previousLastDepositedTime,
        uint256 mandatoryTime
    );
    event HopPool(
        address indexed sender,
        uint256 DTXamount,
        uint256 shares,
        address indexed newPool
    );
    event MigrateStake(
        address indexed goodSamaritan,
        uint256 DTXamount,
        uint256 shares,
        address indexed recipient
    );
    event RemoveVotes(
        address indexed voter,
        uint256 proposalID,
        uint256 change
    );
    event SetDelegate(address userDelegating, address delegatee);
    event StakeAllowanceRevoke(
        address owner,
        address spender,
        uint256 allowanceID
    );
    event StakeApproval(
        address owner,
        address spender,
        uint256 allowanceID,
        uint256 shareAllowance,
        uint256 lastDeposit,
        uint256 mandatoryTime
    );
    event TransferStake(
        address indexed sender,
        address indexed recipient,
        uint256 shares,
        uint256 stakeID
    );
    event TransferStakeFrom(
        address _from,
        address _to,
        uint256 _stakeID,
        uint256 _allowanceID
    );
    event TrustedPool(address contractAddress, bool setting);
    event TrustedSender(address contractAddress, bool setting);
    event Withdraw(
        address indexed sender,
        uint256 amount,
        uint256 penalty,
        uint256 shares
    );

    function addAndExtendStake(
        address _recipientAddr,
        uint256 _amount,
        uint256 _stakeID,
        uint256 _lockUpTokensInSeconds
    ) external;

    function admin() external view returns (address);

    function allowOrigin() external view returns (bool);

    function allowStakeTransfer() external view returns (bool);

    function allowStakeTransferFrom() external view returns (bool);

    function allowTxOrigin(bool _setting) external;

    function balanceOf() external view returns (uint256);

    function calculateHarvestDTXRewards() external view returns (uint256);

    function calculateTotalPendingDTXRewards() external view returns (uint256);

    function callFee() external view returns (uint256);

    function delegateeVote(address[] memory votingAddress, uint256 proposalID)
        external;

    function deposit(uint256 _amount) external;

    function enableDisableStakeTransfer(bool _setting) external;

    function enableDisableStakeTransferFrom(bool _setting) external;

    function getNrOfStakes(address _user) external view returns (uint256);

    function getPricePerFullShare() external view returns (uint256);

    function getUserShares(address _wallet, uint256 _stakeID)
        external
        view
        returns (uint256);

    function getUserTotalShares(address _user) external view returns (uint256);

    function giftDeposit(
        uint256 _amount,
        address _toAddress,
        uint256 _minToServeInSecs
    ) external;

    function giveStakeAllowance(address spender, uint256 _stakeID) external;

    function gracePeriod() external view returns (uint256);

    function hopDeposit(
        uint256 _amount,
        address _recipientAddress,
        uint256 previousLastDepositedTime,
        uint256 _mandatoryTime
    ) external;

    function hopStakeToAnotherPool(
        uint256 _shares,
        uint256 _stakeID,
        address _poolAddress
    ) external;

    function masterchef() external view returns (address);

    function migrateAllStakes(address _staker) external;

    function migrateStake(address _staker, uint256 _stakeID) external;

    function migrationPool() external view returns (address);

    function minimumGift() external view returns (uint256);

    function modifyPartialTransfers(bool _decision) external;

    function modifyPartialWithdrawals(bool _decision) external;

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

    function partialTransfers() external view returns (bool);

    function partialWithdrawals() external view returns (bool);

    function poolID() external view returns (uint256);

    function revokeStakeAllowance(address spender, uint256 allowanceID)
        external;

    function setAdmin() external;

    function setCallFee(uint256 _callFee) external;

    function setDelegate(address _delegate, bool asProxy) external;

    function setMasterChefAddress(address _masterchef, uint256 _newPoolID)
        external;

    function setMigrationPool(address _newPool) external;

    function setMinimumGiftDeposit(uint256 _amount, bool _setting) external;

    function setTrustedPool(address[] memory _pool, bool _setting) external;

    function setTrustedSender(address[] memory _sender, bool _setting) external;

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

    function stakeRollover(address _poolInto, uint256 _stakeID) external;

    function token() external view returns (address);

    function totalShares() external view returns (uint256);

    function totalVotesForID(uint256) external view returns (uint256);

    function transferStakeFrom(
        address _from,
        uint256 _stakeID,
        uint256 allowanceID,
        address _to
    ) external returns (bool);

    function transferStakeToAnotherWallet(
        uint256 _shares,
        uint256 _stakeID,
        address _recipientAddress
    ) external;

    function treasury() external view returns (address);

    function trustedPool(address) external view returns (bool);

    function trustedPoolCount() external view returns (uint256);

    function trustedSender(address) external view returns (bool);

    function trustedSenderCount() external view returns (uint256);

    function updateMinGiftGovernor() external view returns (bool);

    function updateMinimumGift() external;

    function userDelegate(address) external view returns (address);

    function userInfo(address, uint256)
        external
        view
        returns (
            uint256 shares,
            uint256 lastDepositedTime,
            uint256 dtxAtLastUserAction,
            uint256 lastUserActionTime,
            uint256 mandatoryTimeToServe
        );

    function userVote(address) external view returns (uint256);

    function voteForProposal(uint256 proposalID, bool asProxy) external;

    function votingCredit(uint256 _shares, uint256 _stakeID) external;

    function votingCreditAddress() external view returns (address);

    function withdraw(uint256 _shares, uint256 _stakeID) external;

    function withdrawAll(uint256 _stakeID) external;

    function withdrawFeePeriod() external view returns (uint256);

    function withdrawStuckTokens(address _tokenAddress) external;
}

// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
[{"inputs":[{"internalType":"contract IDTX","name":"_token","type":"address"},{"internalType":"contract IMasterChef","name":"_masterchef","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDepositedTime","type":"uint256"}],"name":"AddAndExtendStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"change","type":"uint256"}],"name":"AddVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDepositedTime","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDepositedTime","type":"uint256"}],"name":"GiftDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousLastDepositedTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mandatoryTime","type":"uint256"}],"name":"HopDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"DTXamount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":true,"internalType":"address","name":"newPool","type":"address"}],"name":"HopPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"goodSamaritan","type":"address"},{"indexed":false,"internalType":"uint256","name":"DTXamount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"}],"name":"MigrateStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"change","type":"uint256"}],"name":"RemoveVotes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"userDelegating","type":"address"},{"indexed":false,"internalType":"address","name":"delegatee","type":"address"}],"name":"SetDelegate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"allowanceID","type":"uint256"}],"name":"StakeAllowanceRevoke","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"allowanceID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shareAllowance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastDeposit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mandatoryTime","type":"uint256"}],"name":"StakeApproval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakeID","type":"uint256"}],"name":"TransferStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_stakeID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_allowanceID","type":"uint256"}],"name":"TransferStakeFrom","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"setting","type":"bool"}],"name":"TrustedPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"setting","type":"bool"}],"name":"TrustedSender","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penalty","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"_recipientAddr","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"},{"internalType":"uint256","name":"_lockUpTokensInSeconds","type":"uint256"}],"name":"addAndExtendStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowOrigin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowStakeTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowStakeTransferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_setting","type":"bool"}],"name":"allowTxOrigin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateHarvestDTXRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateTotalPendingDTXRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"callFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"votingAddress","type":"address[]"},{"internalType":"uint256","name":"proposalID","type":"uint256"}],"name":"delegateeVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_setting","type":"bool"}],"name":"enableDisableStakeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_setting","type":"bool"}],"name":"enableDisableStakeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getNrOfStakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"getUserShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getUserTotalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_toAddress","type":"address"},{"internalType":"uint256","name":"_minToServeInSecs","type":"uint256"}],"name":"giftDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"giveStakeAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gracePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_recipientAddress","type":"address"},{"internalType":"uint256","name":"previousLastDepositedTime","type":"uint256"},{"internalType":"uint256","name":"_mandatoryTime","type":"uint256"}],"name":"hopDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"},{"internalType":"address","name":"_poolAddress","type":"address"}],"name":"hopStakeToAnotherPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"masterchef","outputs":[{"internalType":"contract IMasterChef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"migrateAllStakes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"migrateStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrationPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumGift","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_decision","type":"bool"}],"name":"modifyPartialTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_decision","type":"bool"}],"name":"modifyPartialWithdrawals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"nrOfstakeAllowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partialTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partialWithdrawals","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowanceID","type":"uint256"}],"name":"revokeStakeAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_callFee","type":"uint256"}],"name":"setCallFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_delegate","type":"address"},{"internalType":"bool","name":"asProxy","type":"bool"}],"name":"setDelegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IMasterChef","name":"_masterchef","type":"address"},{"internalType":"uint256","name":"_newPoolID","type":"uint256"}],"name":"setMasterChefAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPool","type":"address"}],"name":"setMigrationPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_setting","type":"bool"}],"name":"setMinimumGiftDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_pool","type":"address[]"},{"internalType":"bool","name":"_setting","type":"bool"}],"name":"setTrustedPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_sender","type":"address[]"},{"internalType":"bool","name":"_setting","type":"bool"}],"name":"setTrustedSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowanceID","type":"uint256"}],"name":"stakeAllowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_poolInto","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"stakeRollover","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IDTX","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalVotesForID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_stakeID","type":"uint256"},{"internalType":"uint256","name":"allowanceID","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferStakeFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"},{"internalType":"address","name":"_recipientAddress","type":"address"}],"name":"transferStakeToAnotherWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trustedPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trustedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"trustedSenderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateMinGiftGovernor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateMinimumGift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userDelegate","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"uint256","name":"lastDepositedTime","type":"uint256"},{"internalType":"uint256","name":"dtxAtLastUserAction","type":"uint256"},{"internalType":"uint256","name":"lastUserActionTime","type":"uint256"},{"internalType":"uint256","name":"mandatoryTimeToServe","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalID","type":"uint256"},{"internalType":"bool","name":"asProxy","type":"bool"}],"name":"voteForProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"votingCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"votingCreditAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"},{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakeID","type":"uint256"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFeePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
*/
          

Compiler Settings

{"viaIR":true,"outputSelection":{"*":{"*":["abi","metadata","devdoc","userdoc","storageLayout","evm.legacyAssembly","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","evm.gasEstimates","evm.assembly"],"":["ast"]}},"optimizer":{"runs":200,"enabled":true},"libraries":{}}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"BUY","inputs":[{"type":"address","name":"buyer","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false},{"type":"address","name":"purchaseToken","internalType":"address","indexed":false},{"type":"uint256","name":"amountPaid","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"DEGENCredit","inputs":[{"type":"address","name":"_user","internalType":"address","indexed":false},{"type":"uint256","name":"_amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"DTX","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"INC","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"INC_PLS_PAIR","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"OINK_PLS_PAIR","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"OINK_TOKENX_PAIR","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"PLSX","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"PLSX_PLS_PAIR","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"PLS_USD_PAIR","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"TOKEN_X","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"UNISWAP_V2_FACTORY","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_getOinkPerPls","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_getPlsPerInputToken","inputs":[{"type":"address","name":"inputToken","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_getTokenXPerOink","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool1","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool1oink","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool2","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool2oink","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool3","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool3oink","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool4","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool4oink","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool5oink","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"acPool6oink","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burnNFT","inputs":[{"type":"uint256","name":"_purchaseId","internalType":"uint256"},{"type":"bool","name":"isOink","internalType":"bool"},{"type":"uint256","name":"_amount","internalType":"uint256"},{"type":"address","name":"_harvestInto","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"buyOinkContract","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"buyWithINC","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"buyWithPLS","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"buyWithPLSX","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"canAllocateTokens","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"canSetMinimum","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeAddress","inputs":[{"type":"address","name":"_a","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"disableTokenAllocation","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getINCPerPLSPrice","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getPLSXPerPLSPrice","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"oinkPerInputToken","internalType":"uint256"},{"type":"uint256","name":"tokenXPerInputToken","internalType":"uint256"}],"name":"getPricesInInputToken","inputs":[{"type":"address","name":"inputToken","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getWPLSPerUSDPrice","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"governor","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastUpdate","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"minDegenRatio","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"minOinkRatio","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"minimumPrice","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"nftContract","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nftPrice","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nftPriceInINC","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"nftPriceInPLSX","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"penalty","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"tokenAmount","internalType":"uint256"}],"name":"previewBurnReturn","inputs":[{"type":"uint256","name":"_purchaseId","internalType":"uint256"},{"type":"uint256","name":"_amount","internalType":"uint256"},{"type":"bool","name":"isOink","internalType":"bool"},{"type":"address","name":"_harvestInto","internalType":"address"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"priceWithDiscount","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"},{"type":"uint256","name":"_price","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"proxyNFTBuyMultiChain","inputs":[{"type":"address","name":"_recipient","internalType":"address"},{"type":"uint256","name":"_nftAmount","internalType":"uint256"},{"type":"address","name":"_tokenPaid","internalType":"address"},{"type":"uint256","name":"_amountPaid","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBuyContract","inputs":[{"type":"address","name":"_a","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMinimum","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMinimumPriceDegen","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMinimumPriceOink","inputs":[{"type":"address","name":"_token","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNftContract","inputs":[{"type":"address","name":"_a","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNftPrice","inputs":[{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"treasury","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateNFTPrices","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updatePenalty","inputs":[{"type":"address","name":"_pool","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"usdTarget","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"amount","internalType":"uint256"},{"type":"uint256","name":"amountPaid","internalType":"uint256"},{"type":"address","name":"tokenPaid","internalType":"address"}],"name":"userPurchases","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"wPLS","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawERC","inputs":[{"type":"address","name":"_a","internalType":"address"}]}]
              

Contract Creation Code

0x60806040818152346101a3576064905f805560018060a01b0319733029aa801176f6904e2b6c7527334c215eaf1d8f8160015416176001556802b5e3af16b188000060025574015e4b93e3e50efce211fefdde4e635326e89381d660018060a81b031960065416176006553390600d541617600d557339b3e852d6ffa1af6694ef87c062450de6778da85f5260096020526046815f2055739013b1067c52e897e713044de36c56bfda8ec9b45f52604b815f205573b180450f064e79adbfd71bc2fb086f9cd0af0d675f526050815f205573c0483f1b0dcf601888ffd0d3a44b7124e80db7d15f526055815f20557315b51ece819f3b51ce814de67bb2419660701a3c5f52605a815f205573f3e82f4123d4262a2baec25b03652f3932a917395f5281815f205573d9b491ac0f5487673500b67224b67b4171a08aca5f52604b815f2055737ed33f65a0398cb26eab2b03877825c96d9b60775f526050815f2055733d175c8359169b0e830d36ea9cd3fe209f46f7bd5f526055815f205573de672fcca32365bd704c39bd1164a0d34a3a73e65f525f2055612d0190816101a88239f35b5f80fdfe608060409080825260049182361015610016575f80fd5b5f925f3560e01c9283630228bb3314611d2857508263038fc4fa14611ba657826305b8155c14611b785782630c340a2414611b5c5782630d39fc8114611b3e57826312c793d614611a6b57826313e492d714611a3d5782631a3f19e914611a215782631baca2d2146119f95782631f3e24e2146119d457826323af1a87146119a6578263296d77fb146119785782632a9f51d71461194a5782632dde7241146119295782633209e9e6146118fe57826332ae93ee146118c65782633df62f3714611874578263434eeae31461185857826346f88fc0146117185782634c2951bd146116ea5782634c2a1cff146116bc57826352f5ad7714611636578263573051f7146115b45782635ec232f1146115865782635f34148914610ea257826361d027b314610e7457826363dd9d7414610e455782636497931d14610d8057826369046cbc14610d595782637103ef0d14610d0b578263729c95a514610ca757826372f2b07c14610c8a57826373f937e414610c5b5782637d9a7a4c14610ba75782637f386b6c14610b8a57826382a38fa214610a485782638837737514610a195782638dde8213146109ea5782638fa10089146109cb57826390b08ce71461099c57826391b8e8a81461096457826391e32d0e14610947578263972ef8411461090f57826399d8fae3146108e05782639d8709b0146108b7578263b2922ec414610888578263c046371114610869578263c156e9cc1461083a578263c1610d191461081b578263c7c72cc4146107ec578263cf2c03341461077f578263cf8ff58f14610750578263d56d229d14610727578263da9a3064146106ef578263dacec9fa146106c0578263dd67b1081461057d578263dec5c24d14610560578263e4932abe14610531578263e4f0ab901461050d578263e95164f51461034c57508163f9f6a4a414610319575063fe64d6ff146102ce575f80fd5b34610316576020366003190112610316576102e7611d4b565b600d54906001600160a01b03906103013383851614612407565b16906001600160601b0360a01b1617600d5580f35b80fd5b9050346103485781600319360112610348576020905173a1077a294dde1b09bb078844df40758a5d0f9a278152f35b5080fd5b915034610509576020908160031936011261050557610369611d4b565b6001600160a01b03908161037b611e95565b1633036104b7571661038b612783565b82516370a0823160e01b81523086820152908482602481865afa9182156104ad57908592918892610476575b50845163a9059cbb60e01b81526001600160a01b0390911687820190815260208101929092529283918290899082906040015b03925af190811561046c57859161043f575b5015610406578380f35b5162461bcd60e51b8152918201526015602482015274115490cc8c081d1c985b9cd9995c8819985a5b1959605a1b604482015260649150fd5b61045f9150833d8511610465575b6104578183611de8565b8101906126eb565b5f6103fc565b503d61044d565b82513d87823e3d90fd5b8381949293503d83116104a6575b61048e8183611de8565b810103126104a257905184916103ea6103b7565b8680fd5b503d610484565b84513d89823e3d90fd5b50505162461bcd60e51b815291820152602260248201527f6f6e6c79207468727520646563656e7472616c697a656420476f7665726e616e604482015261636560f01b606482015260849150fd5b8380fd5b8280fd5b83823461034857816003193601126103485760209061052a612ab5565b9051908152f35b83823461034857816003193601126103485760209051732fa878ab3f87cc1c9737fc071108f904c0b0c95d8152f35b83823461034857816003193601126103485760209061052a6129d2565b91503461050957608036600319011261050957610598611d4b565b6001600160a01b039260243592909160443585811691908290036106bc57606435936105c987600d541633146126b1565b60ff60065460a01c161561067957851561063d5750916060939161062c865f80516020612cac833981519152979561062785519a6106068c611da4565b838c528760208d015285878d015282169a8b8d526008602052868d20611e0a565b612c4e565b81519384526020840152820152a280f35b606490602085519162461bcd60e51b8352820152601660248201527506d7573742062652067726561746572207468616e20360541b6044820152fd5b606490602085519162461bcd60e51b8352820152601e60248201527f63616e206e6f206c6f6e67657220616c6c6f6361746520746f6b656e732100006044820152fd5b5f80fd5b8382346103485781600319360112610348576020905173faac6a85c3e123ab2cf7669b1024f146cfef0b388152f35b8382346103485760203660031901126103485760209181906001600160a01b03610717611d4b565b168152600b845220549051908152f35b838234610348578160031936011261034857600c5490516001600160a01b039091168152602090f35b8382346103485781600319360112610348576020905173f3e82f4123d4262a2baec25b03652f3932a917398152f35b838234610348578060031936011261034857610799611d4b565b6001600160a01b03908116835260086020528183208054602435949293929085101561031657506060936107cc91611d77565b509081549260026001840154930154169181519384526020840152820152f35b83823461034857816003193601126103485760209051731b45b9148791d3a104184cd5dfe5ce57193a3ee98152f35b8382346103485781600319360112610348576020906005549051908152f35b8382346103485781600319360112610348576020905173e56043671df55de5cdf8459710433c10324de0ae8152f35b8382346103485781600319360112610348576020906007549051908152f35b83823461034857816003193601126103485760209051733d175c8359169b0e830d36ea9cd3fe209f46f7bd8152f35b838234610348578160031936011261034857600d5490516001600160a01b039091168152602090f35b838234610348578160031936011261034857602090517329ea7545def87022badc76323f373ea1e707c5238152f35b8382346103485760203660031901126103485760209181906001600160a01b03610937611d4b565b168152600a845220549051908152f35b83823461034857816003193601126103485760209061052a6128d2565b8382346103485760203660031901126103485760209181906001600160a01b0361098c611d4b565b1681526009845220549051908152f35b8382346103485781600319360112610348576020905173ef9ea3d72e28c7140481209190601c085027d6fe8152f35b8382346103485781600319360112610348576020906002549051908152f35b838234610348578160031936011261034857602090517315b51ece819f3b51ce814de67bb2419660701a3c8152f35b838234610348578160031936011261034857602090517339b3e852d6ffa1af6694ef87c062450de6778da88152f35b915034610509576020908160031936011261050557823592610a6c600554856122b2565b60065483516323b872dd60e01b8152338482019081526001600160a01b039092166020830152604082018390529194919290839060600103928281732fa878ab3f87cc1c9737fc071108f904c0b0c95d95818b885af1908115610b80578891610b63575b5015610b2c5750610b018351610ae581611da4565b8681528583820152838582015233885260088352848820611e0a565b610b0b8533612c4e565b82519485528401528201525f80516020612cac83398151915260603392a280f35b60649184519162461bcd60e51b83528201526013602482015272125390c81d1c985b9cd9995c8819985a5b1959606a1b6044820152fd5b610b7a9150833d8511610465576104578183611de8565b5f610ad0565b85513d8a823e3d90fd5b838234610348578160031936011261034857602091549051908152f35b91503461050957602036600319011261050957600d54336001600160a01b039182161490610bde9082908115610c48575b50612407565b60ff60065460a01c16159081610c40575b50610bfc57503560025580f35b5162461bcd60e51b815291508190610c3c9082016060906020815260116020820152701b9bc81b1bdb99d95c88185b1b1bddd959607a1b60408201520190565b0390fd5b90505f610bef565b9050610c52611e95565b1633145f610bd8565b83823461034857816003193601126103485760209051739013b1067c52e897e713044de36c56bfda8ec9b48152f35b83823461034857816003193601126103485760209061052a6127bc565b838234610348578060031936011261034857610cc1611d4b565b600d546001600160a01b039190821633148015610cf4575b610ce290612407565b16825260096020526024359082205580f35b50610ce282610d01611e95565b1633149050610cd9565b833461031657602036600319011261031657610d25611d4b565b6001600160a01b0390610d4282610d3a611e95565b163314612407565b166001600160601b0360a01b600654161760065580f35b83823461034857816003193601126103485760209060ff60065460a01c1690519015158152f35b90915034610509578160031936011261050957610d9b611d4b565b600d546001600160a01b03929083163314808015610e2e575b610dbd90612407565b60ff60065460a01c16159081610e26575b50610de65750168252600b6020526024359082205580f35b835162461bcd60e51b8152908190610c3c9082016060906020815260116020820152701b9bc81b1bdb99d95c88185b1b1bddd959607a1b60408201520190565b90505f610dce565b50610dbd84610e3b611e95565b1633149050610db4565b838234610348578160031936011261034857602090517395b303987a60c71504d99aa1b13b4da07b0790ab8152f35b838234610348578160031936011261034857602090610e91612783565b90516001600160a01b039091168152f35b8390346106bc5760803660031901126106bc5780359260249182359081151582036106bc576044918235610ed4611d61565b335f52600892602093808552610eee8b895f205411612453565b335f52808552610f008b895f20611d77565b509384549b8c82116115355760028601546001600160a01b039081169d9096908381036114f857506001015492335f528088528a5f2054915f19928381019081116114e6578c81830361146b575b505050335f528752895f209081548015611459570190610f6e8282611d77565b611448576002815f8093558260018201550155555b84600c5416803b156106bc578951632770a7eb60e21b815233818a019081526020810193909352915f91839182908490829060400103925af1801561143e5761142b575b508790610fd38c612703565b9c808d52600a88528c610ff384670de0b6b3a76400009687932054611f28565b0482106113e85761100f838c8f87948152600b8c522054611f28565b048d106113a65790826110258261102c94611f28565b049c611f28565b04901561120e575016907339b3e852d6ffa1af6694ef87c062450de6778da882036110c45761106987986009606493858b52528689205490611f28565b0491813b156104a2578660649262278d0082968851998a97889663859f267f60e01b885287015233908601528401525af19081156110bb57506110ab57505080f35b6110b490611dd4565b6103165780f35b513d84823e3d90fd5b739013b1067c52e897e713044de36c56bfda8ec9b482036110f75761106987986009606493858b52528689205490611f28565b73b180450f064e79adbfd71bc2fb086f9cd0af0d67820361112a5761106987986009606493858b52528689205490611f28565b73c0483f1b0dcf601888ffd0d3a44b7124e80db7d1820361115d5761106987986009606493858b52528689205490611f28565b7315b51ece819f3b51ce814de67bb2419660701a3c82036111905761106987986009606493858b52528689205490611f28565b73f3e82f4123d4262a2baec25b03652f3932a9173982036111c35761106987986009606493858b52528689205490611f28565b845162461bcd60e51b81526020818501818152601c918101919091527f496e76616c6964206861727665737420706f6f6c206164647265737300000000604082015281906060010390fd5b9850169073d9b491ac0f5487673500b67224b67b4171a08aca82036112455761106987986009606493858b52528689205490611f28565b737ed33f65a0398cb26eab2b03877825c96d9b607782036112ba5761127887986009606493858b52528689205490611f28565b0491813b156104a257866064926276a70082968851998a97889663859f267f60e01b885287015233908601528401525af19081156110bb57506110ab57505080f35b733d175c8359169b0e830d36ea9cd3fe209f46f7bd8203611330576112ed87986009606493858b52528689205490611f28565b0491813b156104a257866064926301e1338082968851998a97889663859f267f60e01b885287015233908601528401525af19081156110bb57506110ab57505080f35b73de672fcca32365bd704c39bd1164a0d34a3a73e682036111c35761136387986009606493858b52528689205490611f28565b0491813b156104a257866064926312cc030082968851998a97889663859f267f60e01b885287015233908601528401525af19081156110bb57506110ab57505080f35b50885162461bcd60e51b8152808801879052601f818c01527f444547454e2070726963652062656c6f77206d696e696d756d20726174696f00818a0152606490fd5b5050885162461bcd60e51b8152808801879052601e818c01527f4f494e4b2070726963652062656c6f77206d696e696d756d20726174696f0000818a0152606490fd5b611436919a50611dd4565b5f9887610fc7565b89513d5f823e3d90fd5b8c5f8b634e487b7160e01b8252525ffd5b8c60318b634e487b7160e01b5f52525ffd5b6114909161148091335f52858d525f20611d77565b5091335f52838b528d5f20611d77565b6114d55780828a92036114a5575b508c610f4e565b60028091845481556001850154600182015501920154166001600160601b0360a01b8254161790558e878161149e565b8d5f8c634e487b7160e01b8252525ffd5b8d60118c634e487b7160e01b5f52525ffd5b839450819250600161152e92019283549061152761151f8761151a8686611f3b565b611f28565b978894611f07565b9055611f07565b9055610f83565b50885162461bcd60e51b81528088018790526026818c01527f747279696e6720746f206275726e206d6f7265207468616e207768617420796f818a01526575206861766560d01b6064820152608490fd5b50346106bc575f3660031901126106bc576020905173de672fcca32365bd704c39bd1164a0d34a3a73e68152f35b346106bc57816003193601126106bc576115cc611d4b565b600d546001600160a01b0392908316331480801561161f575b6115ee90612407565b60ff60065460a01c16159081611617575b50610de65750165f908152600a602052206024359055005b9050856115ff565b506115ee8461162c611e95565b16331490506115e5565b346106bc5760203660031901126106bc5761164f611d4b565b600d546001600160a01b0392906116699084163314612407565b600c549383851661168a5750506001600160a01b0319909216911617600c55005b906020606492519162461bcd60e51b8352820152600c60248201526b616c7265616479207365742160a01b6044820152fd5b50346106bc5760203660031901126106bc576116de6116d9611d4b565b612703565b82519182526020820152f35b50346106bc575f3660031901126106bc576020905173b180450f064e79adbfd71bc2fb086f9cd0af0d678152f35b90346106bc57602090816003193601126106bc5782359261173a8154856122b2565b60065483516323b872dd60e01b8152338482019081526001600160a01b0390921660208301526040820183905291949192908390606001039282817395b303987a60c71504d99aa1b13b4da07b0790ab95815f885af190811561184e575f91611831575b50156117f957506117cf83516117b381611da4565b86815285838201528385820152335f5260088352845f20611e0a565b6117d98533612c4e565b82519485528401528201525f80516020612cac83398151915260603392a2005b60649184519162461bcd60e51b83528201526014602482015273141314d6081d1c985b9cd9995c8819985a5b195960621b6044820152fd5b6118489150833d8511610465576104578183611de8565b8761179e565b85513d5f823e3d90fd5b90346106bc575f3660031901126106bc57602091549051908152f35b346106bc575f3660031901126106bc576118a96001600160a01b0380611898611e95565b1633149081156118b8575b506126b1565b6006805460ff60a01b19169055005b9050600d54163314826118a3565b90346106bc5760803660031901126106bc5760443580151581036106bc5760209261052a916118f3611d61565b91602435903561249f565b346106bc5760203660031901126106bc5761192460018060a01b03600d54163314612407565b355f55005b90346106bc57806003193601126106bc5761052a60209260243590356122b2565b50346106bc575f3660031901126106bc576020905173d9b491ac0f5487673500b67224b67b4171a08aca8152f35b50346106bc575f3660031901126106bc5760209051737ed33f65a0398cb26eab2b03877825c96d9b60778152f35b50346106bc575f3660031901126106bc576020905173f808bb6265e9ca27002c0a04562bf50d4fe37eaa8152f35b50346106bc5760203660031901126106bc5760209061052a6119f4611d4b565b6120d2565b50346106bc575f3660031901126106bc5760065490516001600160a01b039091168152602090f35b50346106bc575f3660031901126106bc5760209061052a611fa3565b50346106bc575f3660031901126106bc5760209051733e79130ab714e97ee73f86a56a2427bb1a5198968152f35b90346106bc575f3660031901126106bc5760075461383f19420190428211611b2b571015611ae8575042600755611ae2670de0b6b3a76400009182611ab9611ab1612ab5565b600254611f28565b04908160035583611ad1611acb6129d2565b84611f28565b049055611adc6127bc565b90611f28565b04600555005b906020606492519162461bcd60e51b8352820152601960248201527f6d75737420776169742061746c65617374203420686f757273000000000000006044820152fd5b601184634e487b7160e01b5f525260245ffd5b50346106bc575f3660031901126106bc576020906003549051908152f35b50346106bc575f3660031901126106bc57602090610e91611e95565b50346106bc575f3660031901126106bc576020905173c0483f1b0dcf601888ffd0d3a44b7124e80db7d18152f35b906020806003193601126106bc57823592611bc3600354856122b2565b3403611ce7575f8080803460018060a01b03600654165af13d15611ce2573d67ffffffffffffffff8111611ccf57845190611c07601f8201601f1916860183611de8565b81525f843d92013e5b15611c835750815190611c2282611da4565b8382523481830152611c5773a1077a294dde1b09bb078844df40758a5d0f9a27928385820152335f5260088352845f20611e0a565b611c618433612c4e565b825193845283015234908201525f80516020612cac83398151915260603392a2005b915162461bcd60e51b815291820152602260248201527f5472616e7366657220746f2074617267657420636f6e7472616374206661696c604482015261195960f21b6064820152608490fd5b604183634e487b7160e01b5f525260245ffd5b611c10565b915162461bcd60e51b815291820181905260248201527f6d73672e76616c756520646966666572656e742066726f6d20616d6f756e74216044820152606490fd5b346106bc575f3660031901126106bc576001546001600160a01b03168152602090f35b600435906001600160a01b03821682036106bc57565b606435906001600160a01b03821682036106bc57565b8054821015611d90575f52600360205f20910201905f90565b634e487b7160e01b5f52603260045260245ffd5b6060810190811067ffffffffffffffff821117611dc057604052565b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff8111611dc057604052565b90601f8019910116810190811067ffffffffffffffff821117611dc057604052565b805468010000000000000000811015611dc057611e2c91600182018155611d77565b611e635760029082518155602083015160018201550190604060018060a01b03910151166001600160601b0360a01b825416179055565b634e487b7160e01b5f525f60045260245ffd5b908160209103126106bc57516001600160a01b03811681036106bc5790565b60405163030d028960e21b8152602081600481733e79130ab714e97ee73f86a56a2427bb1a5198965afa908115611efc575f91611ed0575090565b611ef2915060203d602011611ef5575b611eea8183611de8565b810190611e76565b90565b503d611ee0565b6040513d5f823e3d90fd5b91908203918211611f1457565b634e487b7160e01b5f52601160045260245ffd5b81810292918115918404141715611f1457565b8115611f45570490565b634e487b7160e01b5f52601260045260245ffd5b51906001600160701b03821682036106bc57565b908160609103126106bc57611f8181611f59565b916040611f9060208401611f59565b92015163ffffffff811681036106bc5790565b604051630240bc6b60e21b815273ef9ea3d72e28c7140481209190601c085027d6fe606082600481845afa908115611efc575f925f92612095575b50602060049160405192838092630dfe168160e01b82525afa8015611efc5773faac6a85c3e123ab2cf7669b1024f146cfef0b38915f91612076575b506001600160a01b03161490811561206f57825b6001600160701b0393841692156120675750915b670de0b6b3a764000091828102928184041490151715611f1457611ef2921690611f3b565b905091612042565b809261202e565b61208f915060203d602011611ef557611eea8183611de8565b5f61201a565b6020935060049192506120bf9060603d6060116120cb575b6120b78183611de8565b810190611f6d565b50939093929150611fde565b503d6120ad565b6040805163e6a4390560e01b81526001600160a01b039283166004820181905273a1077a294dde1b09bb078844df40758a5d0f9a27602483015291926020929183816044817329ea7545def87022badc76323f373ea1e707c5235afa90811561184e579082915f91612295575b5016938415612246578051630240bc6b60e21b815293606085600481895afa95861561223c575f955f9761220e575b509080600492845193848092630dfe168160e01b82525afa92831561220557505f926121e8575b5050161480156121e25781925b6001600160701b03928392156121db57505b1690670de0b6b3a764000091828102928184041490151715611f1457611ef2921690611f3b565b90506121b4565b826121a2565b6121fe9250803d10611ef557611eea8183611de8565b5f80612195565b513d5f823e3d90fd5b82965060049291975061222f9060603d6060116120cb576120b78183611de8565b509690969791925061216e565b82513d5f823e3d90fd5b5162461bcd60e51b815260048101849052602360248201527f496e70757420746f6b656e2f504c53207061697220646f6573206e6f742065786044820152621a5cdd60ea1b6064820152608490fd5b6122ac9150853d8711611ef557611eea8183611de8565b5f61213f565b90600a82106123fd57603282106123d9576064918281106123b95760fa8110612399576101f48110612379576103e881106123595761138881106123395761271081106123195761230291611f28565b604681029080820460461490151715611f14570490565b61232291611f28565b604b810290808204604b1490151715611f14570490565b61234291611f28565b605081029080820460501490151715611f14570490565b61236291611f28565b605581029080820460551490151715611f14570490565b61238291611f28565b605881029080820460581490151715611f14570490565b6123a291611f28565b605c810290808204605c1490151715611f14570490565b6123c291611f28565b605f810290808204605f1490151715611f14570490565b906123e391611f28565b606181029080820460611490151715611f14576064900490565b90611ef291611f28565b1561240e57565b60405162461bcd60e51b815260206004820152601760248201527f617574686f72697a65642061646472657373206f6e6c790000000000000000006044820152606490fd5b1561245a57565b60405162461bcd60e51b815260206004820152601960248201527f7075726368617365496420646f6573206e6f74206578697374000000000000006044820152606490fd5b9192335f526020600881526124cd6040946124be81875f205411612453565b335f5260088352855f20611d77565b5092835490818111612662576002916124ed6124f2926001880154611f28565b611f3b565b9301546001600160a01b039081169061250a82612703565b919094165f5260098352855f205496871561262757156125aa57505f52600a8152670de0b6b3a7640000938461254385835f2054611f28565b0483106125675750509161255d6064949261256394611f28565b04611f28565b0490565b60649250519062461bcd60e51b82526004820152601860248201527f4f494e4b2070726963652062656c6f77206d696e696d756d00000000000000006044820152fd5b92505f52600b8152670de0b6b3a764000093846125ca85835f2054611f28565b0483106125e45750509161255d6064949261256394611f28565b60649250519062461bcd60e51b82526004820152601960248201527f444547454e2070726963652062656c6f77206d696e696d756d000000000000006044820152fd5b865162461bcd60e51b8152600481018590526014602482015273125b9d985b1a59081a185c9d995cdd081c1bdbdb60621b6044820152606490fd5b855162461bcd60e51b815260048101849052602260248201527f747279696e6720746f206275726e206d6f7265207468616e20617661696c61626044820152616c6560f01b6064820152608490fd5b156126b857565b60405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606490fd5b908160209103126106bc575180151581036106bc5790565b6001600160a01b03811673a1077a294dde1b09bb078844df40758a5d0f9a27036127745750670de0b6b3a7640000905b61273b611fa3565b6127436128d2565b92670de0b6b3a7640000808302908382041483151715611f1457611ef29261276e836124ed93611f3b565b95611f28565b61277d906120d2565b90612733565b600460206001600160a01b03612797611e95565b1660405192838092634626402b60e01b82525afa908115611efc575f91611ed0575090565b604051630240bc6b60e21b815273f808bb6265e9ca27002c0a04562bf50d4fe37eaa90606081600481855afa918215611efc575f915f936128a5575b50602060049160405192838092630dfe168160e01b82525afa8015611efc57732fa878ab3f87cc1c9737fc071108f904c0b0c95d915f91612886575b506001600160a01b031603612874576001600160701b0380911691165b670de0b6b3a764000091828102928184041490151715611f1457611ef291611f3b565b6001600160701b039182169116612851565b61289f915060203d602011611ef557611eea8183611de8565b5f612834565b6004919350602092506128c69060603d6060116120cb576120b78183611de8565b509290929391506127f8565b600154604051630240bc6b60e21b81526001600160a01b039182169190606081600481865afa918215611efc575f915f936129a8575b506020600492939460405193848092630dfe168160e01b82525afa8015611efc5773faac6a85c3e123ab2cf7669b1024f146cfef0b38925f91612989575b50161480156121e25781926001600160701b03928392156121db57501690670de0b6b3a764000091828102928184041490151715611f1457611ef2921690611f3b565b6129a2915060203d602011611ef557611eea8183611de8565b5f612946565b60209350600492506129c89060603d6060116120cb576120b78183611de8565b5093909250612908565b604051630240bc6b60e21b8152731b45b9148791d3a104184cd5dfe5ce57193a3ee990606081600481855afa918215611efc575f915f93612a88575b50602060049160405192838092630dfe168160e01b82525afa8015611efc577395b303987a60c71504d99aa1b13b4da07b0790ab915f9161288657506001600160a01b031603612874576001600160701b038091169116670de0b6b3a764000091828102928184041490151715611f1457611ef291611f3b565b600491935060209250612aa99060603d6060116120cb576120b78183611de8565b50929092939150612a0e565b604051630240bc6b60e21b815273e56043671df55de5cdf8459710433c10324de0ae90606081600481855afa918215611efc575f915f93612c21575b50602060049160405192838092630dfe168160e01b82525afa8015611efc5773a1077a294dde1b09bb078844df40758a5d0f9a27915f91612c02575b506001600160a01b031614908115612bef576001600160701b038091169216905b821590811580612be6575b15612ba15715612b8257670de0b6b3a7640000808402938404141715611f1457611ef291611f3b565b50670de0b6b3a76400009180830292830403611f1457611ef291611f3b565b60405162461bcd60e51b815260206004820152601860248201527f496e76616c696420726573657276657320696e207061697200000000000000006044820152606490fd5b50821515612b59565b6001600160701b03928316921690612b4e565b612c1b915060203d602011611ef557611eea8183611de8565b5f612b2d565b600491935060209250612c429060603d6060116120cb576120b78183611de8565b50929092939150612af1565b600c546001600160a01b031691823b156106bc576040516340c10f1960e01b81526001600160a01b039290921660048301526024820152905f908290604490829084905af18015611efc57612ca05750565b612ca990611dd4565b56fe825cd3477914beb282afbaed01f025655798f9e6399cba7085f593f3855bd400a264697066735822122019c47e29d2759b43cbc6a5ed9900b1ed4ceec056defb2d6d0a5bc4fdc7cade1464736f6c63430008180033

Deployed ByteCode

0x608060409080825260049182361015610016575f80fd5b5f925f3560e01c9283630228bb3314611d2857508263038fc4fa14611ba657826305b8155c14611b785782630c340a2414611b5c5782630d39fc8114611b3e57826312c793d614611a6b57826313e492d714611a3d5782631a3f19e914611a215782631baca2d2146119f95782631f3e24e2146119d457826323af1a87146119a6578263296d77fb146119785782632a9f51d71461194a5782632dde7241146119295782633209e9e6146118fe57826332ae93ee146118c65782633df62f3714611874578263434eeae31461185857826346f88fc0146117185782634c2951bd146116ea5782634c2a1cff146116bc57826352f5ad7714611636578263573051f7146115b45782635ec232f1146115865782635f34148914610ea257826361d027b314610e7457826363dd9d7414610e455782636497931d14610d8057826369046cbc14610d595782637103ef0d14610d0b578263729c95a514610ca757826372f2b07c14610c8a57826373f937e414610c5b5782637d9a7a4c14610ba75782637f386b6c14610b8a57826382a38fa214610a485782638837737514610a195782638dde8213146109ea5782638fa10089146109cb57826390b08ce71461099c57826391b8e8a81461096457826391e32d0e14610947578263972ef8411461090f57826399d8fae3146108e05782639d8709b0146108b7578263b2922ec414610888578263c046371114610869578263c156e9cc1461083a578263c1610d191461081b578263c7c72cc4146107ec578263cf2c03341461077f578263cf8ff58f14610750578263d56d229d14610727578263da9a3064146106ef578263dacec9fa146106c0578263dd67b1081461057d578263dec5c24d14610560578263e4932abe14610531578263e4f0ab901461050d578263e95164f51461034c57508163f9f6a4a414610319575063fe64d6ff146102ce575f80fd5b34610316576020366003190112610316576102e7611d4b565b600d54906001600160a01b03906103013383851614612407565b16906001600160601b0360a01b1617600d5580f35b80fd5b9050346103485781600319360112610348576020905173a1077a294dde1b09bb078844df40758a5d0f9a278152f35b5080fd5b915034610509576020908160031936011261050557610369611d4b565b6001600160a01b03908161037b611e95565b1633036104b7571661038b612783565b82516370a0823160e01b81523086820152908482602481865afa9182156104ad57908592918892610476575b50845163a9059cbb60e01b81526001600160a01b0390911687820190815260208101929092529283918290899082906040015b03925af190811561046c57859161043f575b5015610406578380f35b5162461bcd60e51b8152918201526015602482015274115490cc8c081d1c985b9cd9995c8819985a5b1959605a1b604482015260649150fd5b61045f9150833d8511610465575b6104578183611de8565b8101906126eb565b5f6103fc565b503d61044d565b82513d87823e3d90fd5b8381949293503d83116104a6575b61048e8183611de8565b810103126104a257905184916103ea6103b7565b8680fd5b503d610484565b84513d89823e3d90fd5b50505162461bcd60e51b815291820152602260248201527f6f6e6c79207468727520646563656e7472616c697a656420476f7665726e616e604482015261636560f01b606482015260849150fd5b8380fd5b8280fd5b83823461034857816003193601126103485760209061052a612ab5565b9051908152f35b83823461034857816003193601126103485760209051732fa878ab3f87cc1c9737fc071108f904c0b0c95d8152f35b83823461034857816003193601126103485760209061052a6129d2565b91503461050957608036600319011261050957610598611d4b565b6001600160a01b039260243592909160443585811691908290036106bc57606435936105c987600d541633146126b1565b60ff60065460a01c161561067957851561063d5750916060939161062c865f80516020612cac833981519152979561062785519a6106068c611da4565b838c528760208d015285878d015282169a8b8d526008602052868d20611e0a565b612c4e565b81519384526020840152820152a280f35b606490602085519162461bcd60e51b8352820152601660248201527506d7573742062652067726561746572207468616e20360541b6044820152fd5b606490602085519162461bcd60e51b8352820152601e60248201527f63616e206e6f206c6f6e67657220616c6c6f6361746520746f6b656e732100006044820152fd5b5f80fd5b8382346103485781600319360112610348576020905173faac6a85c3e123ab2cf7669b1024f146cfef0b388152f35b8382346103485760203660031901126103485760209181906001600160a01b03610717611d4b565b168152600b845220549051908152f35b838234610348578160031936011261034857600c5490516001600160a01b039091168152602090f35b8382346103485781600319360112610348576020905173f3e82f4123d4262a2baec25b03652f3932a917398152f35b838234610348578060031936011261034857610799611d4b565b6001600160a01b03908116835260086020528183208054602435949293929085101561031657506060936107cc91611d77565b509081549260026001840154930154169181519384526020840152820152f35b83823461034857816003193601126103485760209051731b45b9148791d3a104184cd5dfe5ce57193a3ee98152f35b8382346103485781600319360112610348576020906005549051908152f35b8382346103485781600319360112610348576020905173e56043671df55de5cdf8459710433c10324de0ae8152f35b8382346103485781600319360112610348576020906007549051908152f35b83823461034857816003193601126103485760209051733d175c8359169b0e830d36ea9cd3fe209f46f7bd8152f35b838234610348578160031936011261034857600d5490516001600160a01b039091168152602090f35b838234610348578160031936011261034857602090517329ea7545def87022badc76323f373ea1e707c5238152f35b8382346103485760203660031901126103485760209181906001600160a01b03610937611d4b565b168152600a845220549051908152f35b83823461034857816003193601126103485760209061052a6128d2565b8382346103485760203660031901126103485760209181906001600160a01b0361098c611d4b565b1681526009845220549051908152f35b8382346103485781600319360112610348576020905173ef9ea3d72e28c7140481209190601c085027d6fe8152f35b8382346103485781600319360112610348576020906002549051908152f35b838234610348578160031936011261034857602090517315b51ece819f3b51ce814de67bb2419660701a3c8152f35b838234610348578160031936011261034857602090517339b3e852d6ffa1af6694ef87c062450de6778da88152f35b915034610509576020908160031936011261050557823592610a6c600554856122b2565b60065483516323b872dd60e01b8152338482019081526001600160a01b039092166020830152604082018390529194919290839060600103928281732fa878ab3f87cc1c9737fc071108f904c0b0c95d95818b885af1908115610b80578891610b63575b5015610b2c5750610b018351610ae581611da4565b8681528583820152838582015233885260088352848820611e0a565b610b0b8533612c4e565b82519485528401528201525f80516020612cac83398151915260603392a280f35b60649184519162461bcd60e51b83528201526013602482015272125390c81d1c985b9cd9995c8819985a5b1959606a1b6044820152fd5b610b7a9150833d8511610465576104578183611de8565b5f610ad0565b85513d8a823e3d90fd5b838234610348578160031936011261034857602091549051908152f35b91503461050957602036600319011261050957600d54336001600160a01b039182161490610bde9082908115610c48575b50612407565b60ff60065460a01c16159081610c40575b50610bfc57503560025580f35b5162461bcd60e51b815291508190610c3c9082016060906020815260116020820152701b9bc81b1bdb99d95c88185b1b1bddd959607a1b60408201520190565b0390fd5b90505f610bef565b9050610c52611e95565b1633145f610bd8565b83823461034857816003193601126103485760209051739013b1067c52e897e713044de36c56bfda8ec9b48152f35b83823461034857816003193601126103485760209061052a6127bc565b838234610348578060031936011261034857610cc1611d4b565b600d546001600160a01b039190821633148015610cf4575b610ce290612407565b16825260096020526024359082205580f35b50610ce282610d01611e95565b1633149050610cd9565b833461031657602036600319011261031657610d25611d4b565b6001600160a01b0390610d4282610d3a611e95565b163314612407565b166001600160601b0360a01b600654161760065580f35b83823461034857816003193601126103485760209060ff60065460a01c1690519015158152f35b90915034610509578160031936011261050957610d9b611d4b565b600d546001600160a01b03929083163314808015610e2e575b610dbd90612407565b60ff60065460a01c16159081610e26575b50610de65750168252600b6020526024359082205580f35b835162461bcd60e51b8152908190610c3c9082016060906020815260116020820152701b9bc81b1bdb99d95c88185b1b1bddd959607a1b60408201520190565b90505f610dce565b50610dbd84610e3b611e95565b1633149050610db4565b838234610348578160031936011261034857602090517395b303987a60c71504d99aa1b13b4da07b0790ab8152f35b838234610348578160031936011261034857602090610e91612783565b90516001600160a01b039091168152f35b8390346106bc5760803660031901126106bc5780359260249182359081151582036106bc576044918235610ed4611d61565b335f52600892602093808552610eee8b895f205411612453565b335f52808552610f008b895f20611d77565b509384549b8c82116115355760028601546001600160a01b039081169d9096908381036114f857506001015492335f528088528a5f2054915f19928381019081116114e6578c81830361146b575b505050335f528752895f209081548015611459570190610f6e8282611d77565b611448576002815f8093558260018201550155555b84600c5416803b156106bc578951632770a7eb60e21b815233818a019081526020810193909352915f91839182908490829060400103925af1801561143e5761142b575b508790610fd38c612703565b9c808d52600a88528c610ff384670de0b6b3a76400009687932054611f28565b0482106113e85761100f838c8f87948152600b8c522054611f28565b048d106113a65790826110258261102c94611f28565b049c611f28565b04901561120e575016907339b3e852d6ffa1af6694ef87c062450de6778da882036110c45761106987986009606493858b52528689205490611f28565b0491813b156104a2578660649262278d0082968851998a97889663859f267f60e01b885287015233908601528401525af19081156110bb57506110ab57505080f35b6110b490611dd4565b6103165780f35b513d84823e3d90fd5b739013b1067c52e897e713044de36c56bfda8ec9b482036110f75761106987986009606493858b52528689205490611f28565b73b180450f064e79adbfd71bc2fb086f9cd0af0d67820361112a5761106987986009606493858b52528689205490611f28565b73c0483f1b0dcf601888ffd0d3a44b7124e80db7d1820361115d5761106987986009606493858b52528689205490611f28565b7315b51ece819f3b51ce814de67bb2419660701a3c82036111905761106987986009606493858b52528689205490611f28565b73f3e82f4123d4262a2baec25b03652f3932a9173982036111c35761106987986009606493858b52528689205490611f28565b845162461bcd60e51b81526020818501818152601c918101919091527f496e76616c6964206861727665737420706f6f6c206164647265737300000000604082015281906060010390fd5b9850169073d9b491ac0f5487673500b67224b67b4171a08aca82036112455761106987986009606493858b52528689205490611f28565b737ed33f65a0398cb26eab2b03877825c96d9b607782036112ba5761127887986009606493858b52528689205490611f28565b0491813b156104a257866064926276a70082968851998a97889663859f267f60e01b885287015233908601528401525af19081156110bb57506110ab57505080f35b733d175c8359169b0e830d36ea9cd3fe209f46f7bd8203611330576112ed87986009606493858b52528689205490611f28565b0491813b156104a257866064926301e1338082968851998a97889663859f267f60e01b885287015233908601528401525af19081156110bb57506110ab57505080f35b73de672fcca32365bd704c39bd1164a0d34a3a73e682036111c35761136387986009606493858b52528689205490611f28565b0491813b156104a257866064926312cc030082968851998a97889663859f267f60e01b885287015233908601528401525af19081156110bb57506110ab57505080f35b50885162461bcd60e51b8152808801879052601f818c01527f444547454e2070726963652062656c6f77206d696e696d756d20726174696f00818a0152606490fd5b5050885162461bcd60e51b8152808801879052601e818c01527f4f494e4b2070726963652062656c6f77206d696e696d756d20726174696f0000818a0152606490fd5b611436919a50611dd4565b5f9887610fc7565b89513d5f823e3d90fd5b8c5f8b634e487b7160e01b8252525ffd5b8c60318b634e487b7160e01b5f52525ffd5b6114909161148091335f52858d525f20611d77565b5091335f52838b528d5f20611d77565b6114d55780828a92036114a5575b508c610f4e565b60028091845481556001850154600182015501920154166001600160601b0360a01b8254161790558e878161149e565b8d5f8c634e487b7160e01b8252525ffd5b8d60118c634e487b7160e01b5f52525ffd5b839450819250600161152e92019283549061152761151f8761151a8686611f3b565b611f28565b978894611f07565b9055611f07565b9055610f83565b50885162461bcd60e51b81528088018790526026818c01527f747279696e6720746f206275726e206d6f7265207468616e207768617420796f818a01526575206861766560d01b6064820152608490fd5b50346106bc575f3660031901126106bc576020905173de672fcca32365bd704c39bd1164a0d34a3a73e68152f35b346106bc57816003193601126106bc576115cc611d4b565b600d546001600160a01b0392908316331480801561161f575b6115ee90612407565b60ff60065460a01c16159081611617575b50610de65750165f908152600a602052206024359055005b9050856115ff565b506115ee8461162c611e95565b16331490506115e5565b346106bc5760203660031901126106bc5761164f611d4b565b600d546001600160a01b0392906116699084163314612407565b600c549383851661168a5750506001600160a01b0319909216911617600c55005b906020606492519162461bcd60e51b8352820152600c60248201526b616c7265616479207365742160a01b6044820152fd5b50346106bc5760203660031901126106bc576116de6116d9611d4b565b612703565b82519182526020820152f35b50346106bc575f3660031901126106bc576020905173b180450f064e79adbfd71bc2fb086f9cd0af0d678152f35b90346106bc57602090816003193601126106bc5782359261173a8154856122b2565b60065483516323b872dd60e01b8152338482019081526001600160a01b0390921660208301526040820183905291949192908390606001039282817395b303987a60c71504d99aa1b13b4da07b0790ab95815f885af190811561184e575f91611831575b50156117f957506117cf83516117b381611da4565b86815285838201528385820152335f5260088352845f20611e0a565b6117d98533612c4e565b82519485528401528201525f80516020612cac83398151915260603392a2005b60649184519162461bcd60e51b83528201526014602482015273141314d6081d1c985b9cd9995c8819985a5b195960621b6044820152fd5b6118489150833d8511610465576104578183611de8565b8761179e565b85513d5f823e3d90fd5b90346106bc575f3660031901126106bc57602091549051908152f35b346106bc575f3660031901126106bc576118a96001600160a01b0380611898611e95565b1633149081156118b8575b506126b1565b6006805460ff60a01b19169055005b9050600d54163314826118a3565b90346106bc5760803660031901126106bc5760443580151581036106bc5760209261052a916118f3611d61565b91602435903561249f565b346106bc5760203660031901126106bc5761192460018060a01b03600d54163314612407565b355f55005b90346106bc57806003193601126106bc5761052a60209260243590356122b2565b50346106bc575f3660031901126106bc576020905173d9b491ac0f5487673500b67224b67b4171a08aca8152f35b50346106bc575f3660031901126106bc5760209051737ed33f65a0398cb26eab2b03877825c96d9b60778152f35b50346106bc575f3660031901126106bc576020905173f808bb6265e9ca27002c0a04562bf50d4fe37eaa8152f35b50346106bc5760203660031901126106bc5760209061052a6119f4611d4b565b6120d2565b50346106bc575f3660031901126106bc5760065490516001600160a01b039091168152602090f35b50346106bc575f3660031901126106bc5760209061052a611fa3565b50346106bc575f3660031901126106bc5760209051733e79130ab714e97ee73f86a56a2427bb1a5198968152f35b90346106bc575f3660031901126106bc5760075461383f19420190428211611b2b571015611ae8575042600755611ae2670de0b6b3a76400009182611ab9611ab1612ab5565b600254611f28565b04908160035583611ad1611acb6129d2565b84611f28565b049055611adc6127bc565b90611f28565b04600555005b906020606492519162461bcd60e51b8352820152601960248201527f6d75737420776169742061746c65617374203420686f757273000000000000006044820152fd5b601184634e487b7160e01b5f525260245ffd5b50346106bc575f3660031901126106bc576020906003549051908152f35b50346106bc575f3660031901126106bc57602090610e91611e95565b50346106bc575f3660031901126106bc576020905173c0483f1b0dcf601888ffd0d3a44b7124e80db7d18152f35b906020806003193601126106bc57823592611bc3600354856122b2565b3403611ce7575f8080803460018060a01b03600654165af13d15611ce2573d67ffffffffffffffff8111611ccf57845190611c07601f8201601f1916860183611de8565b81525f843d92013e5b15611c835750815190611c2282611da4565b8382523481830152611c5773a1077a294dde1b09bb078844df40758a5d0f9a27928385820152335f5260088352845f20611e0a565b611c618433612c4e565b825193845283015234908201525f80516020612cac83398151915260603392a2005b915162461bcd60e51b815291820152602260248201527f5472616e7366657220746f2074617267657420636f6e7472616374206661696c604482015261195960f21b6064820152608490fd5b604183634e487b7160e01b5f525260245ffd5b611c10565b915162461bcd60e51b815291820181905260248201527f6d73672e76616c756520646966666572656e742066726f6d20616d6f756e74216044820152606490fd5b346106bc575f3660031901126106bc576001546001600160a01b03168152602090f35b600435906001600160a01b03821682036106bc57565b606435906001600160a01b03821682036106bc57565b8054821015611d90575f52600360205f20910201905f90565b634e487b7160e01b5f52603260045260245ffd5b6060810190811067ffffffffffffffff821117611dc057604052565b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff8111611dc057604052565b90601f8019910116810190811067ffffffffffffffff821117611dc057604052565b805468010000000000000000811015611dc057611e2c91600182018155611d77565b611e635760029082518155602083015160018201550190604060018060a01b03910151166001600160601b0360a01b825416179055565b634e487b7160e01b5f525f60045260245ffd5b908160209103126106bc57516001600160a01b03811681036106bc5790565b60405163030d028960e21b8152602081600481733e79130ab714e97ee73f86a56a2427bb1a5198965afa908115611efc575f91611ed0575090565b611ef2915060203d602011611ef5575b611eea8183611de8565b810190611e76565b90565b503d611ee0565b6040513d5f823e3d90fd5b91908203918211611f1457565b634e487b7160e01b5f52601160045260245ffd5b81810292918115918404141715611f1457565b8115611f45570490565b634e487b7160e01b5f52601260045260245ffd5b51906001600160701b03821682036106bc57565b908160609103126106bc57611f8181611f59565b916040611f9060208401611f59565b92015163ffffffff811681036106bc5790565b604051630240bc6b60e21b815273ef9ea3d72e28c7140481209190601c085027d6fe606082600481845afa908115611efc575f925f92612095575b50602060049160405192838092630dfe168160e01b82525afa8015611efc5773faac6a85c3e123ab2cf7669b1024f146cfef0b38915f91612076575b506001600160a01b03161490811561206f57825b6001600160701b0393841692156120675750915b670de0b6b3a764000091828102928184041490151715611f1457611ef2921690611f3b565b905091612042565b809261202e565b61208f915060203d602011611ef557611eea8183611de8565b5f61201a565b6020935060049192506120bf9060603d6060116120cb575b6120b78183611de8565b810190611f6d565b50939093929150611fde565b503d6120ad565b6040805163e6a4390560e01b81526001600160a01b039283166004820181905273a1077a294dde1b09bb078844df40758a5d0f9a27602483015291926020929183816044817329ea7545def87022badc76323f373ea1e707c5235afa90811561184e579082915f91612295575b5016938415612246578051630240bc6b60e21b815293606085600481895afa95861561223c575f955f9761220e575b509080600492845193848092630dfe168160e01b82525afa92831561220557505f926121e8575b5050161480156121e25781925b6001600160701b03928392156121db57505b1690670de0b6b3a764000091828102928184041490151715611f1457611ef2921690611f3b565b90506121b4565b826121a2565b6121fe9250803d10611ef557611eea8183611de8565b5f80612195565b513d5f823e3d90fd5b82965060049291975061222f9060603d6060116120cb576120b78183611de8565b509690969791925061216e565b82513d5f823e3d90fd5b5162461bcd60e51b815260048101849052602360248201527f496e70757420746f6b656e2f504c53207061697220646f6573206e6f742065786044820152621a5cdd60ea1b6064820152608490fd5b6122ac9150853d8711611ef557611eea8183611de8565b5f61213f565b90600a82106123fd57603282106123d9576064918281106123b95760fa8110612399576101f48110612379576103e881106123595761138881106123395761271081106123195761230291611f28565b604681029080820460461490151715611f14570490565b61232291611f28565b604b810290808204604b1490151715611f14570490565b61234291611f28565b605081029080820460501490151715611f14570490565b61236291611f28565b605581029080820460551490151715611f14570490565b61238291611f28565b605881029080820460581490151715611f14570490565b6123a291611f28565b605c810290808204605c1490151715611f14570490565b6123c291611f28565b605f810290808204605f1490151715611f14570490565b906123e391611f28565b606181029080820460611490151715611f14576064900490565b90611ef291611f28565b1561240e57565b60405162461bcd60e51b815260206004820152601760248201527f617574686f72697a65642061646472657373206f6e6c790000000000000000006044820152606490fd5b1561245a57565b60405162461bcd60e51b815260206004820152601960248201527f7075726368617365496420646f6573206e6f74206578697374000000000000006044820152606490fd5b9192335f526020600881526124cd6040946124be81875f205411612453565b335f5260088352855f20611d77565b5092835490818111612662576002916124ed6124f2926001880154611f28565b611f3b565b9301546001600160a01b039081169061250a82612703565b919094165f5260098352855f205496871561262757156125aa57505f52600a8152670de0b6b3a7640000938461254385835f2054611f28565b0483106125675750509161255d6064949261256394611f28565b04611f28565b0490565b60649250519062461bcd60e51b82526004820152601860248201527f4f494e4b2070726963652062656c6f77206d696e696d756d00000000000000006044820152fd5b92505f52600b8152670de0b6b3a764000093846125ca85835f2054611f28565b0483106125e45750509161255d6064949261256394611f28565b60649250519062461bcd60e51b82526004820152601960248201527f444547454e2070726963652062656c6f77206d696e696d756d000000000000006044820152fd5b865162461bcd60e51b8152600481018590526014602482015273125b9d985b1a59081a185c9d995cdd081c1bdbdb60621b6044820152606490fd5b855162461bcd60e51b815260048101849052602260248201527f747279696e6720746f206275726e206d6f7265207468616e20617661696c61626044820152616c6560f01b6064820152608490fd5b156126b857565b60405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606490fd5b908160209103126106bc575180151581036106bc5790565b6001600160a01b03811673a1077a294dde1b09bb078844df40758a5d0f9a27036127745750670de0b6b3a7640000905b61273b611fa3565b6127436128d2565b92670de0b6b3a7640000808302908382041483151715611f1457611ef29261276e836124ed93611f3b565b95611f28565b61277d906120d2565b90612733565b600460206001600160a01b03612797611e95565b1660405192838092634626402b60e01b82525afa908115611efc575f91611ed0575090565b604051630240bc6b60e21b815273f808bb6265e9ca27002c0a04562bf50d4fe37eaa90606081600481855afa918215611efc575f915f936128a5575b50602060049160405192838092630dfe168160e01b82525afa8015611efc57732fa878ab3f87cc1c9737fc071108f904c0b0c95d915f91612886575b506001600160a01b031603612874576001600160701b0380911691165b670de0b6b3a764000091828102928184041490151715611f1457611ef291611f3b565b6001600160701b039182169116612851565b61289f915060203d602011611ef557611eea8183611de8565b5f612834565b6004919350602092506128c69060603d6060116120cb576120b78183611de8565b509290929391506127f8565b600154604051630240bc6b60e21b81526001600160a01b039182169190606081600481865afa918215611efc575f915f936129a8575b506020600492939460405193848092630dfe168160e01b82525afa8015611efc5773faac6a85c3e123ab2cf7669b1024f146cfef0b38925f91612989575b50161480156121e25781926001600160701b03928392156121db57501690670de0b6b3a764000091828102928184041490151715611f1457611ef2921690611f3b565b6129a2915060203d602011611ef557611eea8183611de8565b5f612946565b60209350600492506129c89060603d6060116120cb576120b78183611de8565b5093909250612908565b604051630240bc6b60e21b8152731b45b9148791d3a104184cd5dfe5ce57193a3ee990606081600481855afa918215611efc575f915f93612a88575b50602060049160405192838092630dfe168160e01b82525afa8015611efc577395b303987a60c71504d99aa1b13b4da07b0790ab915f9161288657506001600160a01b031603612874576001600160701b038091169116670de0b6b3a764000091828102928184041490151715611f1457611ef291611f3b565b600491935060209250612aa99060603d6060116120cb576120b78183611de8565b50929092939150612a0e565b604051630240bc6b60e21b815273e56043671df55de5cdf8459710433c10324de0ae90606081600481855afa918215611efc575f915f93612c21575b50602060049160405192838092630dfe168160e01b82525afa8015611efc5773a1077a294dde1b09bb078844df40758a5d0f9a27915f91612c02575b506001600160a01b031614908115612bef576001600160701b038091169216905b821590811580612be6575b15612ba15715612b8257670de0b6b3a7640000808402938404141715611f1457611ef291611f3b565b50670de0b6b3a76400009180830292830403611f1457611ef291611f3b565b60405162461bcd60e51b815260206004820152601860248201527f496e76616c696420726573657276657320696e207061697200000000000000006044820152606490fd5b50821515612b59565b6001600160701b03928316921690612b4e565b612c1b915060203d602011611ef557611eea8183611de8565b5f612b2d565b600491935060209250612c429060603d6060116120cb576120b78183611de8565b50929092939150612af1565b600c546001600160a01b031691823b156106bc576040516340c10f1960e01b81526001600160a01b039290921660048301526024820152905f908290604490829084905af18015611efc57612ca05750565b612ca990611dd4565b56fe825cd3477914beb282afbaed01f025655798f9e6399cba7085f593f3855bd400a264697066735822122019c47e29d2759b43cbc6a5ed9900b1ed4ceec056defb2d6d0a5bc4fdc7cade1464736f6c63430008180033