Build Information
Successful build of swift-nio-redis, reference 0.11.0 (8bdd2e
), with Swift 6.1 for Linux on 28 Apr 2025 07:53:53 UTC.
Swift 6 data race errors: 1
Build Command
bash -c docker run --pull=always --rm -v "checkouts-4609320-1":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:basic-6.1-latest swift build --triple x86_64-unknown-linux-gnu -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures 2>&1
Build Log
========================================
RunAll
========================================
Builder version: 4.61.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/SwiftNIOExtras/swift-nio-redis.git
Reference: 0.11.0
Initialized empty Git repository in /host/spi-builder-workspace/.git/
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
From https://github.com/SwiftNIOExtras/swift-nio-redis
* tag 0.11.0 -> FETCH_HEAD
HEAD is now at 8bdd2e9 Merge branch 'develop'
Cloned https://github.com/SwiftNIOExtras/swift-nio-redis.git
Revision (git rev-parse @):
8bdd2e97af4d6f5894912041ee6cfc303837622d
SUCCESS checkout https://github.com/SwiftNIOExtras/swift-nio-redis.git at 0.11.0
========================================
Build
========================================
Selected platform: linux
Swift version: 6.1
Building package at path: $PWD
https://github.com/SwiftNIOExtras/swift-nio-redis.git
https://github.com/SwiftNIOExtras/swift-nio-redis.git
WARNING: environment variable SUPPRESS_SWIFT_6_FLAGS is not set
{
"dependencies" : [
{
"identity" : "swift-nio",
"requirement" : {
"range" : [
{
"lower_bound" : "2.18.0",
"upper_bound" : "3.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-nio.git"
}
],
"manifest_display_name" : "swift-nio-redis",
"name" : "swift-nio-redis",
"path" : "/host/spi-builder-workspace",
"platforms" : [
],
"products" : [
{
"name" : "NIORedis",
"targets" : [
"NIORedis"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "NIORedisTests",
"module_type" : "SwiftTarget",
"name" : "NIORedisTests",
"path" : "Tests/NIORedisTests",
"sources" : [
"RESPValueTests.swift",
"XCTestManifests.swift"
],
"target_dependencies" : [
"NIORedis"
],
"type" : "test"
},
{
"c99name" : "NIORedis",
"module_type" : "SwiftTarget",
"name" : "NIORedis",
"path" : "Sources/NIORedis",
"product_dependencies" : [
"NIO",
"NIOFoundationCompat"
],
"product_memberships" : [
"NIORedis"
],
"sources" : [
"ByteBufferExtras.swift",
"RESPChannelHandler.swift",
"RESPEncodable.swift",
"RESPParser.swift",
"RESPPipelineSetup.swift",
"RESPValue.swift"
],
"type" : "library"
}
],
"tools_version" : "5.0"
}
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-4609320-1":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:basic-6.1-latest swift build --triple x86_64-unknown-linux-gnu -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures 2>&1
basic-6.1-latest: Pulling from finestructure/spi-images
Digest: sha256:3bdcac04179f4ed3e5b8e9dbd6e74bbf5ebc0f4fde48bbaad7d1e5c757e65bcb
Status: Image is up to date for registry.gitlab.com/finestructure/spi-images:basic-6.1-latest
Fetching https://github.com/apple/swift-nio.git
[1/75439] Fetching swift-nio
Fetched https://github.com/apple/swift-nio.git from cache (3.67s)
Computing version for https://github.com/apple/swift-nio.git
Computed https://github.com/apple/swift-nio.git at 2.82.0 (4.36s)
Fetching https://github.com/apple/swift-system.git
Fetching https://github.com/apple/swift-atomics.git
Fetching https://github.com/apple/swift-collections.git
[1/1705] Fetching swift-atomics
[360/6058] Fetching swift-atomics, swift-system
[6059/22300] Fetching swift-atomics, swift-system, swift-collections
Fetched https://github.com/apple/swift-atomics.git from cache (0.90s)
Fetched https://github.com/apple/swift-system.git from cache (0.90s)
Fetched https://github.com/apple/swift-collections.git from cache (0.92s)
Computing version for https://github.com/apple/swift-atomics.git
Computed https://github.com/apple/swift-atomics.git at 1.2.0 (1.34s)
Computing version for https://github.com/apple/swift-system.git
Computed https://github.com/apple/swift-system.git at 1.4.2 (0.40s)
Computing version for https://github.com/apple/swift-collections.git
Computed https://github.com/apple/swift-collections.git at 1.1.4 (0.62s)
Creating working copy for https://github.com/apple/swift-atomics.git
Working copy of https://github.com/apple/swift-atomics.git resolved at 1.2.0
Creating working copy for https://github.com/apple/swift-collections.git
Working copy of https://github.com/apple/swift-collections.git resolved at 1.1.4
Creating working copy for https://github.com/apple/swift-nio.git
Working copy of https://github.com/apple/swift-nio.git resolved at 2.82.0
Creating working copy for https://github.com/apple/swift-system.git
Working copy of https://github.com/apple/swift-system.git resolved at 1.4.2
Building for debugging...
[0/22] Write sources
[11/22] Compiling CNIOWindows WSAStartup.c
[11/22] Compiling CNIODarwin shim.c
[11/22] Compiling CNIOWindows shim.c
[14/22] Write sources
[15/22] Compiling CNIOLinux liburing_shims.c
[16/22] Compiling _AtomicsShims.c
[17/22] Compiling CNIOWASI CNIOWASI.c
[18/22] Compiling CNIOLinux shim.c
[19/22] Write swift-version-24593BA9C3E375BF.txt
[21/64] Emitting module InternalCollectionsUtilities
[21/66] Compiling c-nioatomics.c
[22/66] Compiling c-atomics.c
[24/66] Compiling InternalCollectionsUtilities UnsafeBufferPointer+Extras.swift
[25/66] Compiling InternalCollectionsUtilities UnsafeMutableBufferPointer+Extras.swift
[26/68] Emitting module Atomics
[29/68] Compiling InternalCollectionsUtilities _SortedCollection.swift
[30/68] Compiling InternalCollectionsUtilities _UniqueCollection.swift
[31/68] Compiling Atomics OptionalRawRepresentable.swift
[32/68] Compiling Atomics RawRepresentable.swift
[33/68] Compiling Atomics AtomicBool.swift
[34/68] Compiling Atomics IntegerConformances.swift
[35/68] Compiling Atomics PointerConformances.swift
[36/68] Compiling Atomics Primitives.native.swift
[43/68] Compiling InternalCollectionsUtilities Debugging.swift
[44/68] Compiling InternalCollectionsUtilities Descriptions.swift
[45/68] Compiling InternalCollectionsUtilities RandomAccessCollection+Offsets.swift
[46/68] Compiling InternalCollectionsUtilities Specialize.swift
[47/73] Compiling _NIODataStructures _TinyArray.swift
[48/74] Compiling Atomics Primitives.shims.swift
[49/74] Compiling Atomics AtomicInteger.swift
[50/74] Compiling InternalCollectionsUtilities _UnsafeBitSet+_Word.swift
[51/74] Compiling InternalCollectionsUtilities _UnsafeBitSet.swift
[54/74] Emitting module _NIOBase64
[55/74] Compiling _NIOBase64 Base64.swift
[66/76] Compiling Atomics IntegerOperations.swift
[67/76] Compiling Atomics Unmanaged extensions.swift
[69/92] Emitting module NIOConcurrencyHelpers
[70/92] Compiling DequeModule _DequeBuffer.swift
[71/92] Compiling DequeModule _DequeBufferHeader.swift
[72/94] Compiling _NIODataStructures PriorityQueue.swift
[73/94] Emitting module _NIODataStructures
[74/94] Compiling _NIODataStructures Heap.swift
[75/95] Compiling NIOConcurrencyHelpers NIOAtomic.swift
[76/95] Compiling NIOConcurrencyHelpers NIOLock.swift
[77/95] Compiling NIOConcurrencyHelpers NIOLockedValueBox.swift
[78/95] Compiling NIOConcurrencyHelpers atomics.swift
[79/95] Compiling NIOConcurrencyHelpers lock.swift
[80/96] Compiling DequeModule Deque+CustomReflectable.swift
[81/96] Compiling DequeModule Deque+Descriptions.swift
[84/96] Compiling DequeModule _DequeSlot.swift
[85/96] Compiling DequeModule _UnsafeWrappedBuffer.swift
[86/96] Compiling DequeModule Deque+Testing.swift
[87/96] Compiling DequeModule Deque._Storage.swift
[88/96] Compiling DequeModule Deque._UnsafeHandle.swift
[89/96] Compiling DequeModule Deque.swift
[90/96] Compiling DequeModule Deque+Extras.swift
[91/96] Compiling DequeModule Deque+Hashable.swift
[92/96] Compiling DequeModule Deque+Equatable.swift
[93/96] Compiling DequeModule Deque+ExpressibleByArrayLiteral.swift
[94/96] Emitting module DequeModule
[95/96] Compiling DequeModule Deque+Codable.swift
[96/96] Compiling DequeModule Deque+Collection.swift
[98/156] Compiling NIOCore MarkedCircularBuffer.swift
[99/156] Compiling NIOCore MulticastChannel.swift
[100/156] Compiling NIOCore NIOAny.swift
[101/156] Compiling NIOCore NIOCloseOnErrorHandler.swift
[102/156] Compiling NIOCore NIOLoopBound.swift
[103/156] Compiling NIOCore NIOScheduledCallback.swift
[104/156] Compiling NIOCore NIOSendable.swift
[105/156] Compiling NIOCore RecvByteBufferAllocator.swift
[106/164] Compiling NIOCore GlobalSingletons.swift
[107/164] Compiling NIOCore IO.swift
[108/164] Compiling NIOCore IOData.swift
[109/164] Compiling NIOCore IPProtocol.swift
[110/164] Compiling NIOCore IntegerBitPacking.swift
[111/164] Compiling NIOCore IntegerTypes.swift
[112/164] Compiling NIOCore Interfaces.swift
[113/164] Compiling NIOCore Linux.swift
[114/164] Compiling NIOCore AddressedEnvelope.swift
[115/164] Compiling NIOCore AsyncAwaitSupport.swift
[116/164] Compiling NIOCore AsyncChannel.swift
[117/164] Compiling NIOCore AsyncChannelHandler.swift
[118/164] Compiling NIOCore AsyncChannelInboundStream.swift
[119/164] Compiling NIOCore AsyncChannelOutboundWriter.swift
[120/164] Compiling NIOCore NIOAsyncSequenceProducer.swift
[121/164] Compiling NIOCore NIOAsyncSequenceProducerStrategies.swift
[122/164] Compiling NIOCore NIOAsyncWriter.swift
[123/164] Compiling NIOCore SingleStepByteToMessageDecoder.swift
[124/164] Compiling NIOCore SocketAddresses.swift
[125/164] Compiling NIOCore SocketOptionProvider.swift
[126/164] Compiling NIOCore SystemCallHelpers.swift
[127/164] Compiling NIOCore TimeAmount+Duration.swift
[128/164] Compiling NIOCore TypeAssistedChannelHandler.swift
[129/164] Compiling NIOCore UniversalBootstrapSupport.swift
[130/164] Compiling NIOCore Utilities.swift
[131/164] Compiling NIOCore ChannelPipeline.swift
[132/164] Compiling NIOCore CircularBuffer.swift
[133/164] Compiling NIOCore Codec.swift
[134/164] Compiling NIOCore ConvenienceOptionSupport.swift
[135/164] Compiling NIOCore DeadChannel.swift
[136/164] Compiling NIOCore DispatchQueue+WithFuture.swift
[137/164] Compiling NIOCore EventLoop+Deprecated.swift
[138/164] Compiling NIOCore EventLoop+SerialExecutor.swift
[139/164] Compiling NIOCore EventLoop.swift
[140/164] Compiling NIOCore EventLoopFuture+AssumeIsolated.swift
[141/164] Compiling NIOCore EventLoopFuture+Deprecated.swift
[142/164] Compiling NIOCore EventLoopFuture+WithEventLoop.swift
[143/164] Compiling NIOCore EventLoopFuture.swift
[144/164] Compiling NIOCore FileDescriptor.swift
[145/164] Compiling NIOCore FileHandle.swift
[146/164] Compiling NIOCore FileRegion.swift
[147/164] Compiling NIOCore NIOThrowingAsyncSequenceProducer.swift
[148/164] Compiling NIOCore BSDSocketAPI.swift
[149/164] Compiling NIOCore ByteBuffer-aux.swift
[150/164] Compiling NIOCore ByteBuffer-binaryEncodedLengthPrefix.swift
[151/164] Compiling NIOCore ByteBuffer-conversions.swift
[152/164] Compiling NIOCore ByteBuffer-core.swift
[153/164] Compiling NIOCore ByteBuffer-hex.swift
[154/164] Compiling NIOCore ByteBuffer-int.swift
[155/164] Compiling NIOCore ByteBuffer-lengthPrefix.swift
[156/164] Compiling NIOCore ByteBuffer-multi-int.swift
[157/164] Compiling NIOCore ByteBuffer-quicBinaryEncodingStrategy.swift
[158/164] Compiling NIOCore ByteBuffer-views.swift
[159/164] Compiling NIOCore Channel.swift
[160/164] Compiling NIOCore ChannelHandler.swift
[161/164] Compiling NIOCore ChannelHandlers.swift
[162/164] Compiling NIOCore ChannelInvoker.swift
[163/164] Compiling NIOCore ChannelOption.swift
[164/164] Emitting module NIOCore
[166/216] Compiling NIOPosix PooledRecvBufferAllocator.swift
[167/216] Compiling NIOPosix PosixSingletons+ConcurrencyTakeOver.swift
[168/216] Compiling NIOPosix PosixSingletons.swift
[169/216] Compiling NIOPosix RawSocketBootstrap.swift
[170/216] Compiling NIOPosix Resolver.swift
[171/216] Compiling NIOPosix Selectable.swift
[172/222] Compiling NIOEmbedded Embedded.swift
[173/222] Compiling NIOEmbedded AsyncTestingEventLoop.swift
[174/222] Compiling NIOEmbedded AsyncTestingChannel.swift
[175/222] Emitting module NIOEmbedded
[177/223] Compiling NIOPosix ThreadPosix.swift
[178/223] Compiling NIOPosix ThreadWindows.swift
[179/223] Compiling NIOPosix UnsafeTransfer.swift
[180/223] Compiling NIOPosix Utilities.swift
[181/223] Compiling NIOPosix VsockAddress.swift
[182/223] Compiling NIOPosix VsockChannelEvents.swift
[183/223] Emitting module NIOPosix
[184/223] Compiling NIOPosix ServerSocket.swift
[185/223] Compiling NIOPosix Socket.swift
[186/223] Compiling NIOPosix SocketChannel.swift
[187/223] Compiling NIOPosix SocketProtocols.swift
[188/223] Compiling NIOPosix System.swift
[189/223] Compiling NIOPosix Thread.swift
[190/223] Compiling NIOPosix SelectableChannel.swift
[191/223] Compiling NIOPosix SelectableEventLoop.swift
[192/223] Compiling NIOPosix SelectorEpoll.swift
[193/223] Compiling NIOPosix SelectorGeneric.swift
[194/223] Compiling NIOPosix SelectorKqueue.swift
[195/223] Compiling NIOPosix SelectorUring.swift
[196/223] Compiling NIOPosix IO.swift
[197/223] Compiling NIOPosix IntegerBitPacking.swift
[198/223] Compiling NIOPosix IntegerTypes.swift
[199/223] Compiling NIOPosix Linux.swift
[200/223] Compiling NIOPosix LinuxCPUSet.swift
[201/223] Compiling NIOPosix LinuxUring.swift
[202/223] Compiling NIOPosix MultiThreadedEventLoopGroup.swift
[203/223] Compiling NIOPosix BSDSocketAPICommon.swift
[204/223] Compiling NIOPosix BSDSocketAPIPosix.swift
[205/223] Compiling NIOPosix BSDSocketAPIWindows.swift
[206/223] Compiling NIOPosix BaseSocket.swift
[207/223] Compiling NIOPosix BaseSocketChannel+SocketOptionProvider.swift
[208/223] Compiling NIOPosix BaseSocketChannel.swift
[209/223] Compiling NIOPosix BaseStreamSocketChannel.swift
[210/223] Compiling NIOPosix NIOThreadPool.swift
[211/223] Compiling NIOPosix NonBlockingFileIO.swift
[212/223] Compiling NIOPosix PendingDatagramWritesManager.swift
[213/223] Compiling NIOPosix PendingWritesManager.swift
[214/223] Compiling NIOPosix PipeChannel.swift
[215/223] Compiling NIOPosix PipePair.swift
[216/223] Compiling NIOPosix Pool.swift
[217/223] Compiling NIOPosix Bootstrap.swift
[218/223] Compiling NIOPosix ControlMessage.swift
[219/223] Compiling NIOPosix DatagramVectorReadManager.swift
[220/223] Compiling NIOPosix Errors+Any.swift
[221/223] Compiling NIOPosix FileDescriptor.swift
[222/223] Compiling NIOPosix GetaddrinfoResolver.swift
[223/223] Compiling NIOPosix HappyEyeballs.swift
[225/226] Emitting module NIO
[226/226] Compiling NIO Exports.swift
[228/232] Compiling NIOFoundationCompat WaitSpinningRunLoop.swift
[229/232] Compiling NIOFoundationCompat JSONSerialization+ByteBuffer.swift
[230/232] Compiling NIOFoundationCompat ByteBuffer-foundation.swift
[231/232] Compiling NIOFoundationCompat Codable+ByteBuffer.swift
[232/232] Emitting module NIOFoundationCompat
[234/240] Compiling NIORedis RESPPipelineSetup.swift
/host/spi-builder-workspace/Sources/NIORedis/RESPPipelineSetup.swift:25:28: warning: type 'RESPChannelHandler' does not conform to the 'Sendable' protocol
23 | -> EventLoopFuture<Void>
24 | {
25 | return self.addHandler(RESPChannelHandler(), name: name,
| `- warning: type 'RESPChannelHandler' does not conform to the 'Sendable' protocol
26 | position: first ? .first : .last)
27 | }
/host/spi-builder-workspace/Sources/NIORedis/RESPChannelHandler.swift:17:12: note: class 'RESPChannelHandler' does not conform to the 'Sendable' protocol
15 | import NIO
16 |
17 | open class RESPChannelHandler : ChannelDuplexHandler {
| `- note: class 'RESPChannelHandler' does not conform to the 'Sendable' protocol
18 |
19 | public typealias InboundErr = RESPParserError
[235/240] Compiling NIORedis RESPValue.swift
/host/spi-builder-workspace/Sources/NIORedis/RESPValue.swift:43:15: warning: stored property '_storage' of 'Sendable'-conforming struct 'RESPError' has non-sendable type 'RESPError._Storage'; this is an error in the Swift 6 language mode
33 | public var message : String { return _storage.message }
34 |
35 | private final class _Storage {
| `- note: class '_Storage' does not conform to the 'Sendable' protocol
36 | let code : String
37 | let message : String
:
41 | }
42 | }
43 | private let _storage : _Storage
| `- warning: stored property '_storage' of 'Sendable'-conforming struct 'RESPError' has non-sendable type 'RESPError._Storage'; this is an error in the Swift 6 language mode
44 |
45 | public var description: String {
[236/240] Compiling NIORedis ByteBufferExtras.swift
[237/240] Compiling NIORedis RESPEncodable.swift
[238/240] Compiling NIORedis RESPChannelHandler.swift
[239/240] Emitting module NIORedis
/host/spi-builder-workspace/Sources/NIORedis/RESPPipelineSetup.swift:25:28: warning: type 'RESPChannelHandler' does not conform to the 'Sendable' protocol
23 | -> EventLoopFuture<Void>
24 | {
25 | return self.addHandler(RESPChannelHandler(), name: name,
| `- warning: type 'RESPChannelHandler' does not conform to the 'Sendable' protocol
26 | position: first ? .first : .last)
27 | }
/host/spi-builder-workspace/Sources/NIORedis/RESPChannelHandler.swift:17:12: note: class 'RESPChannelHandler' does not conform to the 'Sendable' protocol
15 | import NIO
16 |
17 | open class RESPChannelHandler : ChannelDuplexHandler {
| `- note: class 'RESPChannelHandler' does not conform to the 'Sendable' protocol
18 |
19 | public typealias InboundErr = RESPParserError
/host/spi-builder-workspace/Sources/NIORedis/RESPValue.swift:43:15: warning: stored property '_storage' of 'Sendable'-conforming struct 'RESPError' has non-sendable type 'RESPError._Storage'; this is an error in the Swift 6 language mode
33 | public var message : String { return _storage.message }
34 |
35 | private final class _Storage {
| `- note: class '_Storage' does not conform to the 'Sendable' protocol
36 | let code : String
37 | let message : String
:
41 | }
42 | }
43 | private let _storage : _Storage
| `- warning: stored property '_storage' of 'Sendable'-conforming struct 'RESPError' has non-sendable type 'RESPError._Storage'; this is an error in the Swift 6 language mode
44 |
45 | public var description: String {
[240/240] Compiling NIORedis RESPParser.swift
Build complete! (33.02s)
Build complete.
{
"dependencies" : [
{
"identity" : "swift-nio",
"requirement" : {
"range" : [
{
"lower_bound" : "2.18.0",
"upper_bound" : "3.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/apple/swift-nio.git"
}
],
"manifest_display_name" : "swift-nio-redis",
"name" : "swift-nio-redis",
"path" : "/host/spi-builder-workspace",
"platforms" : [
],
"products" : [
{
"name" : "NIORedis",
"targets" : [
"NIORedis"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "NIORedisTests",
"module_type" : "SwiftTarget",
"name" : "NIORedisTests",
"path" : "Tests/NIORedisTests",
"sources" : [
"RESPValueTests.swift",
"XCTestManifests.swift"
],
"target_dependencies" : [
"NIORedis"
],
"type" : "test"
},
{
"c99name" : "NIORedis",
"module_type" : "SwiftTarget",
"name" : "NIORedis",
"path" : "Sources/NIORedis",
"product_dependencies" : [
"NIO",
"NIOFoundationCompat"
],
"product_memberships" : [
"NIORedis"
],
"sources" : [
"ByteBufferExtras.swift",
"RESPChannelHandler.swift",
"RESPEncodable.swift",
"RESPParser.swift",
"RESPPipelineSetup.swift",
"RESPValue.swift"
],
"type" : "library"
}
],
"tools_version" : "5.0"
}
basic-6.1-latest: Pulling from finestructure/spi-images
Digest: sha256:3bdcac04179f4ed3e5b8e9dbd6e74bbf5ebc0f4fde48bbaad7d1e5c757e65bcb
Status: Image is up to date for registry.gitlab.com/finestructure/spi-images:basic-6.1-latest
Done.