EthOS

Description:

Multi-signature wallet contract requiring multiple confirmations for transaction execution.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "src/EthOs.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
                                                                                                                                               
/*

☞ https://ethos.vision
???? https://x.com/Ethereum_OS
✌︎ https://t.me/ethosportal

Welcome to the Ethereum Operating System — the first-of-its-kind revenue generating DeFi pumpware
built as a social DeFi sandbox that is filled with composable elements so you can create, trade,
communicate, and participate—all in one place.


                                                      @                               
                                                     @@:                              
                                                    @@@::                             
                                                  ==@@@::::                           
                                                 ===@@@:::::                          
                                                ===+@@+::::::                         
                                               ====@@@::::::::                        
                                              =====@@@:::::::::                       
                                             ======@@@::::::::::                      
                                            =======@@@:::::::::::                     
                                           =======*@@+::::::::::::                    
                                          ========@@@::::::::::::::                   
                                        ==========@@@::::::::::::::::                 
                                       ===========@@@:::::::::::::::::                
                                      ============@@@::::::::::::::::::               
                                     ============*@@=:::::::::::::::::::              
                                    =============@@@:::::::::::::::::::::             
                                   =====@@@======@@@::::::::@@@:::::::::::            
                                  ======@@@======@@@::::::::@@@::::::::::::           
                                 =======@@@======@@@::::::::@@@:::::::::::::          
                                =================@@=:::::::::::::::::::::::::         
                              ==================%@@::::::::::::::::::::::::::::       
                             ===================@@@:::::::::::::::::::::::::::::      
                            ====================@@@::::::::::::::::::::::::::::::     
                           =====================@@@:::::::::::::::::::::::::::::::    
                          =====================+@@-::::::::::::::::::::::::::::::::   
                         ======================@@@@@@@@@@@@@@*::::::::::::::::::::::  
                        =======================@@@@@@@@@@@@@@:::::::::::::::::::::::: 
                       ===================================@@@:::::::::::::::::::::::::
                         =================================@@@:::::::::::::::::::::::  
                          =========@@@@===================@@@::::::::@@@*::::::::::   
                           =========@@@@@@@==============*@@:::::%@@@@@:::::::::::    
                             ===========@@@@@@@@@@@#*+=+*@@@@@@@@@@@-:::::::::::      
                              ==============+@@@@@@@@@@@@@@@@@@@:::::::::::::::       
                               ==========================@@@::::::::::::::::::        
                                 ========================@@@::::::::::::::::          
                                  ======================@@@::::::::::::::::           
                                   =====================@@@:::::::::::::::            
                                     ===================@@@:::::::::::::              
                                      ==================@@@::::::::::::               
                                       ================*@@=:::::::::::                
                                         ==============@@@::::::::::                  
                                          =============@@@:::::::::                   
                                           ============@@@::::::::                    
                                             ==========@@#::::::                      
                                              ========@@@::::::                       
                                               =======@@@:::::                        
                                                 =====@@@:::                          
                                                  ====@@@::                           
                                                   ==*@@-:                            
                                                    =@@@:                             
                                                      @                 
                                                

                        
                                         @@@                                                                 
 @@@@@@@@@@@@@@@@@@@                 @@@@@@@                            =======                   ========   
  @@@@@@@@@@@@@@@@@@                   @@@@@                         ====     =====            =====   ===== 
    @@@@@         @@                   @@@@                       =====          ====         ====       === 
    @@@@@          @                   @@@@                      ====             =====      ====         ===
    @@@@@                              @@@@                     ====               =====     ====          ==
    @@@@@                  @@          @@@@                    =====               =====     =====           
    @@@@@       @        @@@@          @@@@      @             =====                =====    =======         
    @@@@@       @@     @@@@@@@@@@@@    @@@@  @@@@@@@@         =====                 =====     =========      
    @@@@@@@@@@@@@        @@@@          @@@@@@    @@@@@        =====                 =====       =========    
    @@@@@      @@        @@@@          @@@@@      @@@@@       =====                 =====         =========  
    @@@@@       @@       @@@@          @@@@        @@@@       =====                 =====           ======== 
    @@@@@                @@@@          @@@@        @@@@       ======                =====              ======
    @@@@@                @@@@          @@@@        @@@@        =====               =====                =====
    @@@@@                @@@@          @@@@        @@@@         =====              =====    ==          =====
    @@@@@           @@   @@@@          @@@@        @@@@          ====             =====     ===         =====
    @@@@@          @@@   @@@@@         @@@@        @@@@           =====          ====       ====        ==== 
   @@@@@@@@@@@@@@@@@@    @@@@@@@@@@   @@@@@@      @@@@@@            =====      ====          =====    =====  
@@@@@@@@@@@@@@@@@@@@       @@@@@@    @@@@@@@@@  @@@@@@@@@              ==========              =========     

   
*/ 

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "./math/SafeMathUint.sol";
import "./math/SafeMathInt.sol";
import "interfaces/IUniswapV2Router02.sol";
import "interfaces/IUniswapV2Factory.sol";
import "../interfaces/ITokenSettings.sol";
import "../interfaces/IBooster.sol";
import "../interfaces/IEOS20.sol";
import "./Deployer.sol";

interface ILock {
    function isFunded(address _token) external view returns (bool);
    function isLpLocked(address _token) external view returns (bool);
    function isSettingsLocked(address _token) external view returns (bool);
    function devDeadline(address _token) external view returns(uint256);
    function settingLockTime(address _token) external view returns(uint256);
    function prolongDeadLine(address _token, uint256 _devDeadline) external;
}
interface IInfo {
    function setDescription(address _token, string calldata _description) external;
    function setWebsite(address _token, string calldata _website) external;
    function setImage(address _token, string calldata _image) external;
    function setChat(address _token, string calldata _chat) external;
    function setSocials(address _token, string calldata _socials) external;
}

/// @title Ethereum Operating System
/// @author ethjobs
/// @notice Ethereum Operating System - The first-of-its-kind revenue generating DeFi pumpware built as a social DeFi sandbox that is filled with composable elements so you can create, trade, communicate, and participate—all in one place.
/// @dev Public/external functions include NatSpec so they render on Etherscan's Read/Write tabs.
contract EthOS is ITokenSettings, Ownable, Pausable, ReentrancyGuard {
  // Libraries
    using SafeMath for uint256;
    using SafeMath for uint112;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
  // Contracts
    IUniswapV2Router02 public uniswapV2Router;
    Deployer public deployer;
    IEOS20 newToken;  
    IEOS20 token;
    IBOOSTER public booster;
    IEOS20 public mainToken;
    IInfo public infoService;
    ILock public lock;
  // States
    bool public canCreate = false;
    uint256 public tokenCount;           
    address public projectWallet = payable(0xcca0905Da6f5c2060e07e66A49E45B061Fe379E1);
    uint public ecoFriendlyFeePercent = 10;
    uint public ecoFeePercent = 10; // 1% (10/1000)
    uint public projectClaimFee = 33;
    uint public eosPortionDivider = 3;
    bool public ecoFeeOn = true;
    uint public initialLiquidityPercent = 50;
    bool public isCustomRefelctionsPercentPublic = false;
    bool public isBoostApyOn = true;
    // Mechanics
    uint public minEthToCreate = 0;
    uint public minLockTime = 24 hours;
    uint public maxLockTime = 1200 hours;
    uint public minDeathTime = 24 hours;   
    uint public maxDevSupplyPercent = 5;
    uint public maxReflectionPercent = 150;
    uint public maxDevFeePercent = 30;
    uint public maxDailyPumpRate = 100;
    uint public maxBurnPercentage = 15; 
    uint public maxApy = 10000;
    uint public minCooldown = 1 hours;
    uint public maxCooldown = 1000 hours;

    uint public lpAccuracy = 90;
    uint public minBuyBase = 1_000e18;
    uint public antiBotTime = 420; // 7 minutes

    // Volume 
    uint256 public minReflectionSwapPercent = 1; // 0.01% of pair balance
    uint256 public maxReflectionSwapPercent = 100; // 1% of pair balance
    uint256 public maxMinBuyPairPercent = 200; // 2% of pair balance
     
  // Mappings
    //Mchanics
    mapping(uint256 => address) public tokenNumber;
    mapping(address => bool) public eosDeployed;
    mapping(address => uint256) public initialLiquidity;
    mapping(address => uint256) public initialTokensLp;
    mapping(address => bool) public ecoFriendly;
    mapping(address => bool) public hasWithdrawLiquidity;
    mapping(address => bool) public isWhitelistedRouter;
    mapping(address => uint256) public minBuyPercent; 
    mapping(address => uint256) public minBuyAmount;
    mapping(address => bool) public isFunded;
    mapping (address => bool) public isAuthorized;
    mapping(address => uint256) public userLaunchedTokensCount; // user => tokenId => tokenAddress
    mapping(address => mapping(uint256 => address)) public userLaunchedTokens; // user => tokenId => tokenAddress
    mapping(address => uint256) public minReflectionsSwapPercentCustom;
    mapping(address => uint256) public maxReflectionsSwapPercentCustom;
  // Events
    event TokenCreated(address tokenAddress, string name, string symbol);
  // Modifiers
    modifier lockTheFee() {
        bool originalEcoFeeOn = ecoFeeOn;
        ecoFeeOn = false;
        _;
        ecoFeeOn = originalEcoFeeOn;
    }  
  // View
    function isBooster(address _token) public view returns (bool) {
        return _token == address(booster);
    }
    function viewTokensList() public view returns (address[] memory) {
        address[] memory tokens = new address[](tokenCount);
        for (uint256 i = 1; i <= tokenCount; i++) {
            tokens[i - 1] = tokenNumber[i];
        }
        return tokens;
    }
  // Create
    function createOrigin(TokenSettings memory settings, bytes32 salt) external onlyOwner nonReentrant whenNotPaused returns (address) {
        IEOS20 newToken = deploy(settings, salt);
        initialize(newToken, settings);
        initialTokensLp[address(newToken)] = 10_000_000e18;
        setMechanicsAndTransferDevTokens(newToken, settings);
        setInfo(newToken, settings);
        finalizeOrigin(newToken, settings);
        return address(newToken);
    }
    function finalizeOrigin(IEOS20 newToken, TokenSettings memory settings) private {
        newToken.transferOwnershipOfTheToken(msg.sender);
        tokenCount++;
        tokenNumber[tokenCount] = address(newToken);
        eosDeployed[address(newToken)] = true;
        emit TokenCreated(address(newToken), settings.name, settings.symbol);
    }
    function createNewToken(TokenSettings memory settings, bytes32 salt) external payable nonReentrant whenNotPaused returns (address) {
        require(msg.value >= minEthToCreate, "Eth value should be greater or equal to minimum");
        require(canCreate, "Creating is disabled");
        IEOS20 newToken = deploy(settings, salt);
        initialize(newToken, settings);
        addLiquidity(newToken, settings);
        setMechanicsAndTransferDevTokens(newToken, settings);
        setInfo(newToken, settings);
        finalize(newToken, settings);
        return address(newToken);
    }
  // internal
    function deploy(TokenSettings memory settings, bytes32 salt) private returns (IEOS20){
        IEOS20 newToken = IEOS20(deployer.createTokenViaInterface(settings.name, settings.symbol, address(this), salt));
        return newToken;
    }
    function initialize(IEOS20 newToken,TokenSettings memory settings) private {
        require(settings.router != address(0), "Invalid owner address");
        require(settings.devDeadline >= minLockTime && settings.devDeadline <= maxLockTime, "Invalid dev deadline");
        require(isWhitelistedRouter[settings.router], "Router not whitelisted");
        providePair(newToken, settings.router);
        newToken.initializeToken(msg.sender, settings.router, address(this), settings.devDeadline);
        lock.prolongDeadLine(address(newToken), settings.devDeadline);
    }
    function providePair(IEOS20 newToken, address router) private {
        address pair = IUniswapV2Factory(IUniswapV2Router02(router).factory()).getPair(address(newToken), IUniswapV2Router02(router).WETH());
        if (pair == address(0)) {
            IUniswapV2Factory(IUniswapV2Router02(router).factory()).createPair(address(newToken), IUniswapV2Router02(router).WETH());
        }
    }
    function addLiquidity(IEOS20 newToken, TokenSettings memory settings) private lockTheFee{
        require(settings.devSupply <= maxDevSupplyPercent, "Dev supply should be less or equal to 25% of total supply.");
        uint256 devTokens = newToken.totalSupply() * settings.devSupply / 100;
        newToken.approve(settings.router, type(uint256).max);
        IUniswapV2Router02(settings.router).addLiquidityETH{value: msg.value}(
            address(newToken), newToken.totalSupply() - devTokens, 0, 0, address(this), block.timestamp
        );
        initialLiquidity[address(newToken)] = msg.value;
        initialTokensLp[address(newToken)] = newToken.totalSupply() - devTokens;
        newToken.setMaxWallet(settings.antiBot, settings.maxWallet);
    }
    function setMechanicsAndTransferDevTokens(IEOS20 newToken, TokenSettings memory settings) private {
        newToken.setSpecs(
            settings.devFee,
            settings.maxDailyPumpRate,
            settings.reflectionsPercent,
            settings.liquidityPercent,
            settings.reaperDeathTime,
            settings.cooldown,
            settings.winAmountPercent,
            settings.apy,
            settings.burnPercentBuy, 
            settings.burnPercentSell
        );
        newToken.toggleYield(true);
        if(settings.devSupply > 0){
        newToken.transfer(msg.sender, newToken.balanceOf(address(this)));
        }
        newToken.setMaxWallet(settings.antiBot, settings.maxWallet);
    }
    function setInfo(IEOS20 newToken, TokenSettings memory settings) private {
        infoService.setDescription(address(newToken), settings.description);
        infoService.setWebsite(address(newToken), settings.website);
        infoService.setImage(address(newToken), settings.image);
        infoService.setChat(address(newToken), settings.chat);
        infoService.setSocials(address(newToken), settings.socials);

        // Description[address(newToken)] = settings.description;
        // Website[address(newToken)] = settings.website;
        // Image[address(newToken)] = settings.image;
        // Chat[address(newToken)] = settings.chat;
        // Socials[address(newToken)] = settings.socials;
    }
    function finalize(IEOS20 newToken, TokenSettings memory settings) private {
        newToken.openTrading(true);
        newToken.transferOwnershipOfTheToken(msg.sender);
        tokenCount++;
        tokenNumber[tokenCount] = address(newToken);
        eosDeployed[address(newToken)] = true;
        
        userLaunchedTokens[msg.sender][userLaunchedTokensCount[msg.sender]] = address(newToken);
        userLaunchedTokensCount[msg.sender]++;

        emit TokenCreated(address(newToken), settings.name, settings.symbol);
    }
  // EOS20 off-contract calculation view functions
    function checkRequirements(
        uint256 _devFeePercent,
        uint256 _maxDailyPumpRate,
        uint256 _reflectionsPercent,
        uint256 _liquidityPercent,
        uint256 _reaperDeathTime,
        uint256 _cooldown,
        uint256 _winAmountPercent,
        uint256 _apy,
        uint256 _burnPercentageBuy,
        uint256 _burnPercentageSell,
        address _token
    ) public view returns (bool) {
        require(
        (!lock.isSettingsLocked(_token) && block.timestamp > lock.settingLockTime(_token)) &&
        _devFeePercent <= maxDevFeePercent && 
        _liquidityPercent + _winAmountPercent + _devFeePercent <= 100 && 
        _reflectionsPercent <= maxReflectionPercent && 
        _maxDailyPumpRate <= maxDailyPumpRate && 
        ((_reaperDeathTime >= minDeathTime && _reaperDeathTime <= 12000 hours) || _reaperDeathTime == 0) && 
        _apy <= maxApy && 
        ((_cooldown >= minCooldown && _cooldown <= maxCooldown) || _cooldown == 0) && 
        _burnPercentageBuy <= maxBurnPercentage && 
        _burnPercentageSell <= maxBurnPercentage,
        "Requirements not met");
        return true;
    }
   // Undrainable
    function calculateMaxSell(address _token) public view returns (uint256) {
        IEOS20 eos = IEOS20(_token);
        (uint112 tknRes, uint112 ethRes) = eos.getReserves();
        if (ethRes > initialLiquidity[_token]) {
            (uint256 tkn) = IUniswapV2Router02(eos.uniswapV2Router()).getAmountIn(ethRes - initialLiquidity[_token], tknRes, ethRes);
            return tkn;
        } else {
            return 0;
        }
    }
    function calculateMaxSellForCA(address _token, uint256 _userValue) public view returns (uint256) {
        return  calculateMaxSell(_token) - _userValue;
    }
    function getOwnerProgressLeft(address _token) public view returns (uint256) {
        // token = IEOS20(_token);
        if (IEOS20(_token).devClaimableEth() + IEOS20(_token).devWithdrawn() < initialLiquidity[_token]) {
            return initialLiquidity[_token] - IEOS20(_token).devClaimableEth() - IEOS20(_token).devWithdrawn();
        } else {
            return 0;
        }
    }
   // Gamble
    function getTimeLeft(address _token) public view returns (uint256) {
        IEOS20 eos = IEOS20(_token);
        if (eos.lastBuyTimestamp() == 0) {
            return eos.cooldown();
        } else {
            if (eos.lastBuyTimestamp() + eos.cooldown() > block.timestamp) {
                return (eos.lastBuyTimestamp() + eos.cooldown()) - block.timestamp;
            } else {
                return 0;
            }
        }
    }
   // Reaper
    function isAlive(address _token, address _user) public view returns (bool) {
        IEOS20 eos = IEOS20(_token);
        if(eos.deathTime() > 0){
        if (checkDeathTimeStamp(_token, _user) == 0 || block.timestamp < checkDeathTimeStamp(_token, _user) || eos.immortal(_user)) {
            return true;
        } else {
            return false;
        }
        }else{
            return true;
        }
    }
    function checkDeathTimeStamp(address _token, address _user) public view returns (uint256) {
        IEOS20 eos = IEOS20(_token);
        uint256 deathTimeStamp;
        uint deathTime = eos.deathTime() < minDeathTime ? minDeathTime : eos.deathTime();

        if (eos.firstReceivedBlockTimeStamp(_user) != 0) {
            if (eos.deathStartedTimestamp() > eos.firstReceivedBlockTimeStamp(_user)) {
                deathTimeStamp = eos.deathStartedTimestamp() + deathTime;
            }
            else {
                deathTimeStamp = eos.firstReceivedBlockTimeStamp(_user) + deathTime;
            }
        } else {
            return 0;
        }

        return deathTimeStamp;
    }
   // Pump
    function calculatePump(address _token) public view returns (uint256 burnAmount, uint256 pumpNow, uint256 desiredPrice, uint256 price) {
        IEOS20 eos = IEOS20(_token);
        uint dailyPumpRate;
        eos.maxDailyPumpRate() > maxDailyPumpRate ? dailyPumpRate = maxDailyPumpRate : dailyPumpRate = eos.maxDailyPumpRate();
        
        (uint112 r0, uint112 r1) = eos.getReserves();

        if (r0 > 1e18 && dailyPumpRate > 0 && eos.lastPumpTimestamp() < block.timestamp) {
           uint256 price = IUniswapV2Router02(eos.uniswapV2Router()).quote(1e18, r0, r1);

            uint256 pumpNow = ((block.timestamp - eos.lastPumpTimestamp()) * (dailyPumpRate * 1e18 / 86400));
            if (pumpNow >= dailyPumpRate * 3e18) {
                pumpNow = dailyPumpRate * 3e18;
            }
            desiredPrice = price.add(((price.mul(pumpNow) / 1e18) / 100));
            require(desiredPrice > 0, "Invalid desired price");
            uint256 desiredReserves = (r1.mul(1e9) / desiredPrice).mul(1e9);
            burnAmount = r0.sub(desiredReserves, "Invalid reserves calculation");

            return (burnAmount, pumpNow, desiredPrice, price);
        } else {
            return (0, 0, 0, 0);
        }
    }
    // maxWallet
    function maxWallet(address _token) public view returns (uint) {
        IEOS20 eos = IEOS20(_token);
        if(eos.antiBot() && eos.maxWalletPercent() > 1 && (block.timestamp - eos.timeCreated()) < antiBotTime) {
            // 7 minutes gradual increase
            uint k = (block.timestamp - eos.timeCreated()) * 1e18 / antiBotTime;
            return eos.totalSupply() * ((eos.maxWalletPercent()*k)/1e18) / 100;
        }else{
            return eos.totalSupply() * eos.maxWalletPercent() / 100;
        }
    }
    function setMinBuyPercent(address _token, uint _percent) public {
        require(msg.sender == IEOS20(_token).owner(), "Owner only");
        require(_percent <= maxMinBuyPairPercent, "Percent must be greater than 0 and less than 100");
        minBuyPercent[_token] = _percent;
        minBuyAmount[_token] = 0;
    }
    function setMinBuyAmount(address _token, uint _amount) public {
        require(msg.sender == IEOS20(_token).owner(), "Owner only");
        require(_amount > 0 && _amount <= IEOS20(_token).balanceOf(address(IEOS20(_token).uniswapV2Pair())) * maxMinBuyPairPercent / 10000, "Amount must be greater than 0");
        minBuyAmount[_token] = _amount;
        minBuyPercent[_token] = 0;
    }
    function minBuy(address _token) public view returns (uint) {
        if(minBuyAmount[_token] > 0){
            return minBuyAmount[_token];
        }
        if(minBuyPercent[_token] > 0){
            return IEOS20(_token).balanceOf(address(IEOS20(_token).uniswapV2Pair())) * minBuyPercent[_token] / 10000;
        }
        else{
            return minBuyBase;
        }
    }
   // Volume 
    function maxReflectionsSwap(address _token) public view returns (uint256) {
        IEOS20 eos = IEOS20(_token);
        uint maxPercent = maxReflectionsSwapPercentCustom[_token] == 0 ? maxReflectionSwapPercent : maxReflectionsSwapPercentCustom[_token];
        return eos.balanceOf(address(eos.uniswapV2Pair())) * maxPercent / 10000;
    }
    function minReflectionsSwap(address _token) public view returns (uint256) {
        IEOS20 eos = IEOS20(_token);
        uint minPercent = minReflectionsSwapPercentCustom[_token] == 0 ? minReflectionSwapPercent : minReflectionsSwapPercentCustom[_token];
        return eos.balanceOf(address(eos.uniswapV2Pair())) * minPercent / 10000;
    }
    function setCustomMaxReflectionsSwapPercent(address _token, uint _percent) public {
        require(msg.sender == owner() || (isCustomRefelctionsPercentPublic && msg.sender == IEOS20(_token).owner()), "Owner only");
        maxReflectionsSwapPercentCustom[_token] = _percent;
    }
    function setCustomMinReflectionsSwapPercent(address _token, uint _percent) public {
        require(msg.sender == owner() || (isCustomRefelctionsPercentPublic && msg.sender == IEOS20(_token).owner()), "Owner only");
        minReflectionsSwapPercentCustom[_token] = _percent;
    }
  // Liquidiy
    function withdrawDevLiquidity(address _token) public nonReentrant whenNotPaused returns (uint256 ethFromLP, uint256   tokenFromLP) {
            token = IEOS20(_token);
            require(msg.sender == token.owner(), "Owner only");
            require(!lock.isLpLocked(_token), "Lp is locked");
            require(!lock.isFunded(_token), "Token is funded by Eth OS");
            require(!hasWithdrawLiquidity[_token], "Liquidity has been withdrawn");
            require(block.timestamp > lock.devDeadline(_token), "Not a deadline yet.");
            require(getOwnerProgressLeft(_token) > 0, "No progress left");
        
            hasWithdrawLiquidity[_token] = true;
        
            (uint256 tkn, uint256 eth) = token.getReserves();
            address pair = token.uniswapV2Pair();
            

            uint256 liquidityToWithdraw = (getOwnerProgressLeft(_token) * IUniswapV2Pair(pair).totalSupply() * 1e9 / eth) / 1e9; // Precision to avoid rounding loss
        
            IUniswapV2Pair(pair).approve(address(token.uniswapV2Router()), liquidityToWithdraw);
        
            // Calculate expected outputs for min thresholds (99% tolerance)
            uint256 expectedToken = (liquidityToWithdraw * tkn * 1e9 / IUniswapV2Pair(pair).totalSupply()) / 1e9;
            uint256 expectedETH = getOwnerProgressLeft(_token); 
        
            (tokenFromLP, ethFromLP) = IUniswapV2Router02(token.uniswapV2Router()).removeLiquidityETH(
                address(token),
                liquidityToWithdraw,
                expectedToken * lpAccuracy / 100, // Min tokens: protect against manipulation
                expectedETH * lpAccuracy / 100,   // Min ETH: as before
                address(this),
                block.timestamp + 1 hours
            );
        
            if (token.balanceOf(address(this)) == token.totalShares()) {
                token.burn(tokenFromLP - 1e18);
            } else {
                token.burn(tokenFromLP);
            }
           
            (bool success,) = token.owner().call{value: ethFromLP}("");
            if (!success) {
                (bool success2,) = projectWallet.call{value: ethFromLP}("");
                require(success2);
            }
        
            uint left = eth - ethFromLP; 
            if (left < initialLiquidity[_token]) {
                initialLiquidity[_token] = left * initialLiquidityPercent / 100;
            } else {
                initialLiquidity[_token] = initialLiquidity[_token] * initialLiquidityPercent / 100;
            }

        return (ethFromLP, tokenFromLP);
    }
  // Owner
   // View 
    function isEligibleToMintBonus(address _user) public view returns (bool) {
        require(isBoostApyOn, "Boost apy is not on");
        return _user == address(booster) || _user == owner();
    }
    function setIsAuthorized(address _user, bool _isAuthorized) public onlyOwner {
        isAuthorized[_user] = _isAuthorized;
    }
    function isAuthorizedToClaim(address _user) public view returns (bool) {
        require(isAuthorized[_user] , "Not authorized Claim");

        return true;
    }
   // Min Max 
    function setMinEthToCreate(uint _eth) public onlyOwner {
        minEthToCreate = _eth;
    }
    function setMinLockTime(uint _time) public onlyOwner {
        minLockTime = _time;
    }
    function setMaxLockTime(uint _time) public onlyOwner {
        maxLockTime = _time;
    }
    function setMaxDailyPumpRate(uint _rate) public onlyOwner {
        maxDailyPumpRate = _rate;
    }
    function setMaxReflectionPercent(uint _percent) public onlyOwner {
        maxReflectionPercent = _percent;
    }
    function setMinDeathTime(uint _time) public onlyOwner {
        minDeathTime = _time;
    }
    function setMaxDevSupplyPercent(uint _percent) public onlyOwner {
        maxDevSupplyPercent = _percent;
    }
    function setMaxApy(uint _apy) public onlyOwner {
        maxApy = _apy;
    }
    function setEosPortionDivider(uint _divider) public onlyOwner {
        eosPortionDivider = _divider;
    }
    function setMaxBurnPercentage(uint _percent) public onlyOwner {
        maxBurnPercentage = _percent;
    }
    function setMaxDevFeePercent(uint _percent) public onlyOwner {
        maxDevFeePercent = _percent;
    }
    function setMinCooldown(uint _time) public onlyOwner {
        minCooldown = _time;
    }
    function setMaxCooldown(uint _time) public onlyOwner {
        maxCooldown = _time;
    }
   // Settings 
    function setInitialLiquidityPercent(uint _percent) public onlyOwner {
        initialLiquidityPercent = _percent;
    }
    function setCanCreate(bool _canCreate) public onlyOwner {
        canCreate = _canCreate;
    }
    function setIsCustomRefelctionsPercentPublic(bool _isCustomRefelctionsPercentPublic) public onlyOwner {
        isCustomRefelctionsPercentPublic = _isCustomRefelctionsPercentPublic;
    }
    function setIsBoostApyOn(bool _isBoostApyOn) public onlyOwner {
        isBoostApyOn = _isBoostApyOn;
    }
    function setAntiBotTime(uint _time) public onlyOwner {
        antiBotTime = _time;
    }
    function setWhitelistedRouter(address _router, bool _whitelisted) public onlyOwner {
        isWhitelistedRouter[_router] = _whitelisted;
    }
    function setLpAccuracy(uint _accuracy) public onlyOwner {
        lpAccuracy = _accuracy;
    }
   // Fees 
    function setProjectWallet(address _projectWallet) public onlyOwner{
        projectWallet = payable(_projectWallet);
    }
    function setProjectClaimFee(uint _fee) public onlyOwner {
        projectClaimFee = _fee;
    }
    function setEcoFeePercent(uint _fee) public onlyOwner {
        ecoFeePercent = _fee;
    }
    function setEcoFeeOn(bool _bool) public onlyOwner {
        ecoFeeOn = _bool;
    }
    function setEcoFriendly(address _token, bool _ecoFriendly) public onlyOwner {
        ecoFriendly[_token] = _ecoFriendly;
    }
    function setEcoFriendlyFeePercent(uint _fee) public onlyOwner {
        ecoFriendlyFeePercent = _fee;
    }
   // Contracts 
    function setLock(address _lock) public onlyOwner {
        lock = ILock(_lock);
    }
    function setBooster(address _booster) public onlyOwner {
        booster = IBOOSTER(_booster);
    }
    function setInfoService(address _infoService) public onlyOwner {
        infoService = IInfo(payable(_infoService));
    }
    function setDeployer(Deployer _deployer) public onlyOwner{
        deployer = _deployer;
    }
    function setMainToken(address _mainToken) public onlyOwner {
        mainToken = IEOS20(_mainToken);
    }
   // Tokens
    function setInitialLiquidityForToken(address _token, uint _initialLiquidity) public onlyOwner{
        initialLiquidity[_token] = _initialLiquidity;
    }
   // Recovery
    function recoverLP(address _token, uint toWithdraw) public onlyOwner{
        token = IEOS20(_token);
        IUniswapV2Pair(token.uniswapV2Pair()).transfer(owner(), toWithdraw);
    }
    function recoverTokens(address _token, uint toWithdraw) public onlyOwner{
        token = IEOS20(_token);
        token.transfer(owner(), toWithdraw);
    }
    function recoverEth(uint toWithdraw) public onlyOwner{
        (bool success,) = owner().call{value: toWithdraw}("");
    }
  // Receive
    receive() external payable {}
}"
    },
    "lib/openzeppelin-contracts/contracts/access/Ownable.sol": {
      "content": "// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
"
    },
    "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol": {
      "content": "// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
"
    },
    "lib/openzeppelin-contracts/contracts/security/Pausable.sol": {
      "content": "// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}
"
    },
    "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol": {
      "content": "// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

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

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}
"
    },
    "src/math/SafeMathUint.sol": {
      "content": "// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.1;

/**
 * @title SafeMathUint
 * @dev Math operations with safety checks that revert on error
 */
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}
"
    },
    "src/math/SafeMathInt.sol": {
      "content": "// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.1;

/**
 * @title SafeMathInt
 * @dev Math operations with safety checks that revert on error
 * @dev SafeMath adapted for int256
 * Based on code of  https://github.com/RequestNetwork/requestNetwork/blob/master/packages/requestNetworkSmartContracts/contracts/base/math/SafeMathInt.sol
 */
library SafeMathInt {
    function mul(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when multiplying INT256_MIN with -1
        // https://github.com/RequestNetwork/requestNetwork/issues/43
        require(!(a == -2 ** 255 && b == -1) && !(b == -2 ** 255 && a == -1));

        int256 c = a * b;
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing INT256_MIN by -1
        // https://github.com/RequestNetwork/requestNetwork/issues/43
        require(!(a == -2 ** 255 && b == -1) && (b > 0));

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        require((b >= 0 && a - b <= a) || (b < 0 && a - b > a));

        return a - b;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
"
    },
    "interfaces/IUniswapV2Router02.sol": {
      "content": "pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
     function launch(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        uint8 buyLpFee, 
        uint8 sellLpFee, 
        uint8 buyProtocolFee, 
        uint8 sellProtocolFee, 
        address protocolAddress
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    
}
"
    },
    "interfaces/IUniswapV2Factory.sol": {
      "content": "pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}"
    },
    "interfaces/ITokenSettings.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface ITokenSettings {
    struct TokenSettings {
        string name;
        string symbol;
        address router;
        // address owner;
        // address deployer;

        string description;
        string website;
        string image;
        string chat;
        string socials;
    
        uint256 devFee;
        uint256 reflectionsPercent;
        uint256 liquidityPercent;
        uint256 maxDailyPumpRate;
        uint256 reaperDeathTime;
        uint256 cooldown;
        uint256 winAmountPercent;
        uint256 apy;

        uint256 devSupply;
        uint256 devDeadline;

        uint256 burnPercentBuy;
        uint256 burnPercentSell;

        uint256 maxWallet;
        bool antiBot;
    }
} "
    },
    "interfaces/IBooster.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IBOOSTER {
    function mainToken() external view returns (address);
    function balanceOf(address _user) external view returns (uint256);
    function bonusEOS(address _user) external view returns (uint256);
    function getEosPriceInUsd() external view returns (uint);
}"
    },
    "interfaces/IEOS20.sol": {
      "content": "pragma solidity ^0.8.0;
interface IEOS20 {
  // FOR ETH OS
    function initializeToken(address owner, address router, address deployer, uint256 _devDeadline) external;
    function setSpecs(
        uint256 _devFeePercent,
        uint256 _maxDailyPumpRate,
        uint256 _reflectionsPercent,
        uint256 _liquidityPercent,
        uint256 _reaperDeathTime,
        uint256 _cooldown,
        uint256 _winAmountPercent,
        uint256 _apy,
        uint256 _burnPercentBuy,
        uint256 _burnPercentSell
    ) external;    
    function transferOwnershipOfTheToken(address) external;
    function openTrading(bool _tradingOpen) external;
    
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function owner() external view returns (address);
    function timeCreated() external view returns (uint256);
    function deploymentBlock() external view returns (uint);
    function uniswapV2Pair() external view returns (address);
    function uniswapV2Router() external view returns (address);
    
    function antiBot() external view returns (bool);
    function maxWalletPercent() external view returns (uint);
    
    function toggleYield(bool toggle) external;
    function tradingOpen() external view returns (bool);
    function yieldOn() external view returns (bool);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function transfer(address _to, uint256 _value) external returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
    function approve(address _spender, uint256 _value) external returns (bool success);

    function totalShares() external view returns (uint256);
    function burn(uint256 _amount) external;
    function getReserves() external view returns (uint112, uint112);
    function getQuote(uint256 amountA, uint256 reserveA, uint256 reserveB) external view returns (uint256);
    function lastBuyTimestamp() external view returns (uint256);

    function reflectionsPercent() external view returns (uint256);
    function liquidityPercent() external view returns (uint256);
    function winAmountPercent() external view returns (uint256);
    function devFeePercent() external view returns (uint256);
    function burnPercentageBuy() external view returns (uint256);
    function burnPercentageSell() external view returns (uint256);
    function deathTime() external view returns (uint256);
    function apy() external view returns (uint256);

    function share(address user) external view returns (uint256);
    function shares(address user) external view returns (uint256);
    function ethAccumulated(address user) external view returns (uint256);
    function ethAccumulatedForUi(address _user) external view returns (uint256);
    function ethWithdrawn(address user) external view returns (uint256);
    function ethWithdrawnForUi(address user) external view returns (uint256);
    function totalEthDistributed() external view returns (uint256);
    function devWithdrawn() external view returns (uint256);
    function lpAdded() external view returns (uint256);

    function pendingPonziTokens(address _user) external view returns (uint256);
    function devClaimableEth() external view returns (uint256);
    function lastPumpTimestamp() external view returns (uint256);
    function maxDailyPumpRate() external view returns (uint256);
    function pumpIsPublic() external view returns (bool);

    function firstReceivedBlockTimeStamp(address) external view returns (uint256);
    function immortal(address _user) external view returns (bool);
    function deathStartedTimestamp() external view returns (uint256);
   
    function cooldown() external view returns (uint256);
    function winAmount() external view returns (uint256);
    function currentWinner() external view returns (address);

    function ponziStart() external view returns (uint256);
    function mintBonus(uint256 amount, address _user) external;
    
    function setMaxWallet(bool _antiBot, uint256 _maxWallet) external;
    function volumeAmount() external view returns (uint256);
    
}

"
    },
    "src/Deployer.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
                                                                                                                                               
/*

☞ https://ethos.vision
???? https://x.com/Ethereum_OS
✌︎ https://t.me/ethosportal

Welcome to the Ethereum Operating System — the first-of-its-kind revenue generating DeFi pumpware
built as a social DeFi sandbox that is filled with composable elements so you can create, trade,
communicate, and participate—all in one place.


                                                      @                               
                                                     @@:                              
                                                    @@@::                             
                                                  ==@@@::::                           
                                                 ===@@@:::::                          
                                                ===+@@+::::::                         
                                               ====@@@::::::::                        
                                              =====@@@:::::::::                       
                                             ======@@@::::::::::                      
                                            =======@@@:::::::::::                     
                                           =======*@@+::::::::::::                    
                                          ========@@@::::::::::::::                   
                                        ==========@@@::::::::::::::::                 
                                       ===========@@@:::::::::::::::::                
                                      ============@@@::::::::::::::::::               
                                     ============*@@=:::::::::::::::::::              
                                    =============@@@:::::::::::::::::::::             
                                   =====@@@======@@@::::::::@@@:::::::::::            
                                  ======@@@======@@@::::::::@@@::::::::::::           
                                 =======@@@======@@@::::::::@@@:::::::::::::          
                                =================@@=:::::::::::::::::::::::::         
                              ==================%@@::::::::::::::::::::::::::::       
                             ===================@@@:::::::::::::::::::::::::::::      
                            ====================@@@::::::::::::::::::::::::::::::     
                           =====================@@@:::::::::::::::::::::::::::::::    
                          =====================+@@-::::::::::::::::::::::::::::::::   
                         ======================@@@@@@@@@@@@@@*::::::::::::::::::::::  
                        =======================@@@@@@@@@@@@@@:::::::::::::::::::::::: 
                       ===================================@@@:::::::::::::::::::::::::
                         =================================@@@:::::::::::::::::::::::  
                          =========@@@@===================@@@::::::::@@@*::::::::::   
                           =========@@@@@@@==============*@@:::::%@@@@@:::::::::::    
                             ===========@@@@@@@@@@@#*+=+*@@@@@@@@@@@-:::::::::::      
                              ==============+@@@@@@@@@@@@@@@@@@@:::::::::::::::       
                               ==========================@@@::::::::::::::::::        
                                 ========================@@@::::::::::::::::          
                                  ======================@@@::::::::::::::::           
                                   =====================@@@:::::::::::::::            
                                     ===================@@@:::::::::::::              
                                      ==================@@@::::::::::::               
                                       ================*@@=:::::::::::                
                                         ==============@@@::::::::::                  
                                          =============@@@:::::::::                   
                                           ============@@@::::::::                    
                                             ==========@@#::::::                      
                                              ========@@@::::::                       
                                               =======@@@:::::                        
                                                 =====@@@:::                          
                                                  ====@@@::                           
                                                   ==*@@-:                            
                                                    =@@@:                             
                                                      @                 
                                                

                        
                                         @@@                                                                 
 @@@@@@@@@@@@@@@@@@@                 @@@@@@@                            =======                   ========   
  @@@@@@@@@@@@@@@@@@                   @@@@@                         ====     =====            ====

Tags:
ERC20, Multisig, Mintable, Burnable, Swap, Liquidity, Yield, Upgradeable, Multi-Signature, Factory|addr:0x3e3b232dc122e8c582c4a341be19ebe4b7e12a9a|verified:true|block:23383262|tx:0x469a09671449a52267f78fe27a33b0e0073f01ba8795e8ce7c308418a64d1ab8|first_check:1758117766

Submitted on: 2025-09-17 16:02:48

Comments

Log in to comment.

No comments yet.