 public enum ZipError: Error {
     case NotFoundCentralDirectoryEnd
     case WrongCentralDirectoryDisk
+    case WrongZip64LocatorSignature
+    case WrongZip64EndCentralDirectorySignature
+    case WrongVersion
 }
 
 public class ZipContainer {

            }
            pointerData.index -= 5
        }
        let diskNumber = pointerData.uint64FromAlignedBytes(count: 2)
        let centralDirectoryDiskNumber = pointerData.uint64FromAlignedBytes(count: 2)
        guard diskNumber == centralDirectoryDiskNumber
            else { throw ZipError.WrongCentralDirectoryDisk }


        return [:]
    }

        /// Object with input data which supports convenient work with bit shifts.
        var pointerData = DataWithPointer(data: data, bitOrder: .reversed)

        // Looking for the end of central directory (CD) record.
        var zip64RecordExists = false

        pointerData.index = pointerData.size - 22 // 22 is a minimum amount which could take end of CD record.
        while true {
            let signature = pointerData.uint64FromAlignedBytes(count: 4)
            if signature == 0x06054b50 {
