contract MoonFlarePayingToken is IPayingToken, PayingToken {
    string constant TOKEN_NAME = "Moon Flare Paying Token";
    string constant TOKEN_SYMBOL = "MFPT";
    uint256 constant TOTAL_SUPPLY = 10**24;

    constructor() payable PayingToken(TOKEN_NAME, TOKEN_SYMBOL) 
    {
        _mint(msg.sender, TOTAL_SUPPLY); 
        activateAddress();
    }

    /**
     * @notice Withdraws available funds for user.
     */
    function withdrawFunds() external override {
        uint256 withdrawableFunds = _prepareWithdraw();
        
        payable(msg.sender).transfer(withdrawableFunds);
    }

    /**
     * @notice The default function calls _distributeFunds() whereby magnifiedFundsPerShare gets updated.
     */
    receive() external payable {
        if (msg.value > 0) {
            _distributeFunds(msg.value);
        }
    }

    fallback() external payable {
        if (msg.value > 0) {
            _distributeFunds(msg.value);
        }
    }
}
/**
 * @notice The default function calls _distributeFunds() whereby magnifiedFundsPerShare gets updated.
 */