             if isLastBit == 1 { break }
         }
 
-        return (String(out.reduce("") { $0 + $1 })?.data(using: .utf8))!
+        return out
     }
 
 }

                                convertToInt(reversedUint8Array: data.bits(from: start, to: end))

                            while length > distance {
                                out.append(contentsOf: Array(out[out.count - distance..<out.count]))
                                length -= distance
                            }
                            if length == distance {
                                out.append(contentsOf: Array(out[out.count - distance..<out.count]))
                            } else {
                                out.append(contentsOf: Array(out[out.count - distance..<out.count + length - distance]))
                            }
                        } else {
                            throw DeflateError.HuffmanTableError

                // Check if lengths are OK
                guard length & nlength == 0 else { throw DeflateError.WrongBlockLengths }
                // Process uncompressed data into the output
                out.append(Data(data[index..<index+length]))
            } else if blockType == [1, 0] || blockType == [0, 1] {
                // Block with Huffman coding (either static or dynamic)

