diff --git a/Podfile b/Podfile index 67e3e8a37..43126a2da 100644 --- a/Podfile +++ b/Podfile @@ -98,6 +98,26 @@ target 'SignalMessaging' do shared_pods end +target 'SignalUtilitiesKit' do + pod 'AFNetworking', inhibit_warnings: true + pod 'CryptoSwift', :inhibit_warnings => true + pod 'Curve25519Kit', :inhibit_warnings => true + pod 'GRKOpenSSLFramework', :inhibit_warnings => true + pod 'HKDFKit', :inhibit_warnings => true + pod 'libPhoneNumber-iOS', :inhibit_warnings => true + pod 'Mantle', git: 'https://github.com/signalapp/Mantle', branch: 'signal-master', :inhibit_warnings => true + pod 'PromiseKit', :inhibit_warnings => true + pod 'Reachability', :inhibit_warnings => true + pod 'SAMKeychain', :inhibit_warnings => true + pod 'Starscream', git: 'https://github.com/signalapp/Starscream.git', branch: 'signal-release', :inhibit_warnings => true + pod 'SwiftProtobuf', '~> 1.5.0', :inhibit_warnings => true + pod 'YapDatabase/SQLCipher', :git => 'https://github.com/signalapp/YapDatabase.git', branch: 'signal-release', :inhibit_warnings => true +end + +target 'SessionUIKit' do + +end + target 'SessionMessagingKit' do pod 'AFNetworking', inhibit_warnings: true pod 'CryptoSwift', :inhibit_warnings => true diff --git a/Podfile.lock b/Podfile.lock index 096a79587..dc9ac5f8a 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -206,12 +206,14 @@ DEPENDENCIES: - FeedKit (~> 8.1) - GRKOpenSSLFramework - HKDFKit + - libPhoneNumber-iOS - Mantle (from `https://github.com/signalapp/Mantle`, branch `signal-master`) - NVActivityIndicatorView (~> 4.7) - PromiseKit - PromiseKit (= 6.5.3) - PureLayout (~> 3.1.4) - Reachability + - SAMKeychain - SessionAxolotlKit (from `https://github.com/loki-project/session-ios-protocol-kit.git`, branch `master`) - SessionAxolotlKit/Tests (from `https://github.com/loki-project/session-ios-protocol-kit.git`, branch `master`) - SessionCoreKit (from `https://github.com/loki-project/session-ios-core-kit.git`) @@ -333,6 +335,6 @@ SPEC CHECKSUMS: YYImage: 6db68da66f20d9f169ceb94dfb9947c3867b9665 ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb -PODFILE CHECKSUM: 8fc5917e97576b902a46b328af80664381ede889 +PODFILE CHECKSUM: d78dc9a752cd3ce8f01fa327b8518dff3f5236d5 COCOAPODS: 1.10.0.rc.1 diff --git a/Pods b/Pods index 0c79ca436..e28da414f 160000 --- a/Pods +++ b/Pods @@ -1 +1 @@ -Subproject commit 0c79ca436b633fdf1b0daf90e86fd323dcc60c55 +Subproject commit e28da414f77b9cba508c92e90b16b815847cde7e diff --git a/SessionMessagingKit/Configuration.swift b/SessionMessagingKit/Configuration.swift index 020a21d3a..649cc8654 100644 --- a/SessionMessagingKit/Configuration.swift +++ b/SessionMessagingKit/Configuration.swift @@ -13,7 +13,7 @@ public struct Configuration { internal static var shared: Configuration! } -public enum SessionMessagingKit { // Just to make the external API nice +public enum SessionMessagingKitX { // Just to make the external API nice public static func configure( storage: SessionMessagingKitStorageProtocol, diff --git a/SessionMessagingKit/Sending & Receiving/MessageSender.swift b/SessionMessagingKit/Sending & Receiving/MessageSender.swift index abd9799d8..93f7328c6 100644 --- a/SessionMessagingKit/Sending & Receiving/MessageSender.swift +++ b/SessionMessagingKit/Sending & Receiving/MessageSender.swift @@ -2,15 +2,15 @@ import PromiseKit import SessionSnodeKit import SessionUtilitiesKit -internal enum MessageSender { +public enum MessageSender { - internal enum Error : LocalizedError { + public enum Error : LocalizedError { case invalidMessage case protoConversionFailed case proofOfWorkCalculationFailed case noUserPublicKey - internal var errorDescription: String? { + public var errorDescription: String? { switch self { case .invalidMessage: return "Invalid message." case .protoConversionFailed: return "Couldn't convert message to proto." diff --git a/SessionProtocolKit/Meta/SessionProtocolKit.h b/SessionProtocolKit/Meta/SessionProtocolKit.h index 82c84e815..99f92f97c 100644 --- a/SessionProtocolKit/Meta/SessionProtocolKit.h +++ b/SessionProtocolKit/Meta/SessionProtocolKit.h @@ -4,14 +4,20 @@ FOUNDATION_EXPORT double SessionProtocolKitVersionNumber; FOUNDATION_EXPORT const unsigned char SessionProtocolKitVersionString[]; #import +#import #import #import #import +#import #import #import +#import #import #import +#import #import #import #import +#import #import +#import diff --git a/SessionProtocolKit/Shared Sender Keys/ClosedGroupSenderKey.swift b/SessionProtocolKit/Shared Sender Keys/ClosedGroupSenderKey.swift index 05e81f3f0..da16b34ec 100644 --- a/SessionProtocolKit/Shared Sender Keys/ClosedGroupSenderKey.swift +++ b/SessionProtocolKit/Shared Sender Keys/ClosedGroupSenderKey.swift @@ -5,7 +5,7 @@ public final class ClosedGroupSenderKey : NSObject, NSCoding { // NSObject/NSCod public let publicKey: Data // MARK: Initialization - init(chainKey: Data, keyIndex: UInt, publicKey: Data) { + public init(chainKey: Data, keyIndex: UInt, publicKey: Data) { self.chainKey = chainKey self.keyIndex = keyIndex self.publicKey = publicKey diff --git a/SessionProtocolKit/Signal/Utility/Cryptography.m b/SessionProtocolKit/Signal/Utility/Cryptography.m index b6a84350e..5d9a5c402 100644 --- a/SessionProtocolKit/Signal/Utility/Cryptography.m +++ b/SessionProtocolKit/Signal/Utility/Cryptography.m @@ -7,7 +7,7 @@ #import "NSData+OWS.h" #import #import -#import +#import #import #import diff --git a/SessionProtocolKit/Signal/Utility/Randomness.h b/SessionProtocolKit/Signal/Utility/Randomness.h deleted file mode 100644 index f74b525ee..000000000 --- a/SessionProtocolKit/Signal/Utility/Randomness.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. -// - -#import - -@interface Randomness : NSObject - -/** - * Generates a given number of cryptographically secure bytes using SecRandomCopyBytes. - * - * @param numberBytes The number of bytes to be generated. - * - * @return Random Bytes. - */ - -+ (NSData *)generateRandomBytes:(int)numberBytes; - - -@end diff --git a/SessionProtocolKit/Signal/Utility/Randomness.m b/SessionProtocolKit/Signal/Utility/Randomness.m deleted file mode 100644 index 27fbdf562..000000000 --- a/SessionProtocolKit/Signal/Utility/Randomness.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. -// - -#import "Randomness.h" -#import - -@implementation Randomness - -+ (NSData *)generateRandomBytes:(int)numberBytes -{ - NSMutableData *_Nullable randomBytes = [NSMutableData dataWithLength:numberBytes]; - if (!randomBytes) { - OWSFail(@"Could not allocate buffer for random bytes."); - } - int err = 0; - err = SecRandomCopyBytes(kSecRandomDefault, numberBytes, [randomBytes mutableBytes]); - if (err != noErr || randomBytes.length != numberBytes) { - OWSFail(@"Could not generate random bytes."); - } - return [randomBytes copy]; -} - -@end diff --git a/SessionSnodeKit/Snode.swift b/SessionSnodeKit/Snode.swift index 6392787a3..9b185edbb 100644 --- a/SessionSnodeKit/Snode.swift +++ b/SessionSnodeKit/Snode.swift @@ -3,7 +3,7 @@ import Foundation public final class Snode : NSObject, NSCoding { // NSObject/NSCoding conformance is needed for YapDatabase compatibility public let address: String public let port: UInt16 - internal let publicKeySet: KeySet + public let publicKeySet: KeySet public var ip: String { address.removingPrefix("https://") @@ -16,9 +16,9 @@ public final class Snode : NSObject, NSCoding { // NSObject/NSCoding conformance case sendMessage = "store" } - internal struct KeySet { - let ed25519Key: String - let x25519Key: String + public struct KeySet { + public let ed25519Key: String + public let x25519Key: String } // MARK: Initialization diff --git a/SessionSnodeKit/SnodeAPI.swift b/SessionSnodeKit/SnodeAPI.swift index 9b59c153c..58aa04fdd 100644 --- a/SessionSnodeKit/SnodeAPI.swift +++ b/SessionSnodeKit/SnodeAPI.swift @@ -1,15 +1,18 @@ import PromiseKit import SessionUtilitiesKit -public enum SnodeAPI { +@objc(SNSnodeAPI) +public final class SnodeAPI : NSObject { /// - Note: Should only be accessed from `Threading.workQueue` to avoid race conditions. internal static var snodeFailureCount: [Snode:UInt] = [:] /// - Note: Should only be accessed from `Threading.workQueue` to avoid race conditions. internal static var snodePool: Set = [] + /// - Note: Should only be accessed from `Threading.workQueue` to avoid race conditions. - internal static var swarmCache: [String:Set] = [:] - + public static var swarmCache: [String:Set] = [:] + public static var workQueue: DispatchQueue { Threading.workQueue } + // MARK: Settings private static let maxRetryCount: UInt = 4 private static let minimumSnodePoolCount = 64 @@ -25,11 +28,13 @@ public enum SnodeAPI { // MARK: Error public enum Error : LocalizedError { + case generic case clockOutOfSync case randomSnodePoolUpdatingFailed public var errorDescription: String? { switch self { + case .generic: return "An error occurred." case .clockOutOfSync: return "Your clock is out of sync with the service node network." case .randomSnodePoolUpdatingFailed: return "Failed to update random service node pool." } @@ -41,8 +46,8 @@ public enum SnodeAPI { public typealias RawResponse = Any public typealias RawResponsePromise = Promise - // MARK: Core - internal static func invoke(_ method: Snode.Method, on snode: Snode, associatedWith publicKey: String, parameters: JSON) -> RawResponsePromise { + // MARK: Internal API + public static func invoke(_ method: Snode.Method, on snode: Snode, associatedWith publicKey: String, parameters: JSON) -> RawResponsePromise { if useOnionRequests { return OnionRequestAPI.sendOnionRequest(to: snode, invoking: method, with: parameters, associatedWith: publicKey).map2 { $0 as Any } } else { @@ -109,35 +114,6 @@ public enum SnodeAPI { } } - internal static func getSwarm(for publicKey: String, isForcedReload: Bool = false) -> Promise> { - if swarmCache[publicKey] == nil { - swarmCache[publicKey] = Configuration.shared.storage.getSwarm(for: publicKey) - } - if let cachedSwarm = swarmCache[publicKey], cachedSwarm.count >= minimumSwarmSnodeCount && !isForcedReload { - return Promise> { $0.fulfill(cachedSwarm) } - } else { - SNLog("Getting swarm for: \((publicKey == Configuration.shared.storage.getUserPublicKey()) ? "self" : publicKey).") - let parameters: [String:Any] = [ "pubKey" : publicKey ] - return getRandomSnode().then2 { snode in - attempt(maxRetryCount: 4, recoveringOn: Threading.workQueue) { - invoke(.getSwarm, on: snode, associatedWith: publicKey, parameters: parameters) - } - }.map2 { rawSnodes in - let swarm = parseSnodes(from: rawSnodes) - swarmCache[publicKey] = swarm - Configuration.shared.storage.with { transaction in - Configuration.shared.storage.setSwarm(to: swarm, for: publicKey, using: transaction) - } - return swarm - } - } - } - - internal static func getTargetSnodes(for publicKey: String) -> Promise<[Snode]> { - // shuffled() uses the system's default random generator, which is cryptographically secure - return getSwarm(for: publicKey).map2 { Array($0.shuffled().prefix(targetSwarmSnodeCount)) } - } - internal static func dropSnodeFromSnodePool(_ snode: Snode) { var snodePool = SnodeAPI.snodePool snodePool.remove(snode) @@ -154,7 +130,8 @@ public enum SnodeAPI { } } - internal static func dropSnodeFromSwarmIfNeeded(_ snode: Snode, publicKey: String) { + // MARK: Public API + public static func dropSnodeFromSwarmIfNeeded(_ snode: Snode, publicKey: String) { let swarm = SnodeAPI.swarmCache[publicKey] if var swarm = swarm, let index = swarm.firstIndex(of: snode) { swarm.remove(at: index) @@ -165,16 +142,55 @@ public enum SnodeAPI { } } - // MARK: Receiving + public static func getTargetSnodes(for publicKey: String) -> Promise<[Snode]> { + // shuffled() uses the system's default random generator, which is cryptographically secure + return getSwarm(for: publicKey).map2 { Array($0.shuffled().prefix(targetSwarmSnodeCount)) } + } + + public static func getSwarm(for publicKey: String, isForcedReload: Bool = false) -> Promise> { + if swarmCache[publicKey] == nil { + swarmCache[publicKey] = Configuration.shared.storage.getSwarm(for: publicKey) + } + if let cachedSwarm = swarmCache[publicKey], cachedSwarm.count >= minimumSwarmSnodeCount && !isForcedReload { + return Promise> { $0.fulfill(cachedSwarm) } + } else { + SNLog("Getting swarm for: \((publicKey == Configuration.shared.storage.getUserPublicKey()) ? "self" : publicKey).") + let parameters: [String:Any] = [ "pubKey" : publicKey ] + return getRandomSnode().then2 { snode in + attempt(maxRetryCount: 4, recoveringOn: Threading.workQueue) { + invoke(.getSwarm, on: snode, associatedWith: publicKey, parameters: parameters) + } + }.map2 { rawSnodes in + let swarm = parseSnodes(from: rawSnodes) + swarmCache[publicKey] = swarm + Configuration.shared.storage.with { transaction in + Configuration.shared.storage.setSwarm(to: swarm, for: publicKey, using: transaction) + } + return swarm + } + } + } + + public static func getRawMessages(from snode: Snode, associatedWith publicKey: String) -> RawResponsePromise { + let storage = Configuration.shared.storage + storage.with { transaction in + storage.pruneLastMessageHashInfoIfExpired(for: snode, associatedWith: publicKey, using: transaction) + } + let lastHash = storage.getLastMessageHash(for: snode, associatedWith: publicKey) ?? "" + let parameters = [ "pubKey" : publicKey, "lastHash" : lastHash ] + return invoke(.getMessages, on: snode, associatedWith: publicKey, parameters: parameters) + } + public static func getMessages(for publicKey: String) -> Promise> { let (promise, seal) = Promise>.pending() + let storage = Configuration.shared.storage Threading.workQueue.async { attempt(maxRetryCount: maxRetryCount, recoveringOn: Threading.workQueue) { getTargetSnodes(for: publicKey).mapValues2 { targetSnode in - Configuration.shared.storage.with { transaction in - Configuration.shared.storage.pruneLastMessageHashInfoIfExpired(for: targetSnode, associatedWith: publicKey, using: transaction) + storage.with { transaction in + storage.pruneLastMessageHashInfoIfExpired(for: targetSnode, associatedWith: publicKey, using: transaction) } - let lastHash = Configuration.shared.storage.getLastMessageHash(for: targetSnode, associatedWith: publicKey) ?? "" + let lastHash = storage.getLastMessageHash(for: targetSnode, associatedWith: publicKey) ?? "" let parameters = [ "pubKey" : publicKey, "lastHash" : lastHash ] return invoke(.getMessages, on: targetSnode, associatedWith: publicKey, parameters: parameters).map2 { rawResponse in parseRawMessagesResponse(rawResponse, from: targetSnode, associatedWith: publicKey) @@ -185,7 +201,6 @@ public enum SnodeAPI { return promise } - // MARK: Sending public static func sendMessage(_ message: SnodeMessage) -> Promise> { let (promise, seal) = Promise>.pending() let publicKey = message.recipient @@ -230,7 +245,7 @@ public enum SnodeAPI { }) } - internal static func parseRawMessagesResponse(_ rawResponse: Any, from snode: Snode, associatedWith publicKey: String) -> [JSON] { + public static func parseRawMessagesResponse(_ rawResponse: Any, from snode: Snode, associatedWith publicKey: String) -> [JSON] { guard let json = rawResponse as? JSON, let rawMessages = json["messages"] as? [JSON] else { return [] } updateLastMessageHashValueIfPossible(for: snode, associatedWith: publicKey, from: rawMessages) return removeDuplicates(from: rawMessages, associatedWith: publicKey) diff --git a/SessionSnodeKit/Utilities/Promise+Threading.swift b/SessionSnodeKit/Utilities/Promise+Threading.swift index 7b4936794..ce7d5ab7a 100644 --- a/SessionSnodeKit/Utilities/Promise+Threading.swift +++ b/SessionSnodeKit/Utilities/Promise+Threading.swift @@ -1,6 +1,6 @@ import PromiseKit -internal extension Thenable { +public extension Thenable { @discardableResult func then2(_ body: @escaping (T) throws -> U) -> Promise where U : Thenable { @@ -23,7 +23,7 @@ internal extension Thenable { } } -internal extension Thenable where T: Sequence { +public extension Thenable where T: Sequence { @discardableResult func mapValues2(_ transform: @escaping (T.Iterator.Element) throws -> U) -> Promise<[U]> { @@ -31,7 +31,7 @@ internal extension Thenable where T: Sequence { } } -internal extension Guarantee { +public extension Guarantee { @discardableResult func then2(_ body: @escaping (T) -> Guarantee) -> Guarantee { @@ -54,7 +54,7 @@ internal extension Guarantee { } } -internal extension CatchMixin { +public extension CatchMixin { @discardableResult func catch2(_ body: @escaping (Error) -> Void) -> PMKFinalizer { @@ -77,7 +77,7 @@ internal extension CatchMixin { } } -internal extension CatchMixin where T == Void { +public extension CatchMixin where T == Void { @discardableResult func recover2(_ body: @escaping(Error) -> Void) -> Guarantee { diff --git a/SessionSnodeKit/Utilities/Promise+Delaying.swift b/SessionUtilitiesKit/Promise+Delaying.swift similarity index 77% rename from SessionSnodeKit/Utilities/Promise+Delaying.swift rename to SessionUtilitiesKit/Promise+Delaying.swift index 9bb1ee1d2..7e02f4e88 100644 --- a/SessionSnodeKit/Utilities/Promise+Delaying.swift +++ b/SessionUtilitiesKit/Promise+Delaying.swift @@ -1,7 +1,7 @@ import PromiseKit /// Delay the execution of the promise constructed in `body` by `delay` seconds. -internal func withDelay(_ delay: TimeInterval, completionQueue: DispatchQueue, body: @escaping () -> Promise) -> Promise { +public func withDelay(_ delay: TimeInterval, completionQueue: DispatchQueue, body: @escaping () -> Promise) -> Promise { #if DEBUG assert(Thread.current.isMainThread) // Timers don't do well on background queues #endif diff --git a/Signal.xcodeproj/project.pbxproj b/Signal.xcodeproj/project.pbxproj index b87914bce..aa6d3e741 100644 --- a/Signal.xcodeproj/project.pbxproj +++ b/Signal.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 10AC6C7D50A0C865C5E4779B /* Pods_SessionUIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71CFEDD2D3C54277731012DF /* Pods_SessionUIKit.framework */; }; 2400888E239F30A600305217 /* SessionRestorationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2400888D239F30A600305217 /* SessionRestorationView.swift */; }; 2AE2882E4C2B96BFFF9EE27C /* Pods_SignalShareExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0F94C85CB0B235DA37F68ED0 /* Pods_SignalShareExtension.framework */; }; 3403B95D20EA9527001A1F44 /* OWSContactShareButtonsView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3403B95B20EA9526001A1F44 /* OWSContactShareButtonsView.m */; }; @@ -496,6 +497,7 @@ B10C9B601A7049EC00ECA2BF /* pause_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B10C9B5C1A7049EC00ECA2BF /* pause_icon@2x.png */; }; B10C9B611A7049EC00ECA2BF /* play_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = B10C9B5D1A7049EC00ECA2BF /* play_icon.png */; }; B10C9B621A7049EC00ECA2BF /* play_icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B10C9B5E1A7049EC00ECA2BF /* play_icon@2x.png */; }; + B3E0C9C6F1633B1ABCE5AD0B /* Pods_SignalUtilitiesKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53D547348A367C8A14D37FC0 /* Pods_SignalUtilitiesKit.framework */; }; B60EDE041A05A01700D73516 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B60EDE031A05A01700D73516 /* AudioToolbox.framework */; }; B633C5861A1D190B0059AC12 /* call@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C5041A1D190B0059AC12 /* call@2x.png */; }; B633C58D1A1D190B0059AC12 /* contact_default_feed.png in Resources */ = {isa = PBXBuildFile; fileRef = B633C50B1A1D190B0059AC12 /* contact_default_feed.png */; }; @@ -599,6 +601,434 @@ C331FFF42558FF0300070591 /* PNOptionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C353F8F8244809150011121A /* PNOptionView.swift */; }; C331FFFE2558FF3B00070591 /* ConversationCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8BB82AA238F669C00BA5194 /* ConversationCell.swift */; }; C33FD4E9255A149100E217F9 /* Colors.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C39DD28724F3318C008590FC /* Colors.xcassets */; }; + C33FD9AF255A548A00E217F9 /* SignalUtilitiesKit.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FD9AD255A548A00E217F9 /* SignalUtilitiesKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FD9B2255A548A00E217F9 /* SignalUtilitiesKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C33FD9AB255A548A00E217F9 /* SignalUtilitiesKit.framework */; }; + C33FD9B3255A548A00E217F9 /* SignalUtilitiesKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C33FD9AB255A548A00E217F9 /* SignalUtilitiesKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + C33FD9C2255A54EF00E217F9 /* SessionMessagingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3C2A6F025539DE700C340D1 /* SessionMessagingKit.framework */; }; + C33FD9C3255A54EF00E217F9 /* SessionProtocolKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3C2A8622553B41A00C340D1 /* SessionProtocolKit.framework */; }; + C33FD9C4255A54EF00E217F9 /* SessionSnodeKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3C2A59F255385C100C340D1 /* SessionSnodeKit.framework */; }; + C33FD9C5255A54EF00E217F9 /* SessionUtilitiesKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3C2A679255388CC00C340D1 /* SessionUtilitiesKit.framework */; }; + C33FDC20255A581F00E217F9 /* OWSOutgoingCallMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA66255A57F900E217F9 /* OWSOutgoingCallMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC21255A581F00E217F9 /* OWSPrimaryStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA67255A57F900E217F9 /* OWSPrimaryStorage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC22255A581F00E217F9 /* OWSBlockingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA68255A57F900E217F9 /* OWSBlockingManager.m */; }; + C33FDC23255A581F00E217F9 /* SSKPreferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA69255A57F900E217F9 /* SSKPreferences.swift */; }; + C33FDC24255A581F00E217F9 /* OWSMessageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA6A255A57F900E217F9 /* OWSMessageManager.m */; }; + C33FDC25255A581F00E217F9 /* OWSDisappearingConfigurationUpdateInfoMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA6B255A57FA00E217F9 /* OWSDisappearingConfigurationUpdateInfoMessage.m */; }; + C33FDC26255A581F00E217F9 /* ProtoUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA6C255A57FA00E217F9 /* ProtoUtils.m */; }; + C33FDC27255A581F00E217F9 /* YapDatabase+Promise.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA6D255A57FA00E217F9 /* YapDatabase+Promise.swift */; }; + C33FDC28255A581F00E217F9 /* Array+Description.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA6E255A57FA00E217F9 /* Array+Description.swift */; }; + C33FDC29255A581F00E217F9 /* ReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA6F255A57FA00E217F9 /* ReachabilityManager.swift */; }; + C33FDC2A255A581F00E217F9 /* TSMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA70255A57FA00E217F9 /* TSMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC2B255A581F00E217F9 /* OWSReadReceiptManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA71255A57FA00E217F9 /* OWSReadReceiptManager.m */; }; + C33FDC2C255A581F00E217F9 /* OWSFailedAttachmentDownloadsJob.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA72255A57FA00E217F9 /* OWSFailedAttachmentDownloadsJob.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC2D255A581F00E217F9 /* ECKeyPair+Hexadecimal.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA73255A57FA00E217F9 /* ECKeyPair+Hexadecimal.swift */; }; + C33FDC2E255A581F00E217F9 /* ClosedGroupsProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA74255A57FB00E217F9 /* ClosedGroupsProtocol.swift */; }; + C33FDC2F255A581F00E217F9 /* OWSSyncManagerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA75255A57FB00E217F9 /* OWSSyncManagerProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC30255A581F00E217F9 /* OWSSyncGroupsRequestMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA76255A57FB00E217F9 /* OWSSyncGroupsRequestMessage.m */; }; + C33FDC31255A581F00E217F9 /* Contact.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA77255A57FB00E217F9 /* Contact.m */; }; + C33FDC32255A581F00E217F9 /* SSKWebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA78255A57FB00E217F9 /* SSKWebSocket.swift */; }; + C33FDC33255A581F00E217F9 /* TSGroupThread.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA79255A57FB00E217F9 /* TSGroupThread.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC34255A581F00E217F9 /* NSRegularExpression+SSK.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA7A255A57FB00E217F9 /* NSRegularExpression+SSK.swift */; }; + C33FDC35255A581F00E217F9 /* TSInvalidIdentityKeyReceivingErrorMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA7B255A57FB00E217F9 /* TSInvalidIdentityKeyReceivingErrorMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC36255A581F00E217F9 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA7C255A57FB00E217F9 /* Debugging.swift */; }; + C33FDC37255A581F00E217F9 /* OWSCensorshipConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA7D255A57FB00E217F9 /* OWSCensorshipConfiguration.m */; }; + C33FDC38255A581F00E217F9 /* Mention.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA7E255A57FB00E217F9 /* Mention.swift */; }; + C33FDC39255A581F00E217F9 /* OWSRecordTranscriptJob.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA7F255A57FC00E217F9 /* OWSRecordTranscriptJob.m */; }; + C33FDC3A255A581F00E217F9 /* OWSDisappearingMessagesJob.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA80255A57FC00E217F9 /* OWSDisappearingMessagesJob.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC3B255A581F00E217F9 /* MentionsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA81255A57FC00E217F9 /* MentionsManager.swift */; }; + C33FDC3D255A581F00E217F9 /* Promise+retainUntilComplete.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA83255A57FC00E217F9 /* Promise+retainUntilComplete.swift */; }; + C33FDC3E255A581F00E217F9 /* ContactsUpdater.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA84255A57FC00E217F9 /* ContactsUpdater.m */; }; + C33FDC3F255A581F00E217F9 /* OWSPrimaryStorage+Loki.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA85255A57FC00E217F9 /* OWSPrimaryStorage+Loki.swift */; }; + C33FDC40255A581F00E217F9 /* OWSDisappearingMessagesFinder.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA86255A57FC00E217F9 /* OWSDisappearingMessagesFinder.m */; }; + C33FDC41255A581F00E217F9 /* TypingIndicators.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA87255A57FC00E217F9 /* TypingIndicators.swift */; }; + C33FDC42255A581F00E217F9 /* YapDatabaseTransaction+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA88255A57FD00E217F9 /* YapDatabaseTransaction+OWS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC43255A581F00E217F9 /* OWSAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA89255A57FD00E217F9 /* OWSAnalytics.m */; }; + C33FDC44255A581F00E217F9 /* PhoneNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA8A255A57FD00E217F9 /* PhoneNumber.m */; }; + C33FDC45255A581F00E217F9 /* AppVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA8B255A57FD00E217F9 /* AppVersion.m */; }; + C33FDC46255A581F00E217F9 /* PublicChatPoller.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA8C255A57FD00E217F9 /* PublicChatPoller.swift */; }; + C33FDC47255A581F00E217F9 /* OWSReceiptsForSenderMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA8D255A57FD00E217F9 /* OWSReceiptsForSenderMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC48255A581F00E217F9 /* OWSFileSystem.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA8E255A57FD00E217F9 /* OWSFileSystem.m */; }; + C33FDC49255A581F00E217F9 /* NSTimer+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA8F255A57FD00E217F9 /* NSTimer+OWS.m */; }; + C33FDC4A255A582000E217F9 /* TSYapDatabaseObject.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA90255A57FD00E217F9 /* TSYapDatabaseObject.m */; }; + C33FDC4B255A582000E217F9 /* LKSyncOpenGroupsMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA91255A57FD00E217F9 /* LKSyncOpenGroupsMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC4C255A582000E217F9 /* OWSMessageSender.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA92255A57FE00E217F9 /* OWSMessageSender.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC4E255A582000E217F9 /* Data+Streaming.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA94255A57FE00E217F9 /* Data+Streaming.swift */; }; + C33FDC4F255A582000E217F9 /* OWSChunkedOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA95255A57FE00E217F9 /* OWSChunkedOutputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC50255A582000E217F9 /* OWSDispatch.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA96255A57FE00E217F9 /* OWSDispatch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC51255A582000E217F9 /* TSIncomingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA97255A57FE00E217F9 /* TSIncomingMessage.m */; }; + C33FDC52255A582000E217F9 /* RotateSignedKeyOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA98255A57FE00E217F9 /* RotateSignedKeyOperation.swift */; }; + C33FDC53255A582000E217F9 /* OutageDetection.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA99255A57FE00E217F9 /* OutageDetection.swift */; }; + C33FDC54255A582000E217F9 /* OWSLinkedDeviceReadReceipt.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA9A255A57FE00E217F9 /* OWSLinkedDeviceReadReceipt.m */; }; + C33FDC55255A582000E217F9 /* OWSProvisioningMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA9B255A57FE00E217F9 /* OWSProvisioningMessage.m */; }; + C33FDC56255A582000E217F9 /* OWSSyncContactsMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA9C255A57FE00E217F9 /* OWSSyncContactsMessage.m */; }; + C33FDC57255A582000E217F9 /* OWSContactsOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDA9D255A57FF00E217F9 /* OWSContactsOutputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC58255A582000E217F9 /* ReverseDispatchQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA9E255A57FF00E217F9 /* ReverseDispatchQueue.swift */; }; + C33FDC59255A582000E217F9 /* NetworkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDA9F255A57FF00E217F9 /* NetworkManager.swift */; }; + C33FDC5A255A582000E217F9 /* OWSRecipientIdentity.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAA0255A57FF00E217F9 /* OWSRecipientIdentity.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC5B255A582000E217F9 /* TSYapDatabaseObject.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAA1255A57FF00E217F9 /* TSYapDatabaseObject.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC5C255A582000E217F9 /* OWSAddToContactsOfferMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAA2255A57FF00E217F9 /* OWSAddToContactsOfferMessage.m */; }; + C33FDC5D255A582000E217F9 /* OWSAddToContactsOfferMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAA3255A57FF00E217F9 /* OWSAddToContactsOfferMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC5E255A582000E217F9 /* SSKProto.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAA4255A57FF00E217F9 /* SSKProto.swift */; }; + C33FDC5F255A582000E217F9 /* OWSRequestMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAA5255A57FF00E217F9 /* OWSRequestMaker.swift */; }; + C33FDC60255A582000E217F9 /* OWSLinkedDeviceReadReceipt.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAA6255A57FF00E217F9 /* OWSLinkedDeviceReadReceipt.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC61255A582000E217F9 /* OWSPrimaryStorage+SignedPreKeyStore.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAA7255A57FF00E217F9 /* OWSPrimaryStorage+SignedPreKeyStore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC62255A582000E217F9 /* BuildConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAA8255A57FF00E217F9 /* BuildConfiguration.swift */; }; + C33FDC63255A582000E217F9 /* Mnemonic.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAA9255A580000E217F9 /* Mnemonic.swift */; }; + C33FDC64255A582000E217F9 /* NSObject+Casting.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAAA255A580000E217F9 /* NSObject+Casting.m */; }; + C33FDC65255A582000E217F9 /* OWSWebSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAAB255A580000E217F9 /* OWSWebSocket.m */; }; + C33FDC66255A582000E217F9 /* OWSMessageHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAAC255A580000E217F9 /* OWSMessageHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC67255A582000E217F9 /* OWSDeviceProvisioner.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAAD255A580000E217F9 /* OWSDeviceProvisioner.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC68255A582000E217F9 /* OWSReceiptsForSenderMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAAE255A580000E217F9 /* OWSReceiptsForSenderMessage.m */; }; + C33FDC69255A582000E217F9 /* String+Trimming.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAAF255A580000E217F9 /* String+Trimming.swift */; }; + C33FDC6A255A582000E217F9 /* ProvisioningProto.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAB0255A580000E217F9 /* ProvisioningProto.swift */; }; + C33FDC6B255A582000E217F9 /* OWSStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAB1255A580000E217F9 /* OWSStorage.m */; }; + C33FDC6C255A582000E217F9 /* TSNetworkManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAB2255A580000E217F9 /* TSNetworkManager.m */; }; + C33FDC6D255A582000E217F9 /* TSContactThread.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAB3255A580000E217F9 /* TSContactThread.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC6E255A582000E217F9 /* OWSMessageReceiver.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAB4255A580000E217F9 /* OWSMessageReceiver.m */; }; + C33FDC6F255A582000E217F9 /* TSNetworkManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAB5255A580000E217F9 /* TSNetworkManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC70255A582000E217F9 /* SyncMessagesProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAB6255A580100E217F9 /* SyncMessagesProtocol.swift */; }; + C33FDC71255A582000E217F9 /* OWSFailedMessagesJob.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAB7255A580100E217F9 /* OWSFailedMessagesJob.m */; }; + C33FDC72255A582000E217F9 /* NSArray+Functional.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAB8255A580100E217F9 /* NSArray+Functional.m */; }; + C33FDC73255A582000E217F9 /* OWSStorage+Subclass.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAB9255A580100E217F9 /* OWSStorage+Subclass.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC74255A582000E217F9 /* OWSWebSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDABA255A580100E217F9 /* OWSWebSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC75255A582000E217F9 /* OWSGroupsOutputStream.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDABB255A580100E217F9 /* OWSGroupsOutputStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC77255A582000E217F9 /* OWSOutgoingReceiptManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDABD255A580100E217F9 /* OWSOutgoingReceiptManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC78255A582000E217F9 /* TSConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDABE255A580100E217F9 /* TSConstants.m */; }; + C33FDC7A255A582000E217F9 /* OWSIncomingMessageFinder.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAC0255A580100E217F9 /* OWSIncomingMessageFinder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC7B255A582000E217F9 /* NSSet+Functional.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAC1255A580100E217F9 /* NSSet+Functional.m */; }; + C33FDC7C255A582000E217F9 /* TSAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAC2255A580200E217F9 /* TSAttachment.m */; }; + C33FDC7D255A582000E217F9 /* OWSDispatch.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAC3255A580200E217F9 /* OWSDispatch.m */; }; + C33FDC7E255A582000E217F9 /* TSAttachmentStream.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAC4255A580200E217F9 /* TSAttachmentStream.m */; }; + C33FDC7F255A582000E217F9 /* OWSCountryMetadata.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAC5255A580200E217F9 /* OWSCountryMetadata.m */; }; + C33FDC80255A582000E217F9 /* Fingerprint.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAC6255A580200E217F9 /* Fingerprint.pb.swift */; }; + C33FDC81255A582000E217F9 /* OWSSignalService.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAC7255A580200E217F9 /* OWSSignalService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC82255A582000E217F9 /* OWSCensorshipConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAC8255A580200E217F9 /* OWSCensorshipConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC83255A582000E217F9 /* OWSContact.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAC9255A580200E217F9 /* OWSContact.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC84255A582000E217F9 /* LokiMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDACA255A580200E217F9 /* LokiMessage.swift */; }; + C33FDC85255A582000E217F9 /* CDSSigningCertificate.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDACB255A580200E217F9 /* CDSSigningCertificate.m */; }; + C33FDC86255A582000E217F9 /* OWSMessageSend.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDACC255A580200E217F9 /* OWSMessageSend.swift */; }; + C33FDC87255A582000E217F9 /* SSKJobRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDACD255A580200E217F9 /* SSKJobRecord.m */; }; + C33FDC88255A582000E217F9 /* OWSVerificationStateSyncMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDACE255A580300E217F9 /* OWSVerificationStateSyncMessage.m */; }; + C33FDC89255A582000E217F9 /* OWSAttachmentDownloads.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDACF255A580300E217F9 /* OWSAttachmentDownloads.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC8A255A582000E217F9 /* CDSQuote.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAD0255A580300E217F9 /* CDSQuote.m */; }; + C33FDC8B255A582000E217F9 /* OWSDynamicOutgoingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAD1255A580300E217F9 /* OWSDynamicOutgoingMessage.m */; }; + C33FDC8C255A582000E217F9 /* Contact.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAD2255A580300E217F9 /* Contact.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC8D255A582000E217F9 /* TSThread.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAD3255A580300E217F9 /* TSThread.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC8E255A582000E217F9 /* EncryptionUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAD4255A580300E217F9 /* EncryptionUtilities.swift */; }; + C33FDC8F255A582000E217F9 /* TSQuotedMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAD5255A580300E217F9 /* TSQuotedMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC90255A582000E217F9 /* OWSAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAD6255A580300E217F9 /* OWSAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC91255A582000E217F9 /* OWSDeviceProvisioner.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAD7255A580300E217F9 /* OWSDeviceProvisioner.m */; }; + C33FDC92255A582000E217F9 /* OWSGroupsOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAD8255A580300E217F9 /* OWSGroupsOutputStream.m */; }; + C33FDC93255A582000E217F9 /* OWSDisappearingMessagesConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAD9255A580300E217F9 /* OWSDisappearingMessagesConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC94255A582000E217F9 /* OWSDisappearingConfigurationUpdateInfoMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDADA255A580400E217F9 /* OWSDisappearingConfigurationUpdateInfoMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC95255A582000E217F9 /* OWSFailedMessagesJob.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDADB255A580400E217F9 /* OWSFailedMessagesJob.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC96255A582000E217F9 /* NSObject+Casting.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDADC255A580400E217F9 /* NSObject+Casting.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC97255A582000E217F9 /* TSInfoMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDADD255A580400E217F9 /* TSInfoMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC98255A582000E217F9 /* SwiftSingletons.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDADE255A580400E217F9 /* SwiftSingletons.swift */; }; + C33FDC99255A582000E217F9 /* PublicChatManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDADF255A580400E217F9 /* PublicChatManager.swift */; }; + C33FDC9A255A582000E217F9 /* ByteParser.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAE0255A580400E217F9 /* ByteParser.m */; }; + C33FDC9B255A582000E217F9 /* OWSReadTracking.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAE1255A580400E217F9 /* OWSReadTracking.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC9C255A582000E217F9 /* OWSReadReceiptsForLinkedDevicesMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAE2255A580400E217F9 /* OWSReadReceiptsForLinkedDevicesMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC9D255A582000E217F9 /* TSPrefix.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAE3255A580400E217F9 /* TSPrefix.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC9E255A582000E217F9 /* TSAttachmentStream.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAE4255A580400E217F9 /* TSAttachmentStream.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDC9F255A582000E217F9 /* OWSAddToProfileWhitelistOfferMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAE5255A580400E217F9 /* OWSAddToProfileWhitelistOfferMessage.m */; }; + C33FDCA0255A582000E217F9 /* TSInteraction.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAE6255A580400E217F9 /* TSInteraction.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCA1255A582000E217F9 /* TSErrorMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAE7255A580500E217F9 /* TSErrorMessage.m */; }; + C33FDCA2255A582000E217F9 /* OWSMessageUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAE8255A580500E217F9 /* OWSMessageUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCA3255A582000E217F9 /* SSKMessageSenderJobRecord.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAE9255A580500E217F9 /* SSKMessageSenderJobRecord.m */; }; + C33FDCA4255A582000E217F9 /* OWSBackupFragment.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAEA255A580500E217F9 /* OWSBackupFragment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCA5255A582000E217F9 /* OWSDeviceProvisioningCodeService.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAEB255A580500E217F9 /* OWSDeviceProvisioningCodeService.m */; }; + C33FDCA6255A582000E217F9 /* SignalRecipient.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAEC255A580500E217F9 /* SignalRecipient.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCA7255A582000E217F9 /* SSKMessageSenderJobRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAED255A580500E217F9 /* SSKMessageSenderJobRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCA8255A582000E217F9 /* OWSFingerprintBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAEE255A580500E217F9 /* OWSFingerprintBuilder.m */; }; + C33FDCA9255A582000E217F9 /* NSData+Image.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAEF255A580500E217F9 /* NSData+Image.m */; }; + C33FDCAA255A582000E217F9 /* ContactsUpdater.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAF0255A580500E217F9 /* ContactsUpdater.h */; }; + C33FDCAB255A582000E217F9 /* OWSThumbnailService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAF1255A580500E217F9 /* OWSThumbnailService.swift */; }; + C33FDCAC255A582000E217F9 /* ProxiedContentDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAF2255A580500E217F9 /* ProxiedContentDownloader.swift */; }; + C33FDCAD255A582000E217F9 /* OWSPrimaryStorage+SessionStore.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAF3255A580500E217F9 /* OWSPrimaryStorage+SessionStore.m */; }; + C33FDCAE255A582000E217F9 /* SSKEnvironment.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAF4255A580600E217F9 /* SSKEnvironment.m */; }; + C33FDCAF255A582000E217F9 /* OWSAnalyticsEvents.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAF5255A580600E217F9 /* OWSAnalyticsEvents.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCB0255A582000E217F9 /* OWSIncomingSentMessageTranscript.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAF6255A580600E217F9 /* OWSIncomingSentMessageTranscript.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCB1255A582000E217F9 /* OWSPrimaryStorage+SignedPreKeyStore.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAF7255A580600E217F9 /* OWSPrimaryStorage+SignedPreKeyStore.m */; }; + C33FDCB2255A582000E217F9 /* OWSSyncGroupsRequestMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAF8255A580600E217F9 /* OWSSyncGroupsRequestMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCB3255A582000E217F9 /* TSContactThread.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAF9255A580600E217F9 /* TSContactThread.m */; }; + C33FDCB4255A582000E217F9 /* LKDeviceLinkMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAFA255A580600E217F9 /* LKDeviceLinkMessage.m */; }; + C33FDCB5255A582000E217F9 /* SessionMetaProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAFB255A580600E217F9 /* SessionMetaProtocol.swift */; }; + C33FDCB6255A582000E217F9 /* MIMETypeUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAFC255A580600E217F9 /* MIMETypeUtil.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCB7255A582000E217F9 /* LRUCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAFD255A580600E217F9 /* LRUCache.swift */; }; + C33FDCB8255A582000E217F9 /* OWSStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDAFE255A580600E217F9 /* OWSStorage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCB9255A582000E217F9 /* DisplayNameUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDAFF255A580600E217F9 /* DisplayNameUtilities.swift */; }; + C33FDCBA255A582000E217F9 /* OWSRequestBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB00255A580600E217F9 /* OWSRequestBuilder.m */; }; + C33FDCBB255A582000E217F9 /* AppReadiness.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB01255A580700E217F9 /* AppReadiness.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCBC255A582000E217F9 /* TSCall.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB02255A580700E217F9 /* TSCall.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCBD255A582000E217F9 /* OWSPrimaryStorage+SessionStore.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB03255A580700E217F9 /* OWSPrimaryStorage+SessionStore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCBF255A582000E217F9 /* OWSFingerprint.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB05255A580700E217F9 /* OWSFingerprint.m */; }; + C33FDCC0255A582000E217F9 /* OWSRequestBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB06255A580700E217F9 /* OWSRequestBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCC1255A582000E217F9 /* OWSBackupFragment.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB07255A580700E217F9 /* OWSBackupFragment.m */; }; + C33FDCC2255A582000E217F9 /* OWSProfileKeyMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB08255A580700E217F9 /* OWSProfileKeyMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCC3255A582000E217F9 /* NSError+MessageSending.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB09255A580700E217F9 /* NSError+MessageSending.m */; }; + C33FDCC4255A582000E217F9 /* TSGroupModel.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB0A255A580700E217F9 /* TSGroupModel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCC5255A582000E217F9 /* OWSVerificationStateChangeMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB0B255A580700E217F9 /* OWSVerificationStateChangeMessage.m */; }; + C33FDCC6255A582000E217F9 /* CDSQuote.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB0C255A580700E217F9 /* CDSQuote.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCC7255A582000E217F9 /* NSArray+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB0D255A580800E217F9 /* NSArray+OWS.m */; }; + C33FDCC8255A582000E217F9 /* NSError+MessageSending.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB0E255A580800E217F9 /* NSError+MessageSending.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCC9255A582000E217F9 /* DeviceLinkingSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB0F255A580800E217F9 /* DeviceLinkingSession.swift */; }; + C33FDCCA255A582000E217F9 /* OWSBatchMessageProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB10255A580800E217F9 /* OWSBatchMessageProcessor.m */; }; + C33FDCCC255A582000E217F9 /* NSString+SSK.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB12255A580800E217F9 /* NSString+SSK.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCCD255A582000E217F9 /* LKUnlinkDeviceMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB13255A580800E217F9 /* LKUnlinkDeviceMessage.m */; }; + C33FDCCE255A582000E217F9 /* OWSMath.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB14255A580800E217F9 /* OWSMath.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCD0255A582000E217F9 /* OWSDisappearingMessagesConfigurationMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB16255A580800E217F9 /* OWSDisappearingMessagesConfigurationMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCD1255A582000E217F9 /* FunctionalUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB17255A580800E217F9 /* FunctionalUtil.m */; }; + C33FDCD2255A582000E217F9 /* OWSSignalService.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB18255A580800E217F9 /* OWSSignalService.m */; }; + C33FDCD3255A582000E217F9 /* GroupUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB19255A580900E217F9 /* GroupUtilities.swift */; }; + C33FDCD4255A582000E217F9 /* OWSPrimaryStorage+Calling.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB1A255A580900E217F9 /* OWSPrimaryStorage+Calling.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCD5255A582000E217F9 /* OWSDeviceProvisioningCodeService.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB1B255A580900E217F9 /* OWSDeviceProvisioningCodeService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCD6255A582000E217F9 /* UIImage+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB1C255A580900E217F9 /* UIImage+OWS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCD7255A582000E217F9 /* OWSReadReceiptManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB1D255A580900E217F9 /* OWSReadReceiptManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCD8255A582000E217F9 /* OWSIncomingMessageFinder.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB1E255A580900E217F9 /* OWSIncomingMessageFinder.m */; }; + C33FDCD9255A582000E217F9 /* DeviceLinkingUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB1F255A580900E217F9 /* DeviceLinkingUtilities.swift */; }; + C33FDCDA255A582000E217F9 /* TSDatabaseSecondaryIndexes.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB20255A580900E217F9 /* TSDatabaseSecondaryIndexes.m */; }; + C33FDCDB255A582000E217F9 /* OWS2FAManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB21255A580900E217F9 /* OWS2FAManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCDC255A582000E217F9 /* OWSMediaUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB22255A580900E217F9 /* OWSMediaUtils.swift */; }; + C33FDCDE255A582000E217F9 /* OWSOutgoingSentMessageTranscript.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB24255A580900E217F9 /* OWSOutgoingSentMessageTranscript.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCDF255A582000E217F9 /* TSDatabaseSecondaryIndexes.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB25255A580900E217F9 /* TSDatabaseSecondaryIndexes.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCE0255A582000E217F9 /* FingerprintProto.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB26255A580A00E217F9 /* FingerprintProto.swift */; }; + C33FDCE1255A582000E217F9 /* OWSEndSessionMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB27255A580A00E217F9 /* OWSEndSessionMessage.m */; }; + C33FDCE2255A582000E217F9 /* OWSOutgoingCallMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB28255A580A00E217F9 /* OWSOutgoingCallMessage.m */; }; + C33FDCE3255A582000E217F9 /* NSData+Image.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB29255A580A00E217F9 /* NSData+Image.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCE4255A582000E217F9 /* OWSIncompleteCallsJob.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB2A255A580A00E217F9 /* OWSIncompleteCallsJob.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCE5255A582000E217F9 /* OWSProvisioningCipher.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB2B255A580A00E217F9 /* OWSProvisioningCipher.m */; }; + C33FDCE6255A582000E217F9 /* TSDatabaseView.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB2C255A580A00E217F9 /* TSDatabaseView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCE7255A582000E217F9 /* OWSDevice.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB2D255A580A00E217F9 /* OWSDevice.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCE8255A582000E217F9 /* OWSEndSessionMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB2E255A580A00E217F9 /* OWSEndSessionMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCE9255A582000E217F9 /* ContactsManagerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB2F255A580A00E217F9 /* ContactsManagerProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCEA255A582000E217F9 /* OWSDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB30255A580A00E217F9 /* OWSDevice.m */; }; + C33FDCEB255A582000E217F9 /* SSKEnvironment.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB31255A580A00E217F9 /* SSKEnvironment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCEC255A582000E217F9 /* SSKIncrementingIdFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB32255A580A00E217F9 /* SSKIncrementingIdFinder.swift */; }; + C33FDCED255A582000E217F9 /* Provisioning.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB33255A580B00E217F9 /* Provisioning.pb.swift */; }; + C33FDCEE255A582000E217F9 /* ClosedGroupPoller.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB34255A580B00E217F9 /* ClosedGroupPoller.swift */; }; + C33FDCEF255A582000E217F9 /* OWSContactDiscoveryOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB35255A580B00E217F9 /* OWSContactDiscoveryOperation.swift */; }; + C33FDCF0255A582000E217F9 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB36255A580B00E217F9 /* Storage.swift */; }; + C33FDCF1255A582000E217F9 /* Storage+SnodeAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB37255A580B00E217F9 /* Storage+SnodeAPI.swift */; }; + C33FDCF2255A582000E217F9 /* OWSBackgroundTask.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB38255A580B00E217F9 /* OWSBackgroundTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCF4255A582000E217F9 /* Poller.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB3A255A580B00E217F9 /* Poller.swift */; }; + C33FDCF5255A582000E217F9 /* NSNotificationCenter+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB3B255A580B00E217F9 /* NSNotificationCenter+OWS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCF7255A582000E217F9 /* OWSProfileKeyMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB3D255A580B00E217F9 /* OWSProfileKeyMessage.m */; }; + C33FDCF8255A582000E217F9 /* OWSMessageSender.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB3E255A580B00E217F9 /* OWSMessageSender.m */; }; + C33FDCF9255A582000E217F9 /* String+SSK.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB3F255A580C00E217F9 /* String+SSK.swift */; }; + C33FDCFA255A582000E217F9 /* SignalIOSProto.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB40255A580C00E217F9 /* SignalIOSProto.swift */; }; + C33FDCFB255A582000E217F9 /* MIMETypeUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB41255A580C00E217F9 /* MIMETypeUtil.m */; }; + C33FDCFC255A582000E217F9 /* OWSCountryMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB42255A580C00E217F9 /* OWSCountryMetadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDCFD255A582000E217F9 /* YapDatabaseConnection+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB43255A580C00E217F9 /* YapDatabaseConnection+OWS.m */; }; + C33FDCFE255A582000E217F9 /* OWSContactsOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB44255A580C00E217F9 /* OWSContactsOutputStream.m */; }; + C33FDCFF255A582000E217F9 /* NSString+SSK.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB45255A580C00E217F9 /* NSString+SSK.m */; }; + C33FDD00255A582000E217F9 /* TSDatabaseView.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB46255A580C00E217F9 /* TSDatabaseView.m */; }; + C33FDD01255A582000E217F9 /* OWSPrimaryStorage+PreKeyStore.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB47255A580C00E217F9 /* OWSPrimaryStorage+PreKeyStore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD02255A582000E217F9 /* TSOutgoingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB48255A580C00E217F9 /* TSOutgoingMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD03255A582000E217F9 /* WeakTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB49255A580C00E217F9 /* WeakTimer.swift */; }; + C33FDD04255A582000E217F9 /* SignalServiceClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB4A255A580C00E217F9 /* SignalServiceClient.swift */; }; + C33FDD05255A582000E217F9 /* OWSChunkedOutputStream.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB4B255A580C00E217F9 /* OWSChunkedOutputStream.m */; }; + C33FDD06255A582000E217F9 /* AppVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB4C255A580D00E217F9 /* AppVersion.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD09255A582000E217F9 /* SSKJobRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB4F255A580D00E217F9 /* SSKJobRecord.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD0A255A582000E217F9 /* OWSPrimaryStorage+PreKeyStore.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB50255A580D00E217F9 /* OWSPrimaryStorage+PreKeyStore.m */; }; + C33FDD0B255A582000E217F9 /* NSUserDefaults+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB51255A580D00E217F9 /* NSUserDefaults+OWS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD0C255A582000E217F9 /* OWSHTTPSecurityPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB52255A580D00E217F9 /* OWSHTTPSecurityPolicy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD0D255A582000E217F9 /* PreKeyBundle+jsonDict.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB53255A580D00E217F9 /* PreKeyBundle+jsonDict.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD0E255A582000E217F9 /* DataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB54255A580D00E217F9 /* DataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD0F255A582000E217F9 /* TSInvalidIdentityKeySendingErrorMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB55255A580D00E217F9 /* TSInvalidIdentityKeySendingErrorMessage.m */; }; + C33FDD10255A582000E217F9 /* TSOutgoingMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB56255A580D00E217F9 /* TSOutgoingMessage.m */; }; + C33FDD11255A582000E217F9 /* OWSSyncContactsMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB57255A580D00E217F9 /* OWSSyncContactsMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD12255A582000E217F9 /* OWSPrimaryStorage+Loki.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB58255A580E00E217F9 /* OWSPrimaryStorage+Loki.m */; }; + C33FDD13255A582000E217F9 /* OWSFailedAttachmentDownloadsJob.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB59255A580E00E217F9 /* OWSFailedAttachmentDownloadsJob.m */; }; + C33FDD14255A582000E217F9 /* OWSUDManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB5A255A580E00E217F9 /* OWSUDManager.swift */; }; + C33FDD15255A582000E217F9 /* YapDatabaseTransaction+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB5B255A580E00E217F9 /* YapDatabaseTransaction+OWS.m */; }; + C33FDD16255A582000E217F9 /* NSArray+Functional.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB5C255A580E00E217F9 /* NSArray+Functional.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD17255A582000E217F9 /* TSErrorMessage_privateConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB5D255A580E00E217F9 /* TSErrorMessage_privateConstructor.h */; }; + C33FDD18255A582000E217F9 /* ContactParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB5E255A580E00E217F9 /* ContactParser.swift */; }; + C33FDD19255A582000E217F9 /* YapDatabaseConnection+OWS.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB5F255A580E00E217F9 /* YapDatabaseConnection+OWS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD1A255A582000E217F9 /* TSMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB60255A580E00E217F9 /* TSMessage.m */; }; + C33FDD1B255A582000E217F9 /* LKUnlinkDeviceMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB61255A580E00E217F9 /* LKUnlinkDeviceMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD1C255A582000E217F9 /* OWSProvisioningCipher.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB62255A580E00E217F9 /* OWSProvisioningCipher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD1D255A582000E217F9 /* OWSDynamicOutgoingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB63255A580E00E217F9 /* OWSDynamicOutgoingMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD1E255A582000E217F9 /* PreKeyRefreshOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB64255A580E00E217F9 /* PreKeyRefreshOperation.swift */; }; + C33FDD1F255A582000E217F9 /* OWSSyncConfigurationMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB65255A580F00E217F9 /* OWSSyncConfigurationMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD20255A582000E217F9 /* ContactDiscoveryService.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB66255A580F00E217F9 /* ContactDiscoveryService.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD21255A582000E217F9 /* OWSMediaGalleryFinder.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB67255A580F00E217F9 /* OWSMediaGalleryFinder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD22255A582000E217F9 /* ContentProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB68255A580F00E217F9 /* ContentProxy.swift */; }; + C33FDD23255A582000E217F9 /* FeatureFlags.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB69255A580F00E217F9 /* FeatureFlags.swift */; }; + C33FDD24255A582000E217F9 /* SignalMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB6A255A580F00E217F9 /* SignalMessage.swift */; }; + C33FDD25255A582000E217F9 /* LKUserDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB6B255A580F00E217F9 /* LKUserDefaults.swift */; }; + C33FDD26255A582000E217F9 /* NSNotificationCenter+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB6C255A580F00E217F9 /* NSNotificationCenter+OWS.m */; }; + C33FDD27255A582000E217F9 /* TSPreKeyManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB6D255A580F00E217F9 /* TSPreKeyManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD28255A582000E217F9 /* SSKProtoPrekeyBundleMessage+Loki.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB6E255A580F00E217F9 /* SSKProtoPrekeyBundleMessage+Loki.swift */; }; + C33FDD29255A582000E217F9 /* OWSOutgoingReceiptManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB6F255A580F00E217F9 /* OWSOutgoingReceiptManager.m */; }; + C33FDD2A255A582000E217F9 /* OWSMessageServiceParams.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB70255A580F00E217F9 /* OWSMessageServiceParams.m */; }; + C33FDD2B255A582000E217F9 /* OWSMediaGalleryFinder.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB71255A581000E217F9 /* OWSMediaGalleryFinder.m */; }; + C33FDD2C255A582000E217F9 /* DeviceLinkIndex.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB72255A581000E217F9 /* DeviceLinkIndex.swift */; }; + C33FDD2D255A582000E217F9 /* TSGroupModel.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB73255A581000E217F9 /* TSGroupModel.m */; }; + C33FDD2E255A582000E217F9 /* TSInvalidIdentityKeyErrorMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB74255A581000E217F9 /* TSInvalidIdentityKeyErrorMessage.m */; }; + C33FDD2F255A582000E217F9 /* AppReadiness.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB75255A581000E217F9 /* AppReadiness.m */; }; + C33FDD30255A582000E217F9 /* ClosedGroupUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB76255A581000E217F9 /* ClosedGroupUtilities.swift */; }; + C33FDD31255A582000E217F9 /* NSUserDefaults+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB77255A581000E217F9 /* NSUserDefaults+OWS.m */; }; + C33FDD32255A582000E217F9 /* OWSOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB78255A581000E217F9 /* OWSOperation.m */; }; + C33FDD33255A582000E217F9 /* PhoneNumberUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB79255A581000E217F9 /* PhoneNumberUtil.m */; }; + C33FDD34255A582000E217F9 /* NotificationsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB7A255A581000E217F9 /* NotificationsProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD36255A582000E217F9 /* OWSVerificationStateChangeMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB7C255A581000E217F9 /* OWSVerificationStateChangeMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD37255A582000E217F9 /* OWSMessageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB7D255A581100E217F9 /* OWSMessageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD38255A582000E217F9 /* TSPreKeyManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB7E255A581100E217F9 /* TSPreKeyManager.m */; }; + C33FDD39255A582000E217F9 /* FullTextSearchFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB7F255A581100E217F9 /* FullTextSearchFinder.swift */; }; + C33FDD3A255A582000E217F9 /* Notification+Loki.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB80255A581100E217F9 /* Notification+Loki.swift */; }; + C33FDD3B255A582000E217F9 /* UIImage+OWS.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB81255A581100E217F9 /* UIImage+OWS.m */; }; + C33FDD3C255A582000E217F9 /* MessageWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB82255A581100E217F9 /* MessageWrapper.swift */; }; + C33FDD3D255A582000E217F9 /* TSQuotedMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB83255A581100E217F9 /* TSQuotedMessage.m */; }; + C33FDD3E255A582000E217F9 /* OWSIncomingSentMessageTranscript.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB84255A581100E217F9 /* OWSIncomingSentMessageTranscript.m */; }; + C33FDD3F255A582000E217F9 /* AppContext.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB85255A581100E217F9 /* AppContext.m */; }; + C33FDD40255A582000E217F9 /* OWSRequestFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB86255A581100E217F9 /* OWSRequestFactory.m */; }; + C33FDD41255A582000E217F9 /* JobQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB87255A581100E217F9 /* JobQueue.swift */; }; + C33FDD42255A582000E217F9 /* TSAccountManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB88255A581200E217F9 /* TSAccountManager.m */; }; + C33FDD43255A582000E217F9 /* FileServerAPI+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB89255A581200E217F9 /* FileServerAPI+Deprecated.swift */; }; + C33FDD44255A582000E217F9 /* AppContext.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB8A255A581200E217F9 /* AppContext.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD45255A582000E217F9 /* Storage+SessionManagement.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB8B255A581200E217F9 /* Storage+SessionManagement.swift */; }; + C33FDD46255A582000E217F9 /* TSInvalidIdentityKeyErrorMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB8C255A581200E217F9 /* TSInvalidIdentityKeyErrorMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD47255A582000E217F9 /* DeviceLinkingSessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB8D255A581200E217F9 /* DeviceLinkingSessionDelegate.swift */; }; + C33FDD48255A582000E217F9 /* OWSContact+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB8E255A581200E217F9 /* OWSContact+Private.h */; }; + C33FDD49255A582000E217F9 /* ParamParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB8F255A581200E217F9 /* ParamParser.swift */; }; + C33FDD4A255A582000E217F9 /* OWSMessageDecrypter.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB90255A581200E217F9 /* OWSMessageDecrypter.m */; }; + C33FDD4B255A582000E217F9 /* ProtoUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB91255A581200E217F9 /* ProtoUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD4C255A582000E217F9 /* OWSDeviceProvisioningService.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB92255A581200E217F9 /* OWSDeviceProvisioningService.m */; }; + C33FDD4D255A582000E217F9 /* PreKeyBundle+jsonDict.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB93255A581200E217F9 /* PreKeyBundle+jsonDict.m */; }; + C33FDD4E255A582000E217F9 /* TSAccountManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB94255A581300E217F9 /* TSAccountManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD4F255A582000E217F9 /* Storage+Collections.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB95255A581300E217F9 /* Storage+Collections.swift */; }; + C33FDD50255A582000E217F9 /* OWSReadReceiptsForLinkedDevicesMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB96255A581300E217F9 /* OWSReadReceiptsForLinkedDevicesMessage.m */; }; + C33FDD51255A582000E217F9 /* OWSDisappearingMessagesConfigurationMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB97255A581300E217F9 /* OWSDisappearingMessagesConfigurationMessage.m */; }; + C33FDD52255A582000E217F9 /* DeviceNames.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB98255A581300E217F9 /* DeviceNames.swift */; }; + C33FDD53255A582000E217F9 /* OWSPrimaryStorage+keyFromIntLong.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB99255A581300E217F9 /* OWSPrimaryStorage+keyFromIntLong.m */; }; + C33FDD54255A582000E217F9 /* OWS2FAManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB9A255A581300E217F9 /* OWS2FAManager.m */; }; + C33FDD55255A582000E217F9 /* MessageSenderJobQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB9B255A581300E217F9 /* MessageSenderJobQueue.swift */; }; + C33FDD56255A582000E217F9 /* TSIncomingMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB9C255A581300E217F9 /* TSIncomingMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD57255A582000E217F9 /* OWSCallMessageHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB9D255A581300E217F9 /* OWSCallMessageHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD58255A582000E217F9 /* TSAttachmentPointer.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB9E255A581400E217F9 /* TSAttachmentPointer.m */; }; + C33FDD59255A582000E217F9 /* TTLUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDB9F255A581400E217F9 /* TTLUtilities.swift */; }; + C33FDD5A255A582000E217F9 /* TSStorageHeaders.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBA0255A581400E217F9 /* TSStorageHeaders.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD5B255A582000E217F9 /* OWSOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBA1255A581400E217F9 /* OWSOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD5C255A582000E217F9 /* PhoneNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBA2255A581400E217F9 /* PhoneNumber.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD5D255A582000E217F9 /* SessionManagementProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBA3255A581400E217F9 /* SessionManagementProtocol.swift */; }; + C33FDD5E255A582000E217F9 /* OWSDisappearingMessagesConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBA4255A581400E217F9 /* OWSDisappearingMessagesConfiguration.m */; }; + C33FDD5F255A582000E217F9 /* SignalServiceProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBA5255A581400E217F9 /* SignalServiceProfile.swift */; }; + C33FDD60255A582000E217F9 /* TSInvalidIdentityKeySendingErrorMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBA6255A581400E217F9 /* TSInvalidIdentityKeySendingErrorMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD62255A582000E217F9 /* OWSLinkPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBA8255A581500E217F9 /* OWSLinkPreview.swift */; }; + C33FDD63255A582000E217F9 /* OWSIdentityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBA9255A581500E217F9 /* OWSIdentityManager.m */; }; + C33FDD65255A582000E217F9 /* OWSFileSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBAB255A581500E217F9 /* OWSFileSystem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD66255A582000E217F9 /* Data+SecureRandom.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBAC255A581500E217F9 /* Data+SecureRandom.swift */; }; + C33FDD67255A582000E217F9 /* OWSRecordTranscriptJob.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBAD255A581500E217F9 /* OWSRecordTranscriptJob.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD68255A582000E217F9 /* SignalAccount.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBAE255A581500E217F9 /* SignalAccount.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD69255A582000E217F9 /* OWSAnalyticsEvents.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBAF255A581500E217F9 /* OWSAnalyticsEvents.m */; }; + C33FDD6A255A582000E217F9 /* TSErrorMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBB0255A581500E217F9 /* TSErrorMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD6B255A582000E217F9 /* TSSocketManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBB1255A581500E217F9 /* TSSocketManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD6D255A582000E217F9 /* OWSOutgoingNullMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBB3255A581500E217F9 /* OWSOutgoingNullMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD6E255A582000E217F9 /* NSURLSessionDataTask+StatusCode.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBB4255A581600E217F9 /* NSURLSessionDataTask+StatusCode.m */; }; + C33FDD6F255A582000E217F9 /* OWSSyncGroupsMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBB5255A581600E217F9 /* OWSSyncGroupsMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD70255A582000E217F9 /* DataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBB6255A581600E217F9 /* DataSource.m */; }; + C33FDD71255A582000E217F9 /* SignalRecipient.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBB7255A581600E217F9 /* SignalRecipient.m */; }; + C33FDD72255A582000E217F9 /* TSThread.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBB8255A581600E217F9 /* TSThread.m */; }; + C33FDD73255A582000E217F9 /* ProfileManagerProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBB9255A581600E217F9 /* ProfileManagerProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD74255A582000E217F9 /* OWSPrimaryStorage+keyFromIntLong.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBBA255A581600E217F9 /* OWSPrimaryStorage+keyFromIntLong.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C33FDD75255A582000E217F9 /* OWSPrimaryStorage+Loki.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDBBB255A581600E217F9 /* OWSPrimaryStorage+Loki.h */; sett