abstract contract ERC20Base is ERC20 {
    uint8 private _decimals = 18;

    constructor(string memory name, string memory symbol) 
        ERC20(name, symbol) {
    }

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

    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }
}
function _setupDecimals(uint8 decimals_) internal {
    _decimals = decimals_;
}

/**
 * @dev Sets {decimals} to a value other than the default one of 18.
 *
 * WARNING: This function should only be called from the constructor. Most
 * applications that interact with token contracts will not expect
 * {decimals} to ever change, and may work incorrectly if it does.
 */