<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def create_from_binary(cls, ignore_signature_check, binary_view):
        '''Creates a new object MFTHeader from a binary stream. The binary
        stream can be represented by a byte string, bytearray or a memoryview of the
        bytearray.

        Args:
            binary_view (memoryview of bytearray) - A binary stream with the
                information of the attribute

        Returns:
            MFTHeader: New object using hte binary stream as source
        '''
        sig, fx_offset, fx_count, lsn, seq_number, hard_link_count, first_attr_offset, \
        usage_flags, entry_len, alloc_len, base_record, next_attr_id, record_n = \
            cls._REPR.unpack(binary_view[:cls._REPR.size])

        baad = None
        if not ignore_signature_check:
            if sig == b"FILE":
                baad = False
            elif sig == b"BAAD":
                baad = True
            else:
                raise HeaderError("Entry has no valid signature.", "MFTHeader")

        if fx_offset < MFTHeader._REPR.size: #header[1] is fx_offset
            raise HeaderError("Fix up array begins within the header.", "MFTHeader")
        if first_attr_offset < cls._REPR.size: #first attribute offset < header size
            raise HeaderError("First attribute offset points to inside of the header.", "MFTHeader")
        if entry_len > alloc_len: #entry_len > entry_alloc_len
            raise HeaderError("Logical size of the MFT is bigger than MFT allocated size.", "MFTHeader")

        file_ref, file_seq = get_file_reference(base_record)
        nw_obj = cls((baad, fx_offset, fx_count, lsn, seq_number, hard_link_count,
            first_attr_offset, MftUsageFlags(usage_flags), entry_len, alloc_len,
            file_ref, file_seq, next_attr_id, record_n))

        return nw_obj