contract EasyGroupCoin is ERC20Decimals, ERC20Mintable, ERC20Burnable, ERC1363, TokenRecover, Roles {

    constructor (
        string memory name_,
        string memory symbol_,
        uint8 decimals_,
        uint256 initialBalance_
    )
        ERC20(name_, symbol_)
        ERC20Decimals(decimals_)
    {
        ERC20._mint(_msgSender(), initialBalance_);
    }

    function decimals() public view virtual override(ERC20, ERC20Decimals) returns (uint8) {
        return super.decimals();
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(AccessControl, ERC1363) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    /**
     * @dev Function to mint tokens.
     *
     * NOTE: restricting access to addresses with MINTER role. See {ERC20Mintable-mint}.
     *
     * @param account The address that will receive the minted tokens
     * @param amount The amount of tokens to mint
     */
    function _mint(address account, uint256 amount) internal override(ERC20) onlyMinter {
        super._mint(account, amount);
    }

    /**
     * @dev Function to stop minting new tokens.
     *
     * NOTE: restricting access to owner only. See {ERC20Mintable-finishMinting}.
     */
    function _finishMinting() internal override onlyOwner {
        super._finishMinting();
    }
}
/**
 * @title EasyGroupCoin
 * @dev Implementation of the EasyGroupCoin
 */
function _mint(address account, uint256 amount) internal override(ERC20) onlyMinter {
    super._mint(account, amount);
}

/**
 * @dev Function to mint tokens.
 *
 * NOTE: restricting access to addresses with MINTER role. See {ERC20Mintable-mint}.
 *
 * @param account The address that will receive the minted tokens
 * @param amount The amount of tokens to mint
 */