 
 internal extension Data {
     
-    #if swift(>=5.0) || (swift(>=4.2) && XCODE)
     func subdataNoCopy(in range: Range<Int>) -> Data {
         
         // stored in heap, can reuse buffer
         if count > Data.inlineBufferSize {
             
-            #if swift(>=5.0)
             return withUnsafeBytes { (buffer: UnsafeRawBufferPointer) in
                 Data(bytesNoCopy: UnsafeMutableRawPointer(mutating: buffer.baseAddress!.advanced(by: range.lowerBound)),
                      count: range.count,
                      deallocator: .none)
             }
-            #else
-            return withUnsafeBytes {
-                Data(bytesNoCopy: UnsafeMutableRawPointer(mutating: $0.advanced(by: range.lowerBound)),
-                     count: range.count,
-                     deallocator: .none)
-            }
-            #endif
             
         } else {
             

        return MemoryLayout<Buffer>.size
    }
}
#endif

            return subdata(in: range)
        }
    }
    
    func suffixNoCopy(from index: Int) -> Data {
        return subdataNoCopy(in: index ..< count)
    }
    
    func suffixCheckingBounds(from start: Int) -> Data {
        
        if count > start {
            return Data(suffix(from: start))
        } else {
            return Data()
        }
    }
}

internal extension Data {
    
    /// Size of the inline buffer for `Foundation.Data` used in Swift 5.
    ///
