contract LPTokenWrapper {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    /**
    * This is the token users stake in this contract to receive rewards.
    * They get this token by providing liquidity for a vault (debaUSDT).
    */
    IERC20 public lpToken;

    uint256 private _totalSupply; 
    mapping(address => uint256) private _balances; 

    // The supply of `lpToken` this contract holds.
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    // The balances of the users that staked.
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    function stake(uint256 amount) public {
        _totalSupply = _totalSupply.add(amount);
        _balances[msg.sender] = _balances[msg.sender].add(amount);
        lpToken.safeTransferFrom(msg.sender, address(this), amount);
    }

    function withdraw(uint256 amount) public {
        _totalSupply = _totalSupply.sub(amount);
        _balances[msg.sender] = _balances[msg.sender].sub(amount);
        lpToken.safeTransfer(msg.sender, amount);
    }
}
function balanceOf(address account) public view returns (uint256) {
    return _balances[account];
}

// The balances of the users that staked.